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
-
.dynamic_selector_schema ⇒ Hash{Symbol => Object}
Schema fragment for dynamic selector entries.
-
.enclosure_schema ⇒ Hash{Symbol => Object}
Schema fragment for ‘enclosure` selector configuration.
-
.items_schema ⇒ Hash{Symbol => Object}
Schema fragment for ‘items` selector configuration.
-
.pattern_properties ⇒ Hash{String => Object}
Schema map for dynamic selector keys.
-
.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.
-
.schema ⇒ Hash{Symbol => Object}
Schema fragment for selectors root object.
-
.selector_properties ⇒ Hash{Symbol => Object}
rubocop:disable Layout/LineLength.
Class Method Details
.dynamic_selector_schema ⇒ Hash{Symbol => Object}
Returns 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_schema ⇒ Hash{Symbol => Object}
Returns 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_schema ⇒ Hash{Symbol => Object}
Returns 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_properties ⇒ Hash{String => Object}
Returns 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.
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 |
.schema ⇒ Hash{Symbol => Object}
Returns 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_properties ⇒ Hash{Symbol => Object}
rubocop:disable Layout/LineLength
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 |