class SagroneScraper::Base

Constants

Error

Attributes

attributes[R]
page[R]
url[R]

Public Class Methods

can_scrape?(url) click to toggle source
# File lib/sagrone_scraper/base.rb, line 29
def self.can_scrape?(url)
  class_with_method = "#{self}.can_scrape?(url)"
  raise NotImplementedError.new("Expected #{class_with_method} to be implemented.")
end
new(options = {}) click to toggle source
# File lib/sagrone_scraper/base.rb, line 10
def initialize(options = {})
  raise Error.new('Exactly one option must be provided: "url" or "page"') unless exactly_one_of(options)

  @url, @page = options[:url], options[:page]

  @url ||= page_url
  @page ||= Agent.new(url: url).page
  @attributes = {}
end
should_ignore_method?(name) click to toggle source
# File lib/sagrone_scraper/base.rb, line 34
def self.should_ignore_method?(name)
  private_method_defined?(name)
end

Private Class Methods

inherited(klass) click to toggle source
# File lib/sagrone_scraper/base.rb, line 59
def self.inherited(klass)
  SagroneScraper::Collection.register_scraper(klass.name)
end
method_added(name) click to toggle source
# File lib/sagrone_scraper/base.rb, line 55
def self.method_added(name)
  method_names.push(name) unless should_ignore_method?(name)
end
method_names() click to toggle source
# File lib/sagrone_scraper/base.rb, line 51
def self.method_names
  @method_names ||= []
end

Public Instance Methods

scrape_page!() click to toggle source
# File lib/sagrone_scraper/base.rb, line 20
def scrape_page!
  return unless self.class.can_scrape?(page_url)

  self.class.method_names.each do |name|
    attributes[name] = send(name)
  end
  nil
end

Private Instance Methods

exactly_one_of(options) click to toggle source
# File lib/sagrone_scraper/base.rb, line 40
def exactly_one_of(options)
  url_present = !!options[:url]
  page_present = !!options[:page]

  (url_present && !page_present) || (!url_present && page_present)
end
page_url() click to toggle source
# File lib/sagrone_scraper/base.rb, line 47
def page_url
  @page.uri.to_s
end