Module: OpenDMM::Site::ClassMethods

Defined in:
lib/opendmm/site.rb

Instance Method Summary collapse

Instance Method Details

#get_with_retry(url, limit = 5) ⇒ Object



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

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



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/opendmm/site.rb', line 58

def product(name)
  return nil unless name =~ /^[[:ascii:]]+$/
  url = product_url name
  page = get_with_retry url
  return nil unless page && page.code == 200
  html = Utils.html_in_utf8 page
  html.css('script').remove
  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
  details = Utils.finalize_details_hash details
  i(code cover_image maker page thumbnail_image title).each do |key|
    return unless details[key]
  end
  details
end

#product_code(name) ⇒ Object



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

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



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

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

#product_url(name) ⇒ Object



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

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



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

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