Module: Html2rss::Config::Schema::Selectors

Defined in:
lib/html2rss/config/schema.rb

Overview

Provides schema fragments that document selector configuration.

Constant Summary collapse

RESERVED_SELECTOR_PATTERN =

Pattern used for dynamic selector keys excluding reserved selector names.

'^(?!items$|enclosure$|guid$|categories$).+$'

Class Method Summary collapse

Class Method Details

.dynamic_selector_schemaHash{Symbol => Object}

Returns schema fragment for dynamic selector entries.

Returns:

  • (Hash{Symbol => Object})

    schema fragment for dynamic selector entries



174
175
176
177
178
# File 'lib/html2rss/config/schema.rb', line 174

def dynamic_selector_schema
  Html2rss::Selectors::Config::Selector.new.schema.json_schema(loose: true).merge(
    description: 'Dynamic selector definition keyed by attribute name.'
  )
end

.enclosure_schemaHash{Symbol => Object}

Returns schema fragment for ‘enclosure` selector configuration.

Returns:

  • (Hash{Symbol => Object})

    schema fragment for ‘enclosure` selector configuration



188
189
190
191
192
# File 'lib/html2rss/config/schema.rb', line 188

def enclosure_schema
  Html2rss::Selectors::Config::Enclosure.new.schema.json_schema(loose: true).merge(
    description: 'Describes enclosure extraction settings.'
  )
end

.items_schemaHash{Symbol => Object}

Returns schema fragment for ‘items` selector configuration.

Returns:

  • (Hash{Symbol => Object})

    schema fragment for ‘items` selector configuration



181
182
183
184
185
# File 'lib/html2rss/config/schema.rb', line 181

def items_schema
  Html2rss::Selectors::Config::Items.new.schema.json_schema(loose: true).merge(
    description: 'Defines the items selector and optional enhancement settings.'
  )
end

.pattern_propertiesHash{String => Object}

Returns schema map for dynamic selector keys.

Returns:

  • (Hash{String => Object})

    schema map for dynamic selector keys



169
170
171
# File 'lib/html2rss/config/schema.rb', line 169

def pattern_properties
  { RESERVED_SELECTOR_PATTERN => dynamic_selector_schema }
end

.reference_array(description) ⇒ Hash{Symbol => Object}

JSON Schema can enforce non-empty reference arrays, while runtime validation remains authoritative for checking that each entry points to an existing sibling selector key.

Parameters:

  • description (String)

    human-readable description for the reference field

Returns:

  • (Hash{Symbol => Object})

    JSON schema fragment for selector references



199
200
201
202
203
204
205
206
207
208
209
# File 'lib/html2rss/config/schema.rb', line 199

def reference_array(description)
  {
    type: 'array',
    description:,
    minItems: 1,
    items: {
      type: 'string',
      description: 'Selector key defined elsewhere in this object.'
    }
  }
end

.schemaHash{Symbol => Object}

Returns schema fragment for selectors root object.

Returns:

  • (Hash{Symbol => Object})

    schema fragment for selectors root object



146
147
148
149
150
151
152
153
154
# File 'lib/html2rss/config/schema.rb', line 146

def schema
  {
    type: 'object',
    description: 'Selectors used to extract article attributes.',
    properties: selector_properties,
    patternProperties: pattern_properties,
    additionalProperties: true
  }
end

.selector_propertiesHash{Symbol => Object}

rubocop:disable Layout/LineLength

Returns:

  • (Hash{Symbol => Object})

    schema map for reserved selector properties



158
159
160
161
162
163
164
165
# File 'lib/html2rss/config/schema.rb', line 158

def selector_properties
  {
    items: items_schema,
    enclosure: enclosure_schema,
    guid: reference_array('List of selector keys used to build the GUID. Each entry must reference a sibling selector key; runtime validation enforces those references.'),
    categories: reference_array('List of selector keys whose values will be used as categories. Each entry must reference a sibling selector key; runtime validation enforces those references.')
  }
end