horsefield 0.4.4 → 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/horsefield/diggable.rb +4 -0
- data/lib/horsefield/scraper.rb +7 -0
- data/lib/horsefield/version.rb +1 -1
- data/test/horsefield/test_scraper.rb +8 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d7c5b46ca33faa902ca0b3f2bcb95f1a73b7847
|
4
|
+
data.tar.gz: 85d693b67216dfd9f8d892c7d807c7eec44eb756
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc0cc13c94212af228dad182f1e824c1b60b84e001fa1b08f7a870c5d572ff3ed76058fd0eb16016d44e7f5f32cc53a4a5f8c1ac658520d971bc721e06441e5a
|
7
|
+
data.tar.gz: 531ff538e0989e95baa6081f3e9ff5dc87bcd63638b5b1ebecdb4aadc44bc34a20806dcf029cc535976eac76effb881714b751801a2eeaac6bbf464d1e056c6d
|
data/lib/horsefield/diggable.rb
CHANGED
@@ -2,8 +2,10 @@ module Horsefield
|
|
2
2
|
module Diggable
|
3
3
|
def many(name, selector, lookup = :optional, &block)
|
4
4
|
docs = search(selector)
|
5
|
+
|
5
6
|
raise MissingSelectorError if lookup == :required && docs.empty?
|
6
7
|
return fields if lookup == :presence && docs.empty?
|
8
|
+
|
7
9
|
nodes = docs.map do |doc|
|
8
10
|
doc.instance_eval(&processor(&block))
|
9
11
|
end
|
@@ -13,8 +15,10 @@ module Horsefield
|
|
13
15
|
|
14
16
|
def one(name, selector = nil, lookup = :optional, &block)
|
15
17
|
doc = selector ? at(selector) : self
|
18
|
+
|
16
19
|
raise MissingSelectorError if lookup == :required && !doc
|
17
20
|
return fields if lookup == :presence && !doc
|
21
|
+
|
18
22
|
fields.merge!(Hash[[[name, doc && doc.instance_eval(&processor(&block))]]])
|
19
23
|
end
|
20
24
|
|
data/lib/horsefield/scraper.rb
CHANGED
@@ -4,6 +4,13 @@ require 'nokogiri'
|
|
4
4
|
|
5
5
|
module Horsefield
|
6
6
|
module Scraper
|
7
|
+
def self.scrape(html_or_url, &block)
|
8
|
+
Class.new {
|
9
|
+
include Horsefield::Scraper
|
10
|
+
instance_eval(&block)
|
11
|
+
}.new(html_or_url).scrape
|
12
|
+
end
|
13
|
+
|
7
14
|
def self.included(base)
|
8
15
|
base.extend(ClassMethods)
|
9
16
|
end
|
data/lib/horsefield/version.rb
CHANGED
@@ -55,7 +55,6 @@ class TestScraper < Minitest::Test
|
|
55
55
|
|
56
56
|
def test_that_it_scrapes
|
57
57
|
recipe = RecipeScraper.new(@html).scrape
|
58
|
-
p recipe
|
59
58
|
|
60
59
|
assert_equal 'Traditional Welsh cawl', recipe[:title]
|
61
60
|
end
|
@@ -68,4 +67,12 @@ class TestScraper < Minitest::Test
|
|
68
67
|
def test_that_it_raises_with_missing_required_field
|
69
68
|
assert_raises(Horsefield::MissingSelectorError) { RecipeScraperWithRequiredField.new(@html).scrape }
|
70
69
|
end
|
70
|
+
|
71
|
+
def test_standalone_scraper
|
72
|
+
recipe = Horsefield::Scraper.scrape(@html) do
|
73
|
+
one :title, '.hide_from_screen h1'
|
74
|
+
end
|
75
|
+
|
76
|
+
assert_equal 'Traditional Welsh cawl', recipe[:title]
|
77
|
+
end
|
71
78
|
end
|