hmachine 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +4 -133
- data/hmachine.gemspec +15 -79
- metadata +22 -89
- data/.gitignore +0 -3
- data/Gemfile +0 -11
- data/Gemfile.lock +0 -51
- data/Rakefile +0 -53
- data/bin/hmachine +0 -99
- data/test/fixtures/hcard/commercenet.html +0 -21
- data/test/fixtures/hcard/geo.html +0 -28
- data/test/fixtures/huffduffer.html +0 -466
- data/test/fixtures/likeorhate.html +0 -48
- data/test/fixtures/rel_license.html +0 -4
- data/test/fixtures/test-fixture/hcard/hcard1.html +0 -147
- data/test/fixtures/test-fixture/hcard/hcard11.html +0 -123
- data/test/fixtures/test-fixture/hcard/hcard12.html +0 -178
- data/test/fixtures/test-fixture/hcard/hcard17.html +0 -165
- data/test/fixtures/test-fixture/hcard/hcard2.html +0 -264
- data/test/fixtures/test-fixture/hcard/hcard3.html +0 -144
- data/test/fixtures/test-fixture/hcard/hcard4.html +0 -117
- data/test/fixtures/test-fixture/hcard/hcard5.html +0 -119
- data/test/fixtures/test-fixture/hcard/hcard6.html +0 -188
- data/test/fixtures/test-fixture/hcard/hcard7.html +0 -188
- data/test/fixtures/test-fixture/hcard/hcard8.html +0 -130
- data/test/fixtures/test-fixture/hcard/hcard9.html +0 -111
- data/test/fixtures/test-fixture/hcard/hcard99.html +0 -215
- data/test/fixtures/test-fixture/value-class-date-time/value-dt-test-YYYY-MM-DD--HH-MM.html +0 -9
- data/test/fixtures/test-fixture/value-class-date-time/value-dt-test-abbr-YYYY-MM-DD--HH-MM.html +0 -4
- data/test/fixtures/xfn.html +0 -198
- data/test/fixtures/xmdp.html +0 -32
- data/test/fixtures/xoxo.html +0 -51
- data/test/hmachine_test.rb +0 -133
- data/test/microformat/adr_test.rb +0 -47
- data/test/microformat/geo_test.rb +0 -66
- data/test/microformat/hcard_test.rb +0 -510
- data/test/microformat/rellicense_test.rb +0 -36
- data/test/microformat/reltag_test.rb +0 -61
- data/test/microformat/votelinks_test.rb +0 -44
- data/test/microformat/xfn_test.rb +0 -28
- data/test/microformat/xmdp_test.rb +0 -16
- data/test/microformat/xoxo_test.rb +0 -51
- data/test/microformat_test.rb +0 -20
- data/test/pattern/date_time_test.rb +0 -55
- data/test/pattern/value_class_test.rb +0 -33
- data/test/pattern_test.rb +0 -132
- data/test/posh/anchor_test.rb +0 -41
- data/test/posh/base_test.rb +0 -150
- data/test/posh/definition_list_test.rb +0 -38
- data/test/test_helper.rb +0 -32
@@ -1,36 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
|
-
|
3
|
-
class RelLicenseTest < Test::Unit::TestCase
|
4
|
-
setup do
|
5
|
-
@html = get_fixture('rel_license.html')
|
6
|
-
@doc = Nokogiri::HTML.parse(@html)
|
7
|
-
end
|
8
|
-
|
9
|
-
describe 'Class' do
|
10
|
-
should 'find itself in a document' do
|
11
|
-
assert_equal 2, HMachine::Microformat::RelLicense.find_in(@doc).count
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe 'Instance' do
|
16
|
-
setup do
|
17
|
-
@klass = HMachine::Microformat::RelLicense
|
18
|
-
@node = @klass.find_in(@doc).first
|
19
|
-
end
|
20
|
-
|
21
|
-
should 'have a license' do
|
22
|
-
test = @klass.new(@node)
|
23
|
-
assert_respond_to test, :license
|
24
|
-
end
|
25
|
-
|
26
|
-
should 'parse the license out of the node' do
|
27
|
-
test = @klass.new(@node)
|
28
|
-
assert_equal 'http://creativecommons.org/licenses/by/2.0/', test.license
|
29
|
-
end
|
30
|
-
|
31
|
-
should 'be the license when converted to a string' do
|
32
|
-
test = @klass.new(@node)
|
33
|
-
assert_equal test.license, test.to_s
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
|
-
|
3
|
-
class RelTagTest < Test::Unit::TestCase
|
4
|
-
setup do
|
5
|
-
@html = get_fixture('huffduffer.html')
|
6
|
-
@doc = Nokogiri::HTML.parse(@html)
|
7
|
-
end
|
8
|
-
|
9
|
-
describe 'Class' do
|
10
|
-
should 'find itself in a document' do
|
11
|
-
first_entry = @doc.css('.hfeed > .hentry').first
|
12
|
-
assert_equal 8, HMachine::Microformat::RelTag.find_in(first_entry).count
|
13
|
-
end
|
14
|
-
|
15
|
-
should 'parse itself out of a document' do
|
16
|
-
first_entry = @doc.css('.hfeed > .hentry').first
|
17
|
-
assert_equal HMachine::Microformat::RelTag, HMachine::Microformat::RelTag.parse(first_entry).first.class
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe 'Instance' do
|
22
|
-
setup do
|
23
|
-
@klass = HMachine::Microformat::RelTag
|
24
|
-
first_entry = @doc.css('.hfeed > .hentry').first
|
25
|
-
@node = @klass.find_in(first_entry).first
|
26
|
-
end
|
27
|
-
|
28
|
-
should 'have a name that is the tag' do
|
29
|
-
test = @klass.new(@node)
|
30
|
-
assert_equal test.tag.keys.first, test.name
|
31
|
-
end
|
32
|
-
|
33
|
-
should 'convert to a string easily' do
|
34
|
-
test = @klass.new(@node)
|
35
|
-
assert_equal test.name, "#{test}"
|
36
|
-
end
|
37
|
-
|
38
|
-
should 'store the url for the tag' do
|
39
|
-
test = @klass.new(@node)
|
40
|
-
assert_equal test.tag.values.first, test.url
|
41
|
-
end
|
42
|
-
|
43
|
-
should 'hash should be a representation of the tag' do
|
44
|
-
test = @klass.new(@node)
|
45
|
-
assert_equal test.tag, test.to_h
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe 'Parsing' do
|
50
|
-
setup do
|
51
|
-
@klass = HMachine::Microformat::RelTag
|
52
|
-
end
|
53
|
-
|
54
|
-
should "get a tag" do
|
55
|
-
first_entry = @doc.css('.hfeed > .hentry').first
|
56
|
-
test = @klass.new(@klass.find_in(first_entry).first)
|
57
|
-
assert_equal "event%3Aspeaker%3Dtim+o%27reilly", test.tag.keys.first
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
|
-
|
3
|
-
class VoteLinksTest < Test::Unit::TestCase
|
4
|
-
setup do
|
5
|
-
@html = get_fixture('likeorhate.html')
|
6
|
-
@doc = Nokogiri::HTML.parse(@html)
|
7
|
-
end
|
8
|
-
|
9
|
-
describe 'Class' do
|
10
|
-
should 'find itself in a document' do
|
11
|
-
assert_equal 3, HMachine::Microformat::VoteLinks.find_in(@doc).count
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe 'Instance' do
|
16
|
-
setup do
|
17
|
-
@klass = HMachine::Microformat::VoteLinks
|
18
|
-
@node = @klass.find_in(@doc).first
|
19
|
-
end
|
20
|
-
|
21
|
-
should 'be a specific type of vote' do
|
22
|
-
test = @klass.new(@node)
|
23
|
-
assert_equal 'vote-for', test.type
|
24
|
-
end
|
25
|
-
|
26
|
-
should 'check vote type' do
|
27
|
-
test = @klass.new(@node)
|
28
|
-
assert test.for?, "VoteLink is type of #{test.type}"
|
29
|
-
assert !test.against?
|
30
|
-
assert !test.abstain?
|
31
|
-
end
|
32
|
-
|
33
|
-
should 'store the url of the vote' do
|
34
|
-
test = @klass.new(@node)
|
35
|
-
assert_equal 'http://likeorhate.com/rate/?id=1191956&rate=like', test.url
|
36
|
-
end
|
37
|
-
|
38
|
-
should "Additional human-readable commentary can be added using the existing 'title' attribute" do
|
39
|
-
test = @klass.new(@node)
|
40
|
-
assert_equal 'Do you like it? Click now and vote!', test.title
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
|
-
|
3
|
-
class XFNTest < Test::Unit::TestCase
|
4
|
-
setup do
|
5
|
-
html = get_fixture('xfn.html')
|
6
|
-
@doc = Nokogiri::HTML.parse(html)
|
7
|
-
@klass = HMachine::Microformat::XFN
|
8
|
-
end
|
9
|
-
|
10
|
-
should 'search the document for relationships' do
|
11
|
-
contact = @klass.parse_first(@doc)
|
12
|
-
assert_respond_to contact, :rel
|
13
|
-
contact.rel.include? 'contact'
|
14
|
-
end
|
15
|
-
|
16
|
-
should 'define boolean methods' do
|
17
|
-
contact = @klass.parse_first(@doc)
|
18
|
-
assert_respond_to contact, :friendship?
|
19
|
-
assert_respond_to contact, :me?
|
20
|
-
assert contact.friendship?
|
21
|
-
end
|
22
|
-
|
23
|
-
should 'be able to parse just "me" relationships' do
|
24
|
-
me = @klass.parse_me(@doc)
|
25
|
-
assert me.first.me?
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
|
-
|
3
|
-
class XMDPTest < Test::Unit::TestCase
|
4
|
-
setup do
|
5
|
-
html = get_fixture('xmdp.html')
|
6
|
-
doc = Nokogiri::HTML.parse(html)
|
7
|
-
@klass = HMachine::Microformat::XMDP
|
8
|
-
@node = @klass.find_in(doc).first
|
9
|
-
end
|
10
|
-
|
11
|
-
should 'be just like a definition list' do
|
12
|
-
xmdp = @klass.new(@node)
|
13
|
-
assert xmdp.to_h.has_key?(:rel)
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
|
-
|
3
|
-
class XOXOTest < Test::Unit::TestCase
|
4
|
-
setup do
|
5
|
-
html = get_fixture('xoxo.html')
|
6
|
-
doc = Nokogiri::HTML.parse(html)
|
7
|
-
@klass = HMachine::Microformat::XOXO
|
8
|
-
@node = @klass.find_in(doc).first
|
9
|
-
end
|
10
|
-
|
11
|
-
should 'construct an outline' do
|
12
|
-
test = @klass.new(@node)
|
13
|
-
assert_equal 5, test.outline.count
|
14
|
-
end
|
15
|
-
|
16
|
-
should 'convert to an array easily' do
|
17
|
-
test = @klass.new(@node)
|
18
|
-
assert_equal test.outline, test.to_a
|
19
|
-
end
|
20
|
-
|
21
|
-
should 'index quickly into the outline' do
|
22
|
-
test = @klass.new(@node)
|
23
|
-
assert_equal test.to_a[0], test[0]
|
24
|
-
end
|
25
|
-
|
26
|
-
should 'convert list items to an array' do
|
27
|
-
test = @klass.new(@node)
|
28
|
-
assert_instance_of Array, test[0]
|
29
|
-
end
|
30
|
-
|
31
|
-
should 'convert lists to arrays' do
|
32
|
-
test = @klass.new(@node)
|
33
|
-
assert_instance_of Array, test[0][1]
|
34
|
-
end
|
35
|
-
|
36
|
-
should 'convert definition lists to hashes' do
|
37
|
-
test = @klass.new(@node)
|
38
|
-
assert test[3].first.has_key?("description"), "Definition List is: #{test[3].first.inspect}"
|
39
|
-
end
|
40
|
-
|
41
|
-
should 'convert links to hashes' do
|
42
|
-
test = @klass.new(@node)
|
43
|
-
assert test[4].first.has_key?(:url), "Definition List is: #{test[4].first.inspect}"
|
44
|
-
end
|
45
|
-
|
46
|
-
should 'know if this is a blogroll' do
|
47
|
-
test = @klass.new(@node)
|
48
|
-
assert !test.blogroll?, "Test is a blogroll"
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
data/test/microformat_test.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
-
|
3
|
-
class MicroformatTest < Test::Unit::TestCase
|
4
|
-
should 'map a symbol to a design pattern' do
|
5
|
-
assert HMachine::Microformat::HCard, HMachine::Microformat.map(:hcard)
|
6
|
-
assert HMachine::Microformat::RelTag, HMachine.map(:reltag)
|
7
|
-
end
|
8
|
-
|
9
|
-
should 'find all microformats in a document' do
|
10
|
-
huffduff = HMachine::Microformat.find_all get_fixture('huffduffer.html')
|
11
|
-
assert_equal 45, huffduff.count
|
12
|
-
end
|
13
|
-
|
14
|
-
should 'find specific microformats in a document' do
|
15
|
-
huffduff = HMachine::Microformat.find get_fixture('huffduffer.html'), :hcard
|
16
|
-
assert_equal 'mawunsch', huffduff.first.fn
|
17
|
-
assert_equal 10, huffduff.count
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__),'..','test_helper')
|
2
|
-
|
3
|
-
class DateTimePatternTest < Test::Unit::TestCase
|
4
|
-
setup do
|
5
|
-
@pattern = HMachine::Pattern::DateTime
|
6
|
-
end
|
7
|
-
|
8
|
-
should 'recognize a simple iso8601 date' do
|
9
|
-
assert @pattern.date?('2010-02-14')
|
10
|
-
assert @pattern.date?('2010-185')
|
11
|
-
assert !@pattern.date?('12:00pm')
|
12
|
-
end
|
13
|
-
|
14
|
-
should 'recognize a simple iso8601 time' do
|
15
|
-
assert @pattern.time?('12:00')
|
16
|
-
assert @pattern.time?('4:00pm')
|
17
|
-
assert @pattern.time?('12:45:30Z')
|
18
|
-
assert !@pattern.time?('2010-02-14')
|
19
|
-
end
|
20
|
-
|
21
|
-
should 'build an iso8601 date' do
|
22
|
-
assert '2010-02-14', @pattern.date('February 14, 2010')
|
23
|
-
assert_equal @pattern.date('July 4 2010'), @pattern.date('2010-185')
|
24
|
-
assert_equal '2010-1-1', @pattern.date('January 2010')
|
25
|
-
end
|
26
|
-
|
27
|
-
should 'build an iso8601 time' do
|
28
|
-
assert_equal 'T12:0:0-18000', @pattern.time('12:00')
|
29
|
-
assert_equal 'T13:0:0-18000', @pattern.time('1:00pm')
|
30
|
-
assert_equal 'T4:45:30Z', @pattern.time('4:45:30Z')
|
31
|
-
assert !@pattern.time('12')
|
32
|
-
end
|
33
|
-
|
34
|
-
should 'build a iso8601 timestamp' do
|
35
|
-
assert_equal '2010-2-14', @pattern.iso8601('2010-02-14')
|
36
|
-
assert_equal 'T4:45:30Z', @pattern.iso8601('4:45:30Z')
|
37
|
-
assert_equal '2010-2-14T4:45:30Z', @pattern.iso8601('February 14 2010 4:45:30Z')
|
38
|
-
assert @pattern.iso8601('Hello world').empty?
|
39
|
-
end
|
40
|
-
|
41
|
-
should 'validate a DateTime string' do
|
42
|
-
assert @pattern.valid?('2010-02-14')
|
43
|
-
assert !@pattern.valid?('Hello World!')
|
44
|
-
assert !@pattern.valid?('+441223 123 123')
|
45
|
-
end
|
46
|
-
|
47
|
-
should 'convert a datetime string to a Time object' do
|
48
|
-
valentines_day = @pattern.extract_from('2010-02-14')
|
49
|
-
afternoon = @pattern.extract_from('16:30')
|
50
|
-
assert_equal Time, valentines_day.class
|
51
|
-
assert_equal 2010, valentines_day.year
|
52
|
-
assert_equal 16, afternoon.hour
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__),'..','test_helper')
|
2
|
-
|
3
|
-
class ValueClassPatternTest < Test::Unit::TestCase
|
4
|
-
setup do
|
5
|
-
@pattern = HMachine::Pattern::ValueClass
|
6
|
-
end
|
7
|
-
|
8
|
-
should 'concatenate two html elements to create one datetime value' do
|
9
|
-
html = get_fixture('test-fixture/value-class-date-time/value-dt-test-YYYY-MM-DD--HH-MM.html')
|
10
|
-
doc = Nokogiri.parse(html)
|
11
|
-
doc_dtstart = doc.css('.dtstart').first
|
12
|
-
doc_dtend = doc.css('.dtend').first
|
13
|
-
|
14
|
-
dtstart = @pattern.extract_from(doc_dtstart)
|
15
|
-
dtend = @pattern.extract_from(doc_dtend)
|
16
|
-
assert_equal Time, dtstart.class
|
17
|
-
assert_equal 2009, dtstart.year
|
18
|
-
assert_equal 6, dtstart.mon
|
19
|
-
assert_equal 26, dtstart.day
|
20
|
-
assert_equal 19, dtstart.hour
|
21
|
-
assert_equal 22, dtend.hour
|
22
|
-
end
|
23
|
-
|
24
|
-
should 'concatenate abbr title attribute and the text from a span element to create one datetime value' do
|
25
|
-
html = get_fixture('test-fixture/value-class-date-time/value-dt-test-abbr-YYYY-MM-DD--HH-MM.html')
|
26
|
-
doc = Nokogiri.parse(html)
|
27
|
-
|
28
|
-
dtstart = @pattern.extract_from(doc)
|
29
|
-
assert_equal 2008, dtstart.year
|
30
|
-
assert_equal 2, dtstart.wday
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
data/test/pattern_test.rb
DELETED
@@ -1,132 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
-
|
3
|
-
class PatternTest < Test::Unit::TestCase
|
4
|
-
describe 'Mapper' do
|
5
|
-
should 'map a symbol to a design pattern' do
|
6
|
-
assert HMachine::Pattern::ValueClass, HMachine::Pattern.map(:value_class)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
describe 'URI Design Pattern' do
|
11
|
-
should 'have an extraction method' do
|
12
|
-
assert_respond_to HMachine::Pattern::URL, :extract
|
13
|
-
end
|
14
|
-
|
15
|
-
should 'normalize URLs' do
|
16
|
-
assert_respond_to HMachine::Pattern::URL, :normalize
|
17
|
-
assert_equal 'http://foobar.com/', HMachine::Pattern::URL.normalize('http://foobar.com')
|
18
|
-
end
|
19
|
-
|
20
|
-
should 'extract the href out of an a element' do
|
21
|
-
doc = Nokogiri.parse('<a href="http://foobar.com">Hello</a>')
|
22
|
-
a = doc.css('a').first
|
23
|
-
assert_equal 'http://foobar.com/', HMachine::Pattern::URL.extract_from(a)
|
24
|
-
end
|
25
|
-
|
26
|
-
should 'extract the src out of an img element' do
|
27
|
-
doc = Nokogiri.parse('<img src="http://foobar.com" alt="Foobar" />')
|
28
|
-
img = doc.css('img').first
|
29
|
-
assert_equal 'http://foobar.com/', HMachine::Pattern::URL.extract_from(img)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe 'Type/Value Pattern' do
|
34
|
-
setup do
|
35
|
-
@html = get_fixture('test-fixture/hcard/hcard6.html')
|
36
|
-
@doc = Nokogiri::HTML.parse(@html).css('#uf').first
|
37
|
-
end
|
38
|
-
|
39
|
-
should 'extract the type and value of an element' do
|
40
|
-
html = Nokogiri.parse(%Q{<span class="email">
|
41
|
-
<span class="type">internet</span>
|
42
|
-
<a href="mailto:notthis@example.com">john@example.com</a>
|
43
|
-
</span>})
|
44
|
-
doc = html.css('.email').first
|
45
|
-
type_value = HMachine::Pattern::TypeValue.extract_from(doc)
|
46
|
-
assert type_value.has_key?(:type)
|
47
|
-
assert_equal :internet, type_value[:type]
|
48
|
-
assert_equal 'john@example.com', type_value[:value]
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe 'Abbr Design Pattern' do
|
53
|
-
should 'have an extraction method' do
|
54
|
-
assert_respond_to HMachine::Pattern::Abbr, :extract
|
55
|
-
end
|
56
|
-
|
57
|
-
should 'extract the title out of an abbreviation element' do
|
58
|
-
doc = Nokogiri.parse('<abbr title="Hello machine">Hello Human</abbr>')
|
59
|
-
node = doc.css('abbr').first
|
60
|
-
assert_equal 'Hello machine', HMachine::Pattern::Abbr.extract_from(node)
|
61
|
-
end
|
62
|
-
|
63
|
-
should 'continue as usual if no title is found' do
|
64
|
-
doc = Nokogiri.parse('<abbr>Hello human</abbr>')
|
65
|
-
node = doc.css('abbr').first
|
66
|
-
assert_equal 'Hello human', HMachine::Pattern::Abbr.extract_from(node)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe 'Value Class Pattern' do
|
71
|
-
# http://microformats.org/wiki/value-class-pattern-tests
|
72
|
-
should 'find value class in a document' do
|
73
|
-
doc = Nokogiri.parse(%q{
|
74
|
-
<span class="tel">
|
75
|
-
<span class="type">Home</span>:
|
76
|
-
<span class="value">+44</span> (0) <span class="value">1223 123 123</span>
|
77
|
-
</span>
|
78
|
-
})
|
79
|
-
assert HMachine::Pattern::ValueClass.found_in?(doc)
|
80
|
-
end
|
81
|
-
|
82
|
-
should 'ignore nested value classes' do
|
83
|
-
doc = Nokogiri.parse(%q{
|
84
|
-
<p class="description">
|
85
|
-
<span class="value">
|
86
|
-
<em class="value">Puppies Rule!</em>
|
87
|
-
<strong>But kittens are better!</strong>
|
88
|
-
</span>
|
89
|
-
</p>
|
90
|
-
})
|
91
|
-
assert_equal 1, HMachine::Pattern::ValueClass.find_in(doc).size
|
92
|
-
assert_not_equal 'Puppies Rule!', HMachine::Pattern::ValueClass.extract_from(doc)
|
93
|
-
assert HMachine::Pattern::ValueClass.valid?(HMachine::Pattern::ValueClass.find_in(doc).first)
|
94
|
-
end
|
95
|
-
|
96
|
-
should 'extract the value' do
|
97
|
-
doc = Nokogiri.parse(%q{<p class="description"><span class="value">Value Class Pattern</span></p>})
|
98
|
-
assert_equal 'Value Class Pattern', HMachine::Pattern::ValueClass.extract_from(doc)
|
99
|
-
end
|
100
|
-
|
101
|
-
should 'concatenate values' do
|
102
|
-
doc = Nokogiri.parse(%q{
|
103
|
-
<span class="tel">
|
104
|
-
<span class="type">Home</span>:
|
105
|
-
<span class="value">+44</span> (0) <span class="value">1223 123 123</span>
|
106
|
-
</span>
|
107
|
-
})
|
108
|
-
assert_equal '+441223 123 123', HMachine::Pattern::ValueClass.extract_from(doc)
|
109
|
-
end
|
110
|
-
|
111
|
-
should 'extract the value intelligently from an abbr element' do
|
112
|
-
doc = Nokogiri.parse(%q{<span class="dtstart"><abbr class="value" title="hello">this Tuesday</abbr></span>})
|
113
|
-
assert_not_equal 'this Tuesday', HMachine::Pattern::ValueClass.extract_from(doc)
|
114
|
-
assert_equal 'hello', HMachine::Pattern::ValueClass.extract_from(doc)
|
115
|
-
end
|
116
|
-
|
117
|
-
should 'use the alt attribute for images or areas' do
|
118
|
-
doc = Nokogiri.parse(%q{<div class="photo">Here's me: <img src="photo.jpg" class="value" alt="Whatever" /></div>})
|
119
|
-
assert_equal "Whatever", HMachine::Pattern::ValueClass.extract_from(doc)
|
120
|
-
end
|
121
|
-
|
122
|
-
should 'understand the value-title pattern' do
|
123
|
-
doc = Nokogiri.parse(%q{
|
124
|
-
<span class="dtstart">
|
125
|
-
<span class="value-title" title="hi"> </span>
|
126
|
-
Friday, June 5th at 8pm
|
127
|
-
</span>})
|
128
|
-
assert_equal 'hi', HMachine::Pattern::ValueClass.extract_from(doc)
|
129
|
-
end
|
130
|
-
|
131
|
-
end
|
132
|
-
end
|