Class: Digger::Model

Inherits:
Object
  • Object
show all
Defined in:
lib/digger/model.rb

Constant Summary collapse

@@digger_config =
{'pattern'=>{}, 'index'=>{}}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.index_configObject

index page



30
31
32
# File 'lib/digger/model.rb', line 30

def index_config
  @@digger_config['index'][self.name]
end

.index_page(pattern, *args) ⇒ Object



34
35
36
# File 'lib/digger/model.rb', line 34

def index_page(pattern, *args)
   @@digger_config['index'][self.name] = Index.new(pattern, args)
end

.index_page?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/digger/model.rb', line 38

def index_page?
  !index_config.nil?
end

.pattern_configObject

patterns



8
9
10
# File 'lib/digger/model.rb', line 8

def pattern_config
  @@digger_config['pattern'][self.name] ||= {}
end

.validate_includeness(*keys) ⇒ Object



25
26
27
# File 'lib/digger/model.rb', line 25

def validate_includeness(*keys)
  raise "Pattern keys #{(pattern_config.keys - keys).join(', ')} should not be included" unless pattern_config.keys.all?{|k| keys.include?(k)}
end

.validate_presence(*keys) ⇒ Object



20
21
22
23
# File 'lib/digger/model.rb', line 20

def validate_presence(*keys)
  keys_all = pattern_config.keys
  raise "Pattern keys #{(keys - keys_all).join(', ')} should be present" unless keys.all?{|k| keys_all.include?(k) }
end

Instance Method Details

#dig(cocurrence = 1) ⇒ Object



61
62
63
64
65
# File 'lib/digger/model.rb', line 61

def dig(cocurrence = 1)
  if self.class.index_page?
    self.class.index_config.process(cocurrence){|url| dig_url(url) }
  end
end

#dig_url(url, opts = {}) ⇒ Object



51
52
53
54
55
# File 'lib/digger/model.rb', line 51

def dig_url(url, opts = {})
  client = Digger::HTTP.new(opts)
  page = client.fetch_page(url)
  match_page(page)
end

#dig_urls(urls, cocurrence = 1, opts = {}) ⇒ Object



57
58
59
# File 'lib/digger/model.rb', line 57

def dig_urls(urls, cocurrence = 1, opts = {})
  Index.batch(urls, cocurrence){|url| dig_url(url, opts) }
end

#match_page(page) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/digger/model.rb', line 43

def match_page(page)
  result = {}
  self.class.pattern_config.each_pair do |key, pattern|
    result[key] = pattern.match_page(page)
  end
  result
end