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



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

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

.index_page(pattern, *args) ⇒ Object



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

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

.index_page?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/digger/model.rb', line 42

def index_page?
  !index_config.nil?
end

.pattern_configObject

patterns



11
12
13
# File 'lib/digger/model.rb', line 11

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

.validate_includeness(*keys) ⇒ Object



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

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

.validate_presence(*keys) ⇒ Object



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

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

Instance Method Details

#dig(cocurrence = 1) ⇒ Object



65
66
67
68
69
70
71
# File 'lib/digger/model.rb', line 65

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

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



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

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



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

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

#match_page(page) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/digger/model.rb', line 47

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