Documentation

Overview

    Package item provides the default functionality to Ponzu's content/data types, how they interact with the API, and how to override or enhance their abilities using various interfaces.

    Index

    Constants

    This section is empty.

    Variables

    View Source
    var (
    	// ErrTypeNotRegistered means content type isn't registered (not found in Types map)
    	ErrTypeNotRegistered = errors.New(typeNotRegistered)
    
    	// ErrAllowHiddenItem should be used as an error to tell a caller of Hideable#Hide
    	// that this type is hidden, but should be shown in a particular case, i.e.
    	// if requested by a valid admin or user
    	ErrAllowHiddenItem = errors.New(`Allow hidden item`)
    
    	// Types is a map used to reference a type name to its actual Editable type
    	// mainly for lookups in /admin route based utilities
    	Types map[string]func() interface{}
    )

    Functions

    func FmtBytes

    func FmtBytes(size float64) string

      FmtBytes converts the numeric byte size value to the appropriate magnitude size in KB, MB, GB, TB, PB, or EB.

      func FmtTime

      func FmtTime(t int64) string

        FmtTime shows a human readable time based on the timestamp

        func NormalizeString

        func NormalizeString(s string) (string, error)

          NormalizeString removes and replaces illegal characters for URLs and other path entities. Useful for taking user input and converting it for keys or URLs.

          func Slug

          func Slug(i Identifiable) (string, error)

            Slug returns a URL friendly string from the title of a post item

            Types

            type FileUpload

            type FileUpload struct {
            	Item
            
            	Name          string `json:"name"`
            	Path          string `json:"path"`
            	ContentLength int64  `json:"content_length"`
            	ContentType   string `json:"content_type"`
            }

              FileUpload represents the file uploaded to the system

              func (*FileUpload) MarshalEditor

              func (f *FileUpload) MarshalEditor() ([]byte, error)

                MarshalEditor writes a buffer of html to edit a Post and partially implements editor.Editable

                func (*FileUpload) Push

                func (f *FileUpload) Push() []string

                func (*FileUpload) String

                func (f *FileUpload) String() string

                  String partially implements item.Identifiable and overrides Item's String()

                  type Hideable

                  type Hideable interface {
                  	Hide(http.ResponseWriter, *http.Request) error
                  }

                    Hideable lets a user keep items hidden

                    type Hookable

                    type Hookable interface {
                    	BeforeAPIResponse(http.ResponseWriter, *http.Request, []byte) ([]byte, error)
                    	AfterAPIResponse(http.ResponseWriter, *http.Request, []byte) error
                    
                    	BeforeAPICreate(http.ResponseWriter, *http.Request) error
                    	AfterAPICreate(http.ResponseWriter, *http.Request) error
                    
                    	BeforeAPIUpdate(http.ResponseWriter, *http.Request) error
                    	AfterAPIUpdate(http.ResponseWriter, *http.Request) error
                    
                    	BeforeAPIDelete(http.ResponseWriter, *http.Request) error
                    	AfterAPIDelete(http.ResponseWriter, *http.Request) error
                    
                    	BeforeAdminCreate(http.ResponseWriter, *http.Request) error
                    	AfterAdminCreate(http.ResponseWriter, *http.Request) error
                    
                    	BeforeAdminUpdate(http.ResponseWriter, *http.Request) error
                    	AfterAdminUpdate(http.ResponseWriter, *http.Request) error
                    
                    	BeforeAdminDelete(http.ResponseWriter, *http.Request) error
                    	AfterAdminDelete(http.ResponseWriter, *http.Request) error
                    
                    	BeforeSave(http.ResponseWriter, *http.Request) error
                    	AfterSave(http.ResponseWriter, *http.Request) error
                    
                    	BeforeDelete(http.ResponseWriter, *http.Request) error
                    	AfterDelete(http.ResponseWriter, *http.Request) error
                    
                    	BeforeApprove(http.ResponseWriter, *http.Request) error
                    	AfterApprove(http.ResponseWriter, *http.Request) error
                    
                    	BeforeReject(http.ResponseWriter, *http.Request) error
                    	AfterReject(http.ResponseWriter, *http.Request) error
                    
                    	// Enable/Disable used for addons
                    	BeforeEnable(http.ResponseWriter, *http.Request) error
                    	AfterEnable(http.ResponseWriter, *http.Request) error
                    
                    	BeforeDisable(http.ResponseWriter, *http.Request) error
                    	AfterDisable(http.ResponseWriter, *http.Request) error
                    }

                      Hookable provides our user with an easy way to intercept or add functionality to the different lifecycles/events a struct may encounter. Item implements Hookable with no-ops so our user can override only whichever ones necessary.

                      type Identifiable

                      type Identifiable interface {
                      	ItemID() int
                      	SetItemID(int)
                      	UniqueID() uuid.UUID
                      	String() string
                      }

                        Identifiable enables a struct to have its ID set/get. Typically this is done to set an ID to -1 indicating it is new for DB inserts, since by default a newly initialized struct would have an ID of 0, the int zero-value, and BoltDB's starting key per bucket is 0, thus overwriting the first record.

                        type Item

                        type Item struct {
                        	UUID      uuid.UUID `json:"uuid"`
                        	ID        int       `json:"id"`
                        	Slug      string    `json:"slug"`
                        	Timestamp int64     `json:"timestamp"`
                        	Updated   int64     `json:"updated"`
                        }

                          Item should only be embedded into content type structs.

                          func (Item) AfterAPICreate

                          func (i Item) AfterAPICreate(res http.ResponseWriter, req *http.Request) error

                            AfterAPICreate is a no-op to ensure structs which embed Item implement Hookable

                            func (Item) AfterAPIDelete

                            func (i Item) AfterAPIDelete(res http.ResponseWriter, req *http.Request) error

                              AfterAPIDelete is a no-op to ensure structs which embed Item implement Hookable

                              func (Item) AfterAPIResponse

                              func (i Item) AfterAPIResponse(res http.ResponseWriter, req *http.Request, data []byte) error

                                AfterAPIResponse is a no-op to ensure structs which embed Item implement Hookable

                                func (Item) AfterAPIUpdate

                                func (i Item) AfterAPIUpdate(res http.ResponseWriter, req *http.Request) error

                                  AfterAPIUpdate is a no-op to ensure structs which embed Item implement Hookable

                                  func (Item) AfterAdminCreate

                                  func (i Item) AfterAdminCreate(res http.ResponseWriter, req *http.Request) error

                                    AfterAdminCreate is a no-op to ensure structs which embed Item implement Hookable

                                    func (Item) AfterAdminDelete

                                    func (i Item) AfterAdminDelete(res http.ResponseWriter, req *http.Request) error

                                      AfterAdminDelete is a no-op to ensure structs which embed Item implement Hookable

                                      func (Item) AfterAdminUpdate

                                      func (i Item) AfterAdminUpdate(res http.ResponseWriter, req *http.Request) error

                                        AfterAdminUpdate is a no-op to ensure structs which embed Item implement Hookable

                                        func (Item) AfterApprove

                                        func (i Item) AfterApprove(res http.ResponseWriter, req *http.Request) error

                                          AfterApprove is a no-op to ensure structs which embed Item implement Hookable

                                          func (Item) AfterDelete

                                          func (i Item) AfterDelete(res http.ResponseWriter, req *http.Request) error

                                            AfterDelete is a no-op to ensure structs which embed Item implement Hookable

                                            func (Item) AfterDisable

                                            func (i Item) AfterDisable(res http.ResponseWriter, req *http.Request) error

                                              AfterDisable is a no-op to ensure structs which embed Item implement Hookable

                                              func (Item) AfterEnable

                                              func (i Item) AfterEnable(res http.ResponseWriter, req *http.Request) error

                                                AfterEnable is a no-op to ensure structs which embed Item implement Hookable

                                                func (Item) AfterReject

                                                func (i Item) AfterReject(res http.ResponseWriter, req *http.Request) error

                                                  AfterReject is a no-op to ensure structs which embed Item implement Hookable

                                                  func (Item) AfterSave

                                                  func (i Item) AfterSave(res http.ResponseWriter, req *http.Request) error

                                                    AfterSave is a no-op to ensure structs which embed Item implement Hookable

                                                    func (Item) BeforeAPICreate

                                                    func (i Item) BeforeAPICreate(res http.ResponseWriter, req *http.Request) error

                                                      BeforeAPICreate is a no-op to ensure structs which embed Item implement Hookable

                                                      func (Item) BeforeAPIDelete

                                                      func (i Item) BeforeAPIDelete(res http.ResponseWriter, req *http.Request) error

                                                        BeforeAPIDelete is a no-op to ensure structs which embed Item implement Hookable

                                                        func (Item) BeforeAPIResponse

                                                        func (i Item) BeforeAPIResponse(res http.ResponseWriter, req *http.Request, data []byte) ([]byte, error)

                                                          BeforeAPIResponse is a no-op to ensure structs which embed Item implement Hookable

                                                          func (Item) BeforeAPIUpdate

                                                          func (i Item) BeforeAPIUpdate(res http.ResponseWriter, req *http.Request) error

                                                            BeforeAPIUpdate is a no-op to ensure structs which embed Item implement Hookable

                                                            func (Item) BeforeAdminCreate

                                                            func (i Item) BeforeAdminCreate(res http.ResponseWriter, req *http.Request) error

                                                              BeforeAdminCreate is a no-op to ensure structs which embed Item implement Hookable

                                                              func (Item) BeforeAdminDelete

                                                              func (i Item) BeforeAdminDelete(res http.ResponseWriter, req *http.Request) error

                                                                BeforeAdminDelete is a no-op to ensure structs which embed Item implement Hookable

                                                                func (Item) BeforeAdminUpdate

                                                                func (i Item) BeforeAdminUpdate(res http.ResponseWriter, req *http.Request) error

                                                                  BeforeAdminUpdate is a no-op to ensure structs which embed Item implement Hookable

                                                                  func (Item) BeforeApprove

                                                                  func (i Item) BeforeApprove(res http.ResponseWriter, req *http.Request) error

                                                                    BeforeApprove is a no-op to ensure structs which embed Item implement Hookable

                                                                    func (Item) BeforeDelete

                                                                    func (i Item) BeforeDelete(res http.ResponseWriter, req *http.Request) error

                                                                      BeforeDelete is a no-op to ensure structs which embed Item implement Hookable

                                                                      func (Item) BeforeDisable

                                                                      func (i Item) BeforeDisable(res http.ResponseWriter, req *http.Request) error

                                                                        BeforeDisable is a no-op to ensure structs which embed Item implement Hookable

                                                                        func (Item) BeforeEnable

                                                                        func (i Item) BeforeEnable(res http.ResponseWriter, req *http.Request) error

                                                                          BeforeEnable is a no-op to ensure structs which embed Item implement Hookable

                                                                          func (Item) BeforeReject

                                                                          func (i Item) BeforeReject(res http.ResponseWriter, req *http.Request) error

                                                                            BeforeReject is a no-op to ensure structs which embed Item implement Hookable

                                                                            func (Item) BeforeSave

                                                                            func (i Item) BeforeSave(res http.ResponseWriter, req *http.Request) error

                                                                              BeforeSave is a no-op to ensure structs which embed Item implement Hookable

                                                                              func (Item) IndexContent

                                                                              func (i Item) IndexContent() bool

                                                                                IndexContent determines if a type should be indexed for searching partially implements search.Searchable

                                                                                func (Item) ItemID

                                                                                func (i Item) ItemID() int

                                                                                  ItemID gets the Item's ID field partially implements the Identifiable interface

                                                                                  func (*Item) ItemSlug

                                                                                  func (i *Item) ItemSlug() string

                                                                                    ItemSlug sets the item's slug for its URL

                                                                                    func (Item) SearchMapping

                                                                                    func (i Item) SearchMapping() (*mapping.IndexMappingImpl, error)

                                                                                      SearchMapping returns a default implementation of a Bleve IndexMappingImpl partially implements search.Searchable

                                                                                      func (*Item) SetItemID

                                                                                      func (i *Item) SetItemID(id int)

                                                                                        SetItemID sets the Item's ID field partially implements the Identifiable interface

                                                                                        func (*Item) SetSlug

                                                                                        func (i *Item) SetSlug(slug string)

                                                                                          SetSlug sets the item's slug for its URL

                                                                                          func (Item) String

                                                                                          func (i Item) String() string

                                                                                            String formats an Item into a printable value partially implements the Identifiable interface

                                                                                            func (Item) Time

                                                                                            func (i Item) Time() int64

                                                                                              Time partially implements the Sortable interface

                                                                                              func (Item) Touch

                                                                                              func (i Item) Touch() int64

                                                                                                Touch partially implements the Sortable interface

                                                                                                func (Item) UniqueID

                                                                                                func (i Item) UniqueID() uuid.UUID

                                                                                                  UniqueID gets the Item's UUID field partially implements the Identifiable interface

                                                                                                  type Omittable

                                                                                                  type Omittable interface {
                                                                                                  	Omit(http.ResponseWriter, *http.Request) ([]string, error)
                                                                                                  }

                                                                                                    Omittable lets a user define certin fields within a content struct to remove from an API response. Helpful when you want data in the CMS, but not entirely shown or available from the content API. All items in the slice should be the json tag names of the struct fields to which they correspond.

                                                                                                    type Pushable

                                                                                                    type Pushable interface {
                                                                                                    	// the values contained by fields returned by Push must strictly be URL paths
                                                                                                    	Push(http.ResponseWriter, *http.Request) ([]string, error)
                                                                                                    }

                                                                                                      Pushable lets a user define which values of certain struct fields are 'pushed' down to a client via HTTP/2 Server Push. All items in the slice should be the json tag names of the struct fields to which they correspond.

                                                                                                      type Sluggable

                                                                                                      type Sluggable interface {
                                                                                                      	SetSlug(string)
                                                                                                      	ItemSlug() string
                                                                                                      }

                                                                                                        Sluggable makes a struct locatable by URL with it's own path. As an Item implementing Sluggable, slugs may overlap. If this is an issue, make your content struct (or one which embeds Item) implement Sluggable and it will override the slug created by Item's SetSlug with your own

                                                                                                        type Sortable

                                                                                                        type Sortable interface {
                                                                                                        	Time() int64
                                                                                                        	Touch() int64
                                                                                                        }

                                                                                                          Sortable ensures data is sortable by time