Skip to content
This repository has been archived by the owner on Apr 7, 2023. It is now read-only.

Commit

Permalink
rename klass to delegate internally to better reflect what this o…
Browse files Browse the repository at this point in the history
…bject is
  • Loading branch information
mislav committed Oct 24, 2009
1 parent 5925eb2 commit 065aa34
Showing 1 changed file with 11 additions and 11 deletions.
22 changes: 11 additions & 11 deletions scraper.rb
Expand Up @@ -44,8 +44,8 @@ def self.parse(html)


# Specify a new singular scraping rule # Specify a new singular scraping rule
def self.element(selector) def self.element(selector)
selector, name, klass = parse_rule_declaration(selector) selector, name, delegate = parse_rule_declaration(selector)
rules[name] = [selector, klass] rules[name] = [selector, delegate]
attr_accessor name attr_accessor name
name name
end end
Expand All @@ -58,24 +58,24 @@ def self.elements(selector)


# Let it do its thing! # Let it do its thing!
def parse def parse
self.class.rules.each do |target, (selector, klass, plural)| self.class.rules.each do |target, (selector, delegate, plural)|
if plural if plural
@doc.search(selector).each do |node| @doc.search(selector).each do |node|
send(target) << parse_result(node, klass) send(target) << parse_result(node, delegate)
end end
elsif node = @doc.at(selector) elsif node = @doc.at(selector)
send("#{target}=", parse_result(node, klass)) send("#{target}=", parse_result(node, delegate))
end end
end end
self self
end end


protected protected


# `klass` is optional, but should respond to `call` or `parse` # `delegate` is optional, but should respond to `call` or `parse`
def parse_result(node, klass) def parse_result(node, delegate)
if klass if delegate
klass.respond_to?(:call) ? klass.call(node) : klass.parse(node) delegate.respond_to?(:call) ? delegate.call(node) : delegate.parse(node)
elsif node.respond_to? :inner_text elsif node.respond_to? :inner_text
node.inner_text node.inner_text
else else
Expand All @@ -92,8 +92,8 @@ def parse_result(node, klass)
# #=> ['title', :title, nil] # #=> ['title', :title, nil]
def self.parse_rule_declaration(selector) def self.parse_rule_declaration(selector)
if Hash === selector if Hash === selector
klass = selector.delete(:with) delegate = selector.delete(:with)
selector.to_a.flatten << klass selector.to_a.flatten << delegate
else else
[selector.to_s, selector.to_sym, nil] [selector.to_s, selector.to_sym, nil]
end end
Expand Down

0 comments on commit 065aa34

Please sign in to comment.