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