Documentation
¶
Index ¶
- func AlterBlocks(list []Block, selector BlockMatcher, fn func(*Block))
- func AlterFirstBlock(list []Block, selector BlockMatcher, fn func(*Block))
- func JSONSchema() []byte
- type Block
- func AddOrReplaceBlock(list []Block, selector BlockMatcher, insert Block) []Block
- func AllBlocks(list []Block, selector BlockMatcher) []Block
- func DedupeBlocks(list []Block, selector BlockMatcher) []Block
- func DropBlocks(list []Block, selector BlockMatcher) []Block
- func FirstBlock(list []Block, selector BlockMatcher) (Block, bool)
- func UpsertBlock(list []Block, selector BlockMatcher, insert Block, fn func(b Block) Block) []Block
- func WithBlockOfType(list []Block, blockType string, fn func(b Block) Block) []Block
- type BlockKind
- type BlockMatchFunc
- type BlockMatcher
- func BlockDoesntMatch(selector BlockMatcher) BlockMatcher
- func BlockMatchesAll(matchers ...BlockMatcher) BlockMatcher
- func BlockMatchesAny(matchers ...BlockMatcher) BlockMatcher
- func BlocksWithRel(rel string) BlockMatcher
- func BlocksWithType(blockType string) BlockMatcher
- func BlocksWithTypeAndRel(blockType string, rel string) BlockMatcher
- func BlocksWithTypeAndRole(blockType string, role string) BlockMatcher
- type BlockRole
- type BlockSelector
- type DataFilter
- type DataFilterMode
- type DataMap
- type Document
- type ExtractedItems
- type ExtractedValue
- type FilterNode
- type FilterOp
- type ValueExtractor
- type ValueKind
- type ValueSource
- type ValueSpec
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AlterBlocks ¶ added in v0.7.0
func AlterBlocks(list []Block, selector BlockMatcher, fn func(*Block))
AlterBlocks calls fn for each block matching the selector.
func AlterFirstBlock ¶ added in v0.7.2
func AlterFirstBlock(list []Block, selector BlockMatcher, fn func(*Block))
AlterFirstBlock calls fn for the first block matching the selector.
Types ¶
type Block ¶
type Block struct {
// ID is the block ID,
ID string `json:"id,omitempty" proto:"1"`
// UUID is used to reference another Document in a block.
UUID string `json:"uuid,omitempty" jsonschema_extras:"format=uuid" proto:"2"`
// URI is used to reference another entity in a document.
URI string `json:"uri,omitempty" jsonschema_extras:"format=uri" proto:"3"`
// URL is a browseable URL for the the block.
URL string `json:"url,omitempty" jsonschema_extras:"format=uri" proto:"4"`
// Type is the type of the block
Type string `json:"type,omitempty" proto:"5"`
// Title is the title/headline of the block, typically used in the
// presentation of the block.
Title string `json:"title,omitempty" proto:"6"`
// Data contains block data.
Data DataMap `json:"data,omitempty" proto:"7"`
// Rel describes the relationship to the document/parent entity.
Rel string `json:"rel,omitempty" proto:"8"`
// Role is used either as an alternative to rel, or for nuancing the
// relationship.
Role string `json:"role,omitempty" proto:"9"`
// Name is a name for the block. An alternative to "rel" when
// relationship is a term that doesn't fit.
Name string `json:"name,omitempty" proto:"10"`
// Value is a value for the block. Useful when we want to store a
// primitive value.
Value string `json:"value,omitempty" proto:"11"`
// ContentType is used to describe the content type of the block/linked
// entity if it differs from the type of the block.
Contenttype string `json:"contenttype,omitempty" proto:"12"`
// Links are used to link to other resources and documents.
Links []Block `json:"links,omitempty" proto:"13"`
// Content is used to embed content blocks.
Content []Block `json:"content,omitempty" proto:"14"`
// Meta is used to embed metadata
Meta []Block `json:"meta,omitempty" proto:"15"`
// Sensitivity can be use to communicate how the information in a block
// can be handled. It could f.ex. be set to "internal", to show that it
// contains information that must be removed or transformed before
// publishing.
Sensitivity string `json:"sensitivity,omitempty" proto:"16"`
}
Block is the building block for data embedded in documents. It is used for both content, links and metadata. Blocks have can be nested, but that's nothing to strive for, keep it simple.
func AddOrReplaceBlock ¶ added in v0.7.0
func AddOrReplaceBlock( list []Block, selector BlockMatcher, insert Block, ) []Block
AddOrReplaceBlock inserts a new block into the list, or replaces the first block matching the selector.
func AllBlocks ¶ added in v0.7.1
func AllBlocks(list []Block, selector BlockMatcher) []Block
AllBlocks returns all blocks matching the selector.
func DedupeBlocks ¶ added in v0.7.0
func DedupeBlocks(list []Block, selector BlockMatcher) []Block
DedupeBlocks removes all but the first block matching the selector.
func DropBlocks ¶ added in v0.7.0
func DropBlocks(list []Block, selector BlockMatcher) []Block
DropBlocks removes all blocks matching the selector.
func FirstBlock ¶ added in v0.7.0
func FirstBlock(list []Block, selector BlockMatcher) (Block, bool)
FirstBlock returns the first block matching the selector.
func UpsertBlock ¶ added in v0.7.0
func UpsertBlock( list []Block, selector BlockMatcher, insert Block, fn func(b Block) Block, ) []Block
UpsertBlock inserts a new block or updates an existing block if it matches the selector. The function fn will be called on the inserted or existing block.
func WithBlockOfType ¶ added in v0.7.0
WithBlockOfType upserts a block with the given type, see UpsertBlock().
type BlockMatchFunc ¶ added in v0.7.0
BlockMatchFunc is a custom BlockMatcher function.
func (BlockMatchFunc) Match ¶ added in v0.7.0
func (fn BlockMatchFunc) Match(block Block) bool
Implements BlockMatcher.
type BlockMatcher ¶ added in v0.7.0
type BlockMatcher interface {
// Match returns true if the block matches the condition.
Match(block Block) bool
}
BlockMatcher checks if a block matches a condition.
func BlockDoesntMatch ¶ added in v0.7.0
func BlockDoesntMatch(selector BlockMatcher) BlockMatcher
BlockDoesntMatch returns a block matcher that negates the selector.
func BlockMatchesAll ¶ added in v0.7.0
func BlockMatchesAll(matchers ...BlockMatcher) BlockMatcher
BlockMatchesAll returns a block matcher that returns true if a block matches all the conditions.
func BlockMatchesAny ¶ added in v0.7.0
func BlockMatchesAny(matchers ...BlockMatcher) BlockMatcher
BlockMatchesAny returns a block matcher that returns true if a block matches any of the conditions.
func BlocksWithRel ¶ added in v0.7.0
func BlocksWithRel(rel string) BlockMatcher
BlocksWithRel returns a BlockMatcher that matches blocks with the given rel.
func BlocksWithType ¶ added in v0.7.0
func BlocksWithType(blockType string) BlockMatcher
BlocksWithType returns a BlockMatcher that matches blocks with the given type.
func BlocksWithTypeAndRel ¶ added in v0.7.0
func BlocksWithTypeAndRel(blockType string, rel string) BlockMatcher
BlocksWithTypeAndRel returns a BlockMatcher that matches blocks with the given type and rel.
func BlocksWithTypeAndRole ¶ added in v0.7.0
func BlocksWithTypeAndRole(blockType string, role string) BlockMatcher
BlocksWithTypeAndRole returns a BlockMatcher that matches blocks with the given type and role.
type BlockRole ¶ added in v0.7.0
type BlockRole string
BlockRole can be used to check that a block has a specific role.
type BlockSelector ¶ added in v0.8.0
type BlockSelector struct {
Kind BlockKind
Filter *FilterNode `json:",omitempty"`
}
BlockSelector selects blocks by kind and optional attribute/data filters.
func (BlockSelector) FilterBlocks ¶ added in v0.9.0
func (bs BlockSelector) FilterBlocks(blocks []Block) []Block
func (BlockSelector) Matches ¶ added in v0.8.0
func (bs BlockSelector) Matches(b Block) bool
type DataFilter ¶ added in v0.9.0
type DataFilter struct {
Key string
Value string `json:",omitempty"`
Mode DataFilterMode
}
DataFilter is a filter condition on a block's data map.
type DataFilterMode ¶ added in v0.9.0
type DataFilterMode string
DataFilterMode describes the comparison mode for a data filter.
const ( // DataFilterExact matches when the data key exists with the exact // value. DataFilterExact DataFilterMode = "exact" // DataFilterExists matches when the data key exists, even if empty. DataFilterExists DataFilterMode = "exists" // DataFilterNonEmpty matches when the data key exists and is non-empty. DataFilterNonEmpty DataFilterMode = "non-empty" )
type DataMap ¶
DataMap is used as key -> (string) value data for blocks.
func CopyData ¶ added in v0.7.0
CopyData copies the given keys from the source data map to the destination. Keys will only be copied if they actually exists and it's safe to call the function with nil DataMaps. The result will always be a non-nil DataMap.
func DataWithDefaults ¶ added in v0.7.0
WithDefaults adds the values from defaults into data if the value for corresponding key is unset or empty. If data is nil a new DataMap will be created.
func UpsertData ¶ added in v0.7.0
UpsertData adds the values from new into data. If data is nil a new DataMap will be created.
func (DataMap) Delete ¶ added in v0.7.0
Delete the values with the given keys. This is safe to use on nil DataMaps.
func (DataMap) DropEmpty ¶ added in v0.7.0
func (bd DataMap) DropEmpty()
DropEmpty removes all entries with empty values. This is safe to use on nil DataMaps.
func (DataMap) Get ¶ added in v0.7.0
Get the value with the given key. This is safe to use on nil DataMaps.
func (DataMap) MarshalJSON ¶
MarshalJSON implements a custom marshaler to make the JSON output of a document deterministic. Maps are unordered.
type Document ¶
type Document struct {
// UUID is a unique ID for the document, this can for example be a
// random v4 UUID, or a URI-derived v5 UUID.
UUID string `json:"uuid,omitempty" jsonschema_extras:"format=uuid" proto:"1"`
// Type is the content type of the document.
Type string `json:"type,omitempty" proto:"2"`
// URI identifies the document (in a more human-readable way than the
// UUID).
URI string `json:"uri,omitempty" jsonschema_extras:"format=uri" proto:"3"`
// URL is the browseable location of the document (if any).
URL string `json:"url,omitempty" jsonschema_extras:"format=uri" proto:"4"`
// Title is the title of the document, can be used as the document name,
// or the headline when the document is displayed.
Title string `json:"title,omitempty" proto:"5"`
// Content is the content of the document, this is essentially what gets
// rendered on the page when you view a document.
Content []Block `json:"content,omitempty" proto:"6"`
// Meta is the metadata for a document, this could be things like
// teasers, open graph data, newsvalues.
Meta []Block `json:"meta,omitempty" proto:"7"`
// Links are links to other resources and entities. This could be links
// to topics, categories and subjects for the document, or credited
// authors.
Links []Block `json:"links,omitempty" proto:"8"`
// Language is the language used in the document as an IETF language
// tag. F.ex. "en", "en-UK", "es", or "sv-SE".
Language string `json:"language,omitempty" proto:"9"`
}
Document is a NewsDoc document.
type ExtractedItems ¶ added in v0.8.0
type ExtractedItems map[string]ExtractedValue
type ExtractedValue ¶ added in v0.8.0
type FilterNode ¶ added in v0.9.0
type FilterNode struct {
Op FilterOp `json:",omitempty"`
Children []FilterNode `json:",omitempty"`
Attr string `json:",omitempty"`
Value string `json:",omitempty"`
Data *DataFilter `json:",omitempty"`
}
FilterNode is a node in a boolean filter expression tree. Branch nodes have Op and Children set; leaf nodes have either Attr+Value (attribute match) or Data (data filter) set.
func (*FilterNode) Matches ¶ added in v0.9.0
func (fn *FilterNode) Matches(b Block) bool
Matches reports whether the filter node matches the given block. A nil node matches all blocks.
type FilterOp ¶ added in v0.9.0
type FilterOp string
FilterOp is the boolean operator for a filter node.
type ValueExtractor ¶ added in v0.8.0
type ValueExtractor struct {
Selectors []BlockSelector
ChildSelectors []BlockSelector `json:",omitempty"`
ValueKind ValueKind
Values []ValueSpec
}
func ValueExtractorFromBytes ¶ added in v0.8.0
func ValueExtractorFromBytes(text []byte) (*ValueExtractor, error)
func ValueExtractorFromString ¶ added in v0.8.0
func ValueExtractorFromString(text string) (*ValueExtractor, error)
func (*ValueExtractor) Collect ¶ added in v0.8.0
func (ve *ValueExtractor) Collect(doc Document) []ExtractedItems
type ValueKind ¶ added in v0.8.0
type ValueKind string
ValueKind describes what kind of values a ValueExtractor produces.
const ( // ValueKindAttributes extracts block attribute values using @{}. ValueKindAttributes ValueKind = "attributes" // ValueKindData extracts block data map values using .data{}. ValueKindData ValueKind = "data" // ValueKindBlock extracts matched blocks themselves (name=.selectors). ValueKindBlock ValueKind = "block" // ValueKindCombined extracts both attribute and data values from matched // blocks using @{}.data{} in a single expression. ValueKindCombined ValueKind = "combined" )
type ValueSource ¶ added in v0.9.0
type ValueSource string
ValueSource identifies whether a value spec in a combined extraction targets block attributes or block data. It is only populated for ValueKindCombined expressions.
const ( ValueSourceData ValueSource = "data" ValueSourceAttributes ValueSource = "attributes" )