hmachine 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/README.md +4 -133
  2. data/hmachine.gemspec +15 -79
  3. metadata +22 -89
  4. data/.gitignore +0 -3
  5. data/Gemfile +0 -11
  6. data/Gemfile.lock +0 -51
  7. data/Rakefile +0 -53
  8. data/bin/hmachine +0 -99
  9. data/test/fixtures/hcard/commercenet.html +0 -21
  10. data/test/fixtures/hcard/geo.html +0 -28
  11. data/test/fixtures/huffduffer.html +0 -466
  12. data/test/fixtures/likeorhate.html +0 -48
  13. data/test/fixtures/rel_license.html +0 -4
  14. data/test/fixtures/test-fixture/hcard/hcard1.html +0 -147
  15. data/test/fixtures/test-fixture/hcard/hcard11.html +0 -123
  16. data/test/fixtures/test-fixture/hcard/hcard12.html +0 -178
  17. data/test/fixtures/test-fixture/hcard/hcard17.html +0 -165
  18. data/test/fixtures/test-fixture/hcard/hcard2.html +0 -264
  19. data/test/fixtures/test-fixture/hcard/hcard3.html +0 -144
  20. data/test/fixtures/test-fixture/hcard/hcard4.html +0 -117
  21. data/test/fixtures/test-fixture/hcard/hcard5.html +0 -119
  22. data/test/fixtures/test-fixture/hcard/hcard6.html +0 -188
  23. data/test/fixtures/test-fixture/hcard/hcard7.html +0 -188
  24. data/test/fixtures/test-fixture/hcard/hcard8.html +0 -130
  25. data/test/fixtures/test-fixture/hcard/hcard9.html +0 -111
  26. data/test/fixtures/test-fixture/hcard/hcard99.html +0 -215
  27. data/test/fixtures/test-fixture/value-class-date-time/value-dt-test-YYYY-MM-DD--HH-MM.html +0 -9
  28. data/test/fixtures/test-fixture/value-class-date-time/value-dt-test-abbr-YYYY-MM-DD--HH-MM.html +0 -4
  29. data/test/fixtures/xfn.html +0 -198
  30. data/test/fixtures/xmdp.html +0 -32
  31. data/test/fixtures/xoxo.html +0 -51
  32. data/test/hmachine_test.rb +0 -133
  33. data/test/microformat/adr_test.rb +0 -47
  34. data/test/microformat/geo_test.rb +0 -66
  35. data/test/microformat/hcard_test.rb +0 -510
  36. data/test/microformat/rellicense_test.rb +0 -36
  37. data/test/microformat/reltag_test.rb +0 -61
  38. data/test/microformat/votelinks_test.rb +0 -44
  39. data/test/microformat/xfn_test.rb +0 -28
  40. data/test/microformat/xmdp_test.rb +0 -16
  41. data/test/microformat/xoxo_test.rb +0 -51
  42. data/test/microformat_test.rb +0 -20
  43. data/test/pattern/date_time_test.rb +0 -55
  44. data/test/pattern/value_class_test.rb +0 -33
  45. data/test/pattern_test.rb +0 -132
  46. data/test/posh/anchor_test.rb +0 -41
  47. data/test/posh/base_test.rb +0 -150
  48. data/test/posh/definition_list_test.rb +0 -38
  49. 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
@@ -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