Module: Html2rss::AutoSource::Scraper::JsonState::ValueFinder
- Defined in:
- lib/html2rss/auto_source/scraper/json_state/value_finder.rb
Overview
Retrieves values from heterogeneous objects by probing multiple keys.
Class Method Summary collapse
-
.fetch(object, keys) ⇒ Object?
First matching value.
-
.fetch_from_array(array, keys) ⇒ Object?
First matching value from array entries.
-
.fetch_from_hash(hash, keys) ⇒ Object?
First matching value from hash or nested metadata.
-
.fetch_nested(value, keys) ⇒ Object?
Matching nested value.
Class Method Details
.fetch(object, keys) ⇒ Object?
Returns first matching value.
14 15 16 17 18 19 |
# File 'lib/html2rss/auto_source/scraper/json_state/value_finder.rb', line 14 def fetch(object, keys) case object when Hash then fetch_from_hash(object, keys) when Array then fetch_from_array(object, keys) end end |
.fetch_from_array(array, keys) ⇒ Object?
Returns first matching value from array entries.
36 37 38 39 40 41 42 43 |
# File 'lib/html2rss/auto_source/scraper/json_state/value_finder.rb', line 36 def fetch_from_array(array, keys) array.each do |entry| result = fetch(entry, keys) return result if result end nil end |
.fetch_from_hash(hash, keys) ⇒ Object?
Returns first matching value from hash or nested metadata.
24 25 26 27 28 29 30 31 |
# File 'lib/html2rss/auto_source/scraper/json_state/value_finder.rb', line 24 def fetch_from_hash(hash, keys) keys.each do |key| return hash[key] if hash.key?(key) end fetch_nested(hash[:attributes], keys) || fetch_nested(hash[:data], keys) end |
.fetch_nested(value, keys) ⇒ Object?
Returns matching nested value.
48 49 50 |
# File 'lib/html2rss/auto_source/scraper/json_state/value_finder.rb', line 48 def fetch_nested(value, keys) fetch(value, keys) if value end |