Module: Horsefield::Diggable
- Defined in:
- lib/horsefield/diggable.rb
Instance Method Summary collapse
- #fields ⇒ Object
- #many(name, selector, lookup = :optional, &block) ⇒ Object
- #many!(name, selector, &block) ⇒ Object
- #many?(name, selector, &block) ⇒ Boolean
- #one(name, selector = nil, lookup = :optional, &block) ⇒ Object
- #one!(name, selector = nil, &block) ⇒ Object
- #one?(name, selector = nil, &block) ⇒ Boolean
- #processor(&block) ⇒ Object
- #with_fresh_fields ⇒ Object
Instance Method Details
#fields ⇒ Object
50 51 52 |
# File 'lib/horsefield/diggable.rb', line 50 def fields @fields ||= {} end |
#many(name, selector, lookup = :optional, &block) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/horsefield/diggable.rb', line 8 def many(name, selector, lookup = :optional, &block) docs = search(selector) raise MissingSelectorError, "Couldn't find required selector (#{selector})" if lookup == :required && docs.empty? return fields if lookup == :presence && docs.empty? nodes = docs.map do |doc| doc.instance_eval(&processor(&block)) end fields.merge!(Hash[[[name, nodes]]]) end |
#many!(name, selector, &block) ⇒ Object
30 31 32 |
# File 'lib/horsefield/diggable.rb', line 30 def many!(name, selector, &block) many(name, selector, :required, &block) end |
#many?(name, selector, &block) ⇒ Boolean
34 35 36 |
# File 'lib/horsefield/diggable.rb', line 34 def many?(name, selector, &block) many(name, selector, :presence, &block) end |
#one(name, selector = nil, lookup = :optional, &block) ⇒ Object
21 22 23 24 25 26 27 28 |
# File 'lib/horsefield/diggable.rb', line 21 def one(name, selector = nil, lookup = :optional, &block) doc = selector ? at(selector) : self.dup raise MissingSelectorError, "Couldn't find required selector (#{selector})" if lookup == :required && !doc return fields if lookup == :presence && !doc fields.merge!(Hash[[[name, doc && doc.with_fresh_fields.instance_eval(&processor(&block))]]]) end |
#one!(name, selector = nil, &block) ⇒ Object
38 39 40 |
# File 'lib/horsefield/diggable.rb', line 38 def one!(name, selector = nil, &block) one(name, selector, :required, &block) end |
#one?(name, selector = nil, &block) ⇒ Boolean
42 43 44 |
# File 'lib/horsefield/diggable.rb', line 42 def one?(name, selector = nil, &block) one(name, selector, :presence, &block) end |
#processor(&block) ⇒ Object
46 47 48 |
# File 'lib/horsefield/diggable.rb', line 46 def processor(&block) block || Proc.new { text.strip } end |
#with_fresh_fields ⇒ Object
3 4 5 6 |
# File 'lib/horsefield/diggable.rb', line 3 def with_fresh_fields @fields = {} self end |