module Horsefield::Diggable

Public Instance Methods

fields() click to toggle source
# File lib/horsefield/diggable.rb, line 50
def fields
  @fields ||= {}
end
many(name, selector, lookup = :optional, &block) click to toggle source
# 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) click to toggle source
# File lib/horsefield/diggable.rb, line 30
def many!(name, selector, &block)
  many(name, selector, :required, &block)
end
many?(name, selector, &block) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# File lib/horsefield/diggable.rb, line 38
def one!(name, selector = nil, &block)
  one(name, selector, :required, &block)
end
one?(name, selector = nil, &block) click to toggle source
# File lib/horsefield/diggable.rb, line 42
def one?(name, selector = nil, &block)
  one(name, selector, :presence, &block)
end
processor(&block) click to toggle source
# File lib/horsefield/diggable.rb, line 46
def processor(&block)
  block || Proc.new { text.strip }
end
with_fresh_fields() click to toggle source
# File lib/horsefield/diggable.rb, line 3
def with_fresh_fields
  @fields = {}
  self
end