Module: OpenDMM::Site::ClassMethods

Defined in:
lib/opendmm/site.rb

Instance Method Summary collapse

Instance Method Details

#get_with_retry(url, limit = 5) ⇒ Object



21
22
23
24
25
26
27
28
# File 'lib/opendmm/site.rb', line 21

def get_with_retry(url, limit = 5)
  return nil unless url
  get url
rescue Errno::ETIMEDOUT, Errno::ECONNREFUSED => e
  tries ||= 0
  tries++
  tries <= limit ? retry : raise
end

#product(name) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/opendmm/site.rb', line 57

def product(name)
  url = product_url name
  page = get_with_retry url
  return nil unless page && page.code == 200
  html = Utils.html_in_utf8 page
  details = parse_product_html html
  details[:code] ||= product_code name
  details[:page] ||= page.request.last_uri.to_s
  extra_info = product_extra_info(name, url, page, html)
  extra_info.each do |k, v|
    details[k] ||= v
  end
  Utils.finalize_details_hash details
end

#product_code(name) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/opendmm/site.rb', line 44

def product_code(name)
  code_generators.each do |matcher, code_generator|
    if name =~ matcher
      return eval code_generator
    end
  end
  nil
end

#product_extra_info(name, url, page, html) ⇒ Object



53
54
55
# File 'lib/opendmm/site.rb', line 53

def product_extra_info(name, url, page, html)
  Hash.new
end

#product_url(name) ⇒ Object



35
36
37
38
39
40
41
42
# File 'lib/opendmm/site.rb', line 35

def product_url(name)
  url_generators.each do |matcher, url_generator|
    if name =~ matcher
      return eval url_generator
    end
  end
  nil
end

#register_product(matcher, url_generator, code_generator = '#{$1.upcase}-#{$2}') ⇒ Object



30
31
32
33
# File 'lib/opendmm/site.rb', line 30

def register_product(matcher, url_generator, code_generator = '#{$1.upcase}-#{$2}')
  url_generators[matcher] = '"' + url_generator + '"'
  code_generators[matcher] = '"' + code_generator + '"'
end