Class: BridgetownDirectus::Configuration::CollectionConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/bridgetown_directus/configuration.rb

Overview

Collection configuration class

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ CollectionConfig

Initialize a new collection configuration

Parameters:

  • name (Symbol)

    The name of the collection



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/bridgetown_directus/configuration.rb', line 37

def initialize(name)
  @name = name
  @fields = {}
  @default_query = {}
  @resource_type = :posts
  @layout = "post"
  @translations_enabled = false
  @translatable_fields = []
  @endpoint = nil
  @singleton = false
  @m2m_flattenings = []
end

Instance Attribute Details

#default_queryObject

Set up accessors for collection configuration properties



51
52
53
# File 'lib/bridgetown_directus/configuration.rb', line 51

def default_query
  @default_query
end

#endpointObject

Set up accessors for collection configuration properties



51
52
53
# File 'lib/bridgetown_directus/configuration.rb', line 51

def endpoint
  @endpoint
end

#fieldsObject

Set up accessors for collection configuration properties



51
52
53
# File 'lib/bridgetown_directus/configuration.rb', line 51

def fields
  @fields
end

#layoutObject

Set up accessors for collection configuration properties



51
52
53
# File 'lib/bridgetown_directus/configuration.rb', line 51

def layout
  @layout
end

#m2m_flatteningsObject (readonly)

Returns the value of attribute m2m_flattenings.



53
54
55
# File 'lib/bridgetown_directus/configuration.rb', line 53

def m2m_flattenings
  @m2m_flattenings
end

#nameObject (readonly)

Returns the value of attribute name.



33
34
35
# File 'lib/bridgetown_directus/configuration.rb', line 33

def name
  @name
end

#resource_typeObject

Set up accessors for collection configuration properties



51
52
53
# File 'lib/bridgetown_directus/configuration.rb', line 51

def resource_type
  @resource_type
end

#singletonObject

Set up accessors for collection configuration properties



51
52
53
# File 'lib/bridgetown_directus/configuration.rb', line 51

def singleton
  @singleton
end

#translatable_fieldsObject

Set up accessors for collection configuration properties



51
52
53
# File 'lib/bridgetown_directus/configuration.rb', line 51

def translatable_fields
  @translatable_fields
end

#translations_enabledObject

Set up accessors for collection configuration properties



51
52
53
# File 'lib/bridgetown_directus/configuration.rb', line 51

def translations_enabled
  @translations_enabled
end

Instance Method Details

#data?Boolean

Check if this collection is a data-only collection

Returns:

  • (Boolean)


70
71
72
# File 'lib/bridgetown_directus/configuration.rb', line 70

def data?
  @resource_type == :data
end

#enable_translations(fields = []) ⇒ void

This method returns an undefined value.

Enable translations for this collection

Parameters:

  • fields (Array<Symbol>) (defaults to: [])

    The fields that should be translated



89
90
91
92
# File 'lib/bridgetown_directus/configuration.rb', line 89

def enable_translations(fields = [])
  @translations_enabled = true
  @translatable_fields = fields
end

#field(bridgetown_field, directus_field, &converter) ⇒ void

This method returns an undefined value.

Define a field mapping with optional converter

Parameters:

  • bridgetown_field (Symbol)

    The field name in Bridgetown

  • directus_field (String, Symbol)

    The field name in Directus

  • converter (Proc, nil)

    Optional converter to transform the field value



79
80
81
82
83
84
# File 'lib/bridgetown_directus/configuration.rb', line 79

def field(bridgetown_field, directus_field, &converter)
  @fields[bridgetown_field] = {
    directus_field: directus_field.to_s,
    converter: converter,
  }
end

#flatten_m2m(path, key:) ⇒ void

This method returns an undefined value.

Register a many-to-many junction to flatten after fetching. Directus returns M2M data wrapped in junction objects like:

[{"raus_stats_id": {"id": 1, "value": "8+"}}]

This unwraps them to:

[{"id": 1, "value": "8+"}]

Parameters:

  • path (String)

    Dot-separated path to the M2M field (e.g. "sections.stats")

  • key (String)

    The junction key containing the actual related item



64
65
66
# File 'lib/bridgetown_directus/configuration.rb', line 64

def flatten_m2m(path, key:)
  @m2m_flattenings << { path: path, key: key }
end

#path(item) ⇒ String

Generate the resource path for a given item

Parameters:

  • item (Hash)

    The data item from Directus

Returns:

  • (String)

    The resource path



97
98
99
100
101
# File 'lib/bridgetown_directus/configuration.rb', line 97

def path(item)
  # Default: /:resource_type/:slug/index.html
  slug = item["slug"] || item[:slug] || item["id"] || item[:id]
  "/#{resource_type}/#{slug}/index.html"
end