microformats2 2.0.0.pre5 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZDA0ZWM4YmYxYWI1NzNkMmZkZDY3ZjU1YmM4YzU5ZDFjNGUwZTgyZg==
5
+ data.tar.gz: !binary |-
6
+ ZDAxYjVmMDJjNzNjOGYyNGY5NzcyOGJlY2U0OGQwN2JkODk2OTAxNw==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ MjQ3YmMzZjEwNzk3OWEzOTJkMWMzMjkyMTkyNzZjOTM2Y2Q5OTRhYTYwNDgw
10
+ YTM2ZjExMDYwMTVkODY2M2Q2Yzc4ZGEyYWFhNGFiMzA4Yjc0YmYzOGYyZWEw
11
+ ZGNmNGJkMzI0NzY2MmVmZGY4ZGJkYTgzMDE1MWIyZDc4OTkyYzk=
12
+ data.tar.gz: !binary |-
13
+ MzQ3NjZkYmQxZTMzMzkyZTk0MjI0YzRjNzBhM2NjYzZkNzJmNzY5NTA1YTgw
14
+ ZjhlMjEwMjhlMDA4YmE4NzZlNWNhZWQ2Yzg3ODI2OTFmMmYwZGFjYzc2ZDcz
15
+ ZWExYmFjYjMwZDlmOTU5MzE2ZTk2OGNhZWIxMzhjNzNkYmQ5MjI=
data/.travis.yml CHANGED
@@ -1,4 +1,10 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
- script: bundle exec rspec spec
4
+ script: bundle exec rspec
5
+ notifications:
6
+ campfire:
7
+ rooms:
8
+ secure: UlQ85ETcMVxrK6N9E1zcNPYZ+7as8TLkPS/ArOxytairh8W2S4BFyuCoVRgvLQ88RhHhGgTbkF14DiFtcCiXu9hmfZFZY54q92Sk/Lf98mz1Vzis6X+PedBUIVBPWCEPpMmLxAF+Q1HkEcVYQMKwNoAaQLrW+7SOzh57bOMxHeE=
9
+ on_success: change
10
+ on_failure: always
data/README.md CHANGED
@@ -14,17 +14,17 @@ Implemented:
14
14
  * [parsing a p- property](http://microformats.org/wiki/microformats2-parsing#parsing_a_p-_property)
15
15
  * [parsing a u- property](http://microformats.org/wiki/microformats2-parsing#parsing_a_u-_property)
16
16
  * [parsing a dt- property](http://microformats.org/wiki/microformats2-parsing#parsing_a_dt-_property)
17
- * [parsing a e- property](http://microformats.org/wiki/microformats2-parsing#parsing_a_e-_property)
17
+ * [parsing a e- property](http://microformats.org/wiki/microformats2-parsing#parsing_an_e-_property)
18
18
  * [parsing implied properties](http://microformats.org/wiki/microformats-2-parsing#parsing_for_implied_properties)
19
19
  * nested properties
20
20
  * nested microformat with associated property
21
21
  * dynamic creation of properties
22
+ * [rel](http://microformats.org/wiki/rel)
23
+ * [normalize u-* property values](http://microformats.org/wiki/microformats2-parsing-faq#normalizing_u-.2A_property_values)
22
24
 
23
25
  Not Implemented:
24
26
 
25
- * [normalize u-* property values](http://microformats.org/wiki/microformats2-parsing-faq#normalizing_u-.2A_property_values)
26
27
  * nested microformat without associated property
27
- * [rel](http://microformats.org/wiki/rel)
28
28
  * [value-class-pattern](http://microformats.org/wiki/value-class-pattern)
29
29
  * [include-pattern](http://microformats.org/wiki/include-pattern)
30
30
  * recognition of [vendor extensions](http://microformats.org/wiki/microformats2#VENDOR_EXTENSIONS)
@@ -33,14 +33,14 @@ Not Implemented:
33
33
 
34
34
  ## Current Version
35
35
 
36
- 2.0.0.pre5
36
+ 2.0.0
37
37
 
38
38
 
39
39
  ## Requirements
40
40
 
41
- * "nokogiri", "~> 1.5.6"
42
- * "json", "~> 1.7.6"
43
- * "activesupport", "~> 3.2.12"
41
+ * "nokogiri"
42
+ * "json"
43
+ * "activesupport"
44
44
 
45
45
 
46
46
  ## Installation
@@ -64,11 +64,20 @@ Or install it yourself as:
64
64
  require "microformats2"
65
65
 
66
66
  source = '<div class="h-card"><p class="p-name">Jessica Lynn Suttles</p></div>'
67
- collection = Microformats.parse(source)
67
+ collection = Microformats2.parse(source)
68
68
  # using singular accessors
69
69
  collection.card.name.to_s #=> "Jessica Lynn Suttles"
70
70
  # using plural accessors
71
71
  collection.cards.first.names.first.to_s #=> "Jessica Lynn Suttles"
72
+
73
+ source = '<article class="h-entry">
74
+ <h1 class="p-name">Microformats 2</h1>
75
+ <div class="h-card p-author"><p class="p-name">Jessica Lynn Suttles</p></div>
76
+ </article>'
77
+ collection = Microformats2.parse(source)
78
+ collection.entry.name.to_s #=> "Microformats 2"
79
+ # accessing nested microformats
80
+ collection.entry.author.format.name.to_s #=> "Jessica Lynn Suttles"
72
81
  ```
73
82
 
74
83
  * `source` can be a URL, filepath, or HTML
@@ -2,18 +2,30 @@ module Microformats2
2
2
  class Collection
3
3
  attr_reader :all
4
4
 
5
- def initialize(element)
5
+ def initialize(element, url = nil)
6
6
  @element = element
7
+
8
+ @base = nil
9
+ if url != nil
10
+ @base = url
11
+ end
12
+ if @element.search("base").size > 0
13
+ @base = @element.search("base")[0].attribute("href")
14
+ end
15
+
7
16
  @format_names = []
17
+ @rels = {}
18
+ @alternates = []
8
19
  end
9
20
 
10
21
  def parse
11
22
  all
23
+ parse_rels
12
24
  self
13
25
  end
14
26
 
15
27
  def all
16
- @all ||= FormatParser.parse(@element).each do |format|
28
+ @all ||= FormatParser.parse(@element, @base).each do |format|
17
29
  save_format_name(format.method_name)
18
30
  define_method(format.method_name)
19
31
  set_value(format.method_name, format)
@@ -29,10 +41,12 @@ module Microformats2
29
41
  end
30
42
 
31
43
  def to_hash
32
- hash = { items: [] }
44
+ hash = { items: [], rels: @rels }
33
45
  all.each do |format|
34
46
  hash[:items] << format.to_hash
35
47
  end
48
+ hash[:alternates] = @alternates unless @alternates.nil? || @alternates.empty?
49
+
36
50
  hash
37
51
  end
38
52
 
@@ -67,5 +81,43 @@ module Microformats2
67
81
  send("#{mn.pluralize}=", [value])
68
82
  end
69
83
  end
84
+
85
+ def parse_rels
86
+ @element.search("*[@rel]").each do |rel|
87
+ rel_values = rel.attribute("rel").text.split(" ")
88
+
89
+ if rel_values.member?("alternate")
90
+ alternate_inst = {}
91
+ alternate_inst["url"] = absolutize(rel.attribute("href").text)
92
+ alternate_inst["rel"] = (rel_values - ["alternate"]).join(" ")
93
+ unless rel.attribute("media").nil?
94
+ alternate_inst["media"] = rel.attribute("media").text
95
+ end
96
+ unless rel.attribute("hreflang").nil?
97
+ alternate_inst["hreflang"] = rel.attribute("hreflang").text
98
+ end
99
+ unless rel.attribute("type").nil?
100
+ alternate_inst["type"] = rel.attribute("type").text
101
+ end
102
+ @alternates << alternate_inst
103
+ else
104
+ rel_values.each do |rel_value|
105
+ @rels[rel_value] = [] unless @rels.has_key?(rel_value)
106
+ @rels[rel_value] << absolutize(rel.attribute("href").text)
107
+ end
108
+ end
109
+ end
110
+ end
111
+
112
+ def absolutize(href)
113
+ uri = URI.parse(href)
114
+
115
+ if @base && !uri.absolute?
116
+ uri = URI.join(@base, href)
117
+ end
118
+
119
+ uri.normalize!
120
+ uri.to_s
121
+ end
70
122
  end
71
123
  end
@@ -4,8 +4,9 @@ module Microformats2
4
4
 
5
5
  attr_reader :method_name
6
6
 
7
- def initialize(element)
7
+ def initialize(element, base)
8
8
  @element = element
9
+ @base = base
9
10
  @method_name = to_method_name(format_types.first)
10
11
  @property_names = []
11
12
  end
@@ -27,20 +28,20 @@ module Microformats2
27
28
  end
28
29
 
29
30
  def parse_properties
30
- PropertyParser.parse(@element.children).each do |property|
31
+ PropertyParser.parse(@element.children, @base).each do |property|
31
32
  assign_property(property)
32
33
  end
33
34
  end
34
35
 
35
36
  def add_property(property_class, value)
36
- property = Property.new(nil, property_class, value)
37
+ property = Property.new(nil, property_class, value, @base)
37
38
  assign_property(property)
38
39
  end
39
40
 
40
41
  def parse_implied_properties
41
42
  ip = []
42
43
  ip << ImpliedProperty::Name.new(@element).parse unless property_present?(:name)
43
- ip << ImpliedProperty::Url.new(@element).parse unless property_present?(:url)
44
+ ip << ImpliedProperty::Url.new(@element, @base).parse unless property_present?(:url)
44
45
  ip << ImpliedProperty::Photo.new(@element).parse unless property_present?(:photo)
45
46
  ip.compact.each do |property|
46
47
  save_property_name(property.method_name)
@@ -1,7 +1,8 @@
1
1
  module Microformats2
2
2
  class FormatParser
3
3
  class << self
4
- def parse(element)
4
+ def parse(element, base=nil)
5
+ @@base = base
5
6
  parse_node(element).flatten.compact
6
7
  end
7
8
 
@@ -31,7 +32,7 @@ module Microformats2
31
32
  const_name = constant_name(html_class)
32
33
  klass = find_or_create_ruby_class(const_name)
33
34
 
34
- klass.new(element).parse
35
+ klass.new(element, @@base).parse
35
36
  end
36
37
 
37
38
  def format_classes(element)
@@ -2,8 +2,9 @@ module Microformats2
2
2
  module ImpliedProperty
3
3
  class Foundation
4
4
 
5
- def initialize(element)
5
+ def initialize(element, base=nil)
6
6
  @element = element
7
+ @base = base
7
8
  end
8
9
 
9
10
  def parse
@@ -6,6 +6,22 @@ module Microformats2
6
6
  "url"
7
7
  end
8
8
 
9
+ def to_s
10
+ @to_s = absolutize(super.to_s) if super.to_s != ""
11
+ end
12
+
13
+ # TODO: make dry, repeated in Collection
14
+ def absolutize(href)
15
+ uri = URI.parse(href)
16
+
17
+ if @base && !uri.absolute?
18
+ uri = URI.join(@base, href)
19
+ end
20
+
21
+ uri.normalize!
22
+ uri.to_s
23
+ end
24
+
9
25
  protected
10
26
 
11
27
  def name_map
@@ -8,13 +8,13 @@ module Microformats2
8
8
  "e" => Embedded }
9
9
 
10
10
  class << self
11
- def new(element, property_class, value=nil)
11
+ def new(element, property_class, value=nil, base=nil)
12
12
  # p-class-name -> p
13
13
  prefix = property_class.split("-").first
14
14
  # find ruby class for kind of property
15
15
  klass = PREFIX_CLASS_MAP[prefix]
16
16
  raise InvalidPropertyPrefix unless klass
17
- klass.new(element, property_class, value)
17
+ klass.new(element, property_class, value, base)
18
18
  end
19
19
  end
20
20
  end
@@ -3,10 +3,11 @@ module Microformats2
3
3
  class Foundation
4
4
  attr_reader :method_name
5
5
 
6
- def initialize(element, html_class, string_value=nil)
6
+ def initialize(element, html_class, string_value=nil, base=nil)
7
7
  @element = element
8
8
  @method_name = to_method_name(html_class)
9
9
  @string_value = string_value
10
+ @base = base
10
11
  end
11
12
 
12
13
  def parse
@@ -2,6 +2,22 @@ module Microformats2
2
2
  module Property
3
3
  class Url < Foundation
4
4
 
5
+ def to_s
6
+ @to_s = absolutize(super.to_s)
7
+ end
8
+
9
+ # TODO: make dry, repeated in Collection
10
+ def absolutize(href)
11
+ uri = URI.parse(href)
12
+
13
+ if @base && !uri.absolute?
14
+ uri = URI.join(@base, href)
15
+ end
16
+
17
+ uri.normalize!
18
+ uri.to_s
19
+ end
20
+
5
21
  protected
6
22
 
7
23
  def attr_map
@@ -1,7 +1,8 @@
1
1
  module Microformats2
2
2
  class PropertyParser
3
3
  class << self
4
- def parse(element)
4
+ def parse(element, base)
5
+ @@base = base
5
6
  parse_node(element).flatten.compact
6
7
  end
7
8
 
@@ -26,8 +27,8 @@ module Microformats2
26
27
 
27
28
  def parse_property(element)
28
29
  property_classes(element).map do |property_class|
29
- property = Property.new(element, property_class).parse
30
- properties = format_classes(element).empty? ? PropertyParser.parse(element.children) : []
30
+ property = Property.new(element, property_class, nil, @@base).parse
31
+ properties = format_classes(element).empty? ? PropertyParser.parse(element.children, @@base) : []
31
32
 
32
33
  [property].concat properties
33
34
  end
@@ -1,3 +1,3 @@
1
1
  module Microformats2
2
- VERSION = "2.0.0.pre5"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -17,14 +17,14 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
19
 
20
- gem.add_runtime_dependency "nokogiri", "~> 1.5.6"
21
- gem.add_runtime_dependency "json", "~> 1.7.6"
22
- gem.add_runtime_dependency "activesupport", "~> 3.2.13"
20
+ gem.add_runtime_dependency "nokogiri"
21
+ gem.add_runtime_dependency "json"
22
+ gem.add_runtime_dependency "activesupport"
23
23
 
24
- gem.add_development_dependency "rake", "~> 10.0.0"
25
- gem.add_development_dependency "rspec", "~> 2.11.0"
26
- gem.add_development_dependency "guard-rspec", "~> 2.1.0"
27
- gem.add_development_dependency "rb-fsevent", "~> 0.9.1"
28
- gem.add_development_dependency "simplecov", "~> 0.7.1"
29
- gem.add_development_dependency "webmock", "~> 1.12.3"
24
+ gem.add_development_dependency "rake"
25
+ gem.add_development_dependency "rspec"
26
+ gem.add_development_dependency "guard-rspec"
27
+ gem.add_development_dependency "rb-fsevent"
28
+ gem.add_development_dependency "simplecov"
29
+ gem.add_development_dependency "webmock"
30
30
  end
@@ -35,13 +35,13 @@ describe Microformats2::Collection do
35
35
  @collection.card.name.should be_kind_of Microformats2::Property::Text
36
36
  end
37
37
  end
38
- describe "'.h-card .p-url'" do
38
+ describe "'.h-card .u-url'" do
39
39
  it "assigns all urls to HCard#urls" do
40
- urls = ["http://flickr.com/jlsuttles", "http://twitter.com/jlsuttles"]
40
+ urls = ["http://example.org/", "http://flickr.com/", "http://twitter.com/jlsuttles"]
41
41
  @collection.card.urls.map(&:to_s).should == urls
42
42
  end
43
43
  it "assigns then first url to HCard#url" do
44
- @collection.card.url.to_s.should == "http://flickr.com/jlsuttles"
44
+ @collection.card.url.to_s.should == "http://example.org/"
45
45
  end
46
46
  it "HCard#url is a Property::Url" do
47
47
  @collection.card.url.should be_kind_of Microformats2::Property::Url
@@ -176,11 +176,47 @@ describe Microformats2::Collection do
176
176
  end
177
177
  end
178
178
  end
179
+
180
+ describe "rels.html" do
181
+ before do
182
+ html = "spec/support/lib/microformats2/rels.html"
183
+ @collection = Microformats2.parse(html)
184
+ end
185
+ describe "#to_json" do
186
+ it "should match rels.js" do
187
+ # this also tests the case of having rel="alternates"
188
+ json = "spec/support/lib/microformats2/rels.js"
189
+ json = open(json).read
190
+ JSON.parse(@collection.to_json).should == JSON.parse(json)
191
+ end
192
+ end
193
+ end
194
+
195
+ describe "rels-with-unnormalized-urls.html" do
196
+ before do
197
+ html = "spec/support/lib/microformats2/rels-with-unnormalized-urls.html"
198
+ @collection = Microformats2.parse(html)
199
+ end
200
+
201
+ it "should normalize the url" do
202
+ @collection.to_hash[:rels]["me"].should eq([ "http://jessicard.com/" ])
203
+ end
204
+ end
205
+
206
+ describe "rels-that-drop-the-base.html" do
207
+ before do
208
+ html = "spec/support/lib/microformats2/rels-that-drop-the-base.html"
209
+ @collection = Microformats2.parse(html)
210
+ end
211
+
212
+ it "keeps the relative path" do
213
+ @collection.to_hash[:rels]["stylesheet"].should eq([ "/path/to/stylesheet.css" ])
214
+ end
215
+ end
179
216
  end
180
217
 
181
218
 
182
219
  # these cases were scraped from the internet using `rake specs:update`
183
- #
184
220
 
185
221
  describe "spec/support/cases" do
186
222
  cases_dir = "spec/support/cases/*"
@@ -15,6 +15,33 @@ describe Microformats2::ImpliedProperty::Url do
15
15
  end
16
16
  end
17
17
  end
18
+
19
+ describe "url-relative.html" do
20
+ html = "spec/support/lib/microformats2/implied_property/url-relative.html"
21
+ collection = Microformats2.parse(html)
22
+ it "should have 2 microformats" do
23
+ collection.all.length.should == 2
24
+ end
25
+ collection.all.each_with_index do |format, index|
26
+ it "implies url to be 'http://example.org/' in case #{index+1}" do
27
+ format.url.to_s.should == "http://example.org/"
28
+ end
29
+ end
30
+ end
31
+
32
+ describe "url-unnormalized.html" do
33
+ html = "spec/support/lib/microformats2/implied_property/url-unnormalized.html"
34
+ collection = Microformats2.parse(html)
35
+ it "should have 2 microformats" do
36
+ collection.all.length.should == 2
37
+ end
38
+ collection.all.each_with_index do |format, index|
39
+ it "implies url to be 'http://github.com/' in case #{index+1}" do
40
+ format.url.to_s.should == "http://github.com/"
41
+ end
42
+ end
43
+ end
44
+
18
45
  describe "url-fail.html" do
19
46
  html = "spec/support/lib/microformats2/implied_property/url-fail.html"
20
47
  collection = Microformats2.parse(html)
@@ -22,8 +49,8 @@ describe Microformats2::ImpliedProperty::Url do
22
49
  collection.all.length.should == 2
23
50
  end
24
51
  collection.all.each_with_index do |format, index|
25
- it "implies url to be '' in case #{index+1}" do
26
- expect {format.url.to_s.should == ""}.to raise_error(NoMethodError)
52
+ it "does not imply url in case #{index+1}" do
53
+ expect {format.url}.to raise_error(NoMethodError)
27
54
  end
28
55
  end
29
56
  end
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <body>
4
+ <base href="http://example.org/">
5
+
6
+ <a class="h-card" href="/" />
7
+
8
+ <div class="h-card">
9
+ <a href="/" />
10
+ </div>
11
+
12
+ </body>
13
+ </html>
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <body>
4
+
5
+ <a class="h-card" href="http://github.com" />
6
+
7
+ <div class="h-card">
8
+ <a href="http://github.com" />
9
+ </div>
10
+
11
+ </body>
12
+ </html>
@@ -11,5 +11,6 @@
11
11
  }],
12
12
  "name": ["Jessica Lynn Suttles"]
13
13
  }
14
- }]
14
+ }],
15
+ "rels": {}
15
16
  }
@@ -4,6 +4,7 @@
4
4
  "name": ["jlsuttles"],
5
5
  "nickname": ["jlsuttles"]
6
6
  }
7
- }]
7
+ }],
8
+ "rels": {}
8
9
  }
9
10
 
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Rels without Base Test</title>
5
+ <link href="/path/to/stylesheet.css" media="all" rel="stylesheet" type="text/css" />
6
+ </head>
7
+ <body>
8
+ <li><a rel="met friend" href="http://adactio.com/">Jeremy Keith</a></li>
9
+ <li><a rel="met friend" href="http://tantek.com/">Tantek Çelik</a></li>
10
+ </body>
11
+ </html>
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Rels Test</title>
5
+ <base href="http://example.org/">
6
+ <link rel="updates alternate" href="http://tantek.com/updates.atom" type="application/atom+xml" />
7
+ </head>
8
+ <body>
9
+ <li><a rel="me" href="http://jessicard.com">Jessica Dillon</a></li>
10
+ </body>
11
+ </html>
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Rels Test</title>
5
+ <base href="http://example.org/">
6
+ <link rel="updates alternate" href="http://tantek.com/updates.atom" type="application/atom+xml" />
7
+ </head>
8
+ <body>
9
+ <li><a rel="met friend" href="http://adactio.com/">Jeremy Keith</a></li>
10
+ <li><a rel="met friend" href="http://tantek.com/">Tantek Çelik</a></li>
11
+ </body>
12
+ </html>
@@ -0,0 +1,13 @@
1
+ {
2
+ "items": [],
3
+ "rels": {
4
+ "friend": ["http://adactio.com/", "http://tantek.com/"],
5
+ "met": ["http://adactio.com/", "http://tantek.com/"]
6
+ },
7
+ "alternates": [
8
+ {"url": "http://tantek.com/updates.atom",
9
+ "type": "application/atom+xml",
10
+ "rel": "updates"
11
+ }
12
+ ]
13
+ }
@@ -1,10 +1,14 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
+ <base href="http://example.org/">
3
4
  <body>
4
5
  <div class="h-card">
5
- <a href="http://flickr.com/jlsuttles" class="u-url p-name">
6
+ <a href="/" class="u-url p-name">
6
7
  Jessica Lynn Suttles
7
8
  </a>
9
+ <a href="http://flickr.com" class="u-url">
10
+ @jlsuttles
11
+ </a>
8
12
  <a href="http://twitter.com/jlsuttles" class="u-url">
9
13
  @jlsuttles
10
14
  </a>
@@ -1,10 +1,11 @@
1
1
  { "items": [{
2
2
  "type": ["h-card"],
3
3
  "properties": {
4
- "url": ["http://flickr.com/jlsuttles", "http://twitter.com/jlsuttles"],
4
+ "url": ["http://example.org/", "http://flickr.com/", "http://twitter.com/jlsuttles"],
5
5
  "name": ["Jessica Lynn Suttles"],
6
6
  "bday": ["1990-10-15"],
7
7
  "content": ["<p>Vegan. Cat lover. Coder.</p>"]
8
8
  }
9
- }]
9
+ }],
10
+ "rels": {}
10
11
  }
metadata CHANGED
@@ -1,160 +1,141 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: microformats2
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre5
5
- prerelease: 6
4
+ version: 2.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jessica Lynn Suttles
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-07-02 00:00:00.000000000 Z
11
+ date: 2014-02-25 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: nokogiri
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - ! '>='
20
18
  - !ruby/object:Gem::Version
21
- version: 1.5.6
19
+ version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - ! '>='
28
25
  - !ruby/object:Gem::Version
29
- version: 1.5.6
26
+ version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: json
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - ! '>='
36
32
  - !ruby/object:Gem::Version
37
- version: 1.7.6
33
+ version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - ! '>='
44
39
  - !ruby/object:Gem::Version
45
- version: 1.7.6
40
+ version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: activesupport
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ~>
45
+ - - ! '>='
52
46
  - !ruby/object:Gem::Version
53
- version: 3.2.13
47
+ version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ~>
52
+ - - ! '>='
60
53
  - !ruby/object:Gem::Version
61
- version: 3.2.13
54
+ version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rake
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ~>
59
+ - - ! '>='
68
60
  - !ruby/object:Gem::Version
69
- version: 10.0.0
61
+ version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ~>
66
+ - - ! '>='
76
67
  - !ruby/object:Gem::Version
77
- version: 10.0.0
68
+ version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rspec
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ~>
73
+ - - ! '>='
84
74
  - !ruby/object:Gem::Version
85
- version: 2.11.0
75
+ version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ~>
80
+ - - ! '>='
92
81
  - !ruby/object:Gem::Version
93
- version: 2.11.0
82
+ version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: guard-rspec
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ~>
87
+ - - ! '>='
100
88
  - !ruby/object:Gem::Version
101
- version: 2.1.0
89
+ version: '0'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ~>
94
+ - - ! '>='
108
95
  - !ruby/object:Gem::Version
109
- version: 2.1.0
96
+ version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: rb-fsevent
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ~>
101
+ - - ! '>='
116
102
  - !ruby/object:Gem::Version
117
- version: 0.9.1
103
+ version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ~>
108
+ - - ! '>='
124
109
  - !ruby/object:Gem::Version
125
- version: 0.9.1
110
+ version: '0'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: simplecov
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ~>
115
+ - - ! '>='
132
116
  - !ruby/object:Gem::Version
133
- version: 0.7.1
117
+ version: '0'
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ~>
122
+ - - ! '>='
140
123
  - !ruby/object:Gem::Version
141
- version: 0.7.1
124
+ version: '0'
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: webmock
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - ~>
129
+ - - ! '>='
148
130
  - !ruby/object:Gem::Version
149
- version: 1.12.3
131
+ version: '0'
150
132
  type: :development
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - ~>
136
+ - - ! '>='
156
137
  - !ruby/object:Gem::Version
157
- version: 1.12.3
138
+ version: '0'
158
139
  description: parses HTML for microformats and return a collection of dynamically defined
159
140
  Ruby objects
160
141
  email:
@@ -354,36 +335,41 @@ files:
354
335
  - spec/support/lib/microformats2/implied_property/photo-pass.html
355
336
  - spec/support/lib/microformats2/implied_property/url-fail.html
356
337
  - spec/support/lib/microformats2/implied_property/url-pass.html
338
+ - spec/support/lib/microformats2/implied_property/url-relative.html
339
+ - spec/support/lib/microformats2/implied_property/url-unnormalized.html
357
340
  - spec/support/lib/microformats2/nested-format-with-property.html
358
341
  - spec/support/lib/microformats2/nested-format-with-property.js
359
342
  - spec/support/lib/microformats2/nested-format-without-property.html
360
343
  - spec/support/lib/microformats2/nested-property.html
361
344
  - spec/support/lib/microformats2/nested-property.js
345
+ - spec/support/lib/microformats2/rels-that-drop-the-base.html
346
+ - spec/support/lib/microformats2/rels-with-unnormalized-urls.html
347
+ - spec/support/lib/microformats2/rels.html
348
+ - spec/support/lib/microformats2/rels.js
362
349
  - spec/support/lib/microformats2/simple.html
363
350
  - spec/support/lib/microformats2/simple.js
364
351
  homepage: https://github.com/G5/microformats2
365
352
  licenses: []
353
+ metadata: {}
366
354
  post_install_message:
367
355
  rdoc_options: []
368
356
  require_paths:
369
357
  - lib
370
358
  required_ruby_version: !ruby/object:Gem::Requirement
371
- none: false
372
359
  requirements:
373
360
  - - ! '>='
374
361
  - !ruby/object:Gem::Version
375
362
  version: '0'
376
363
  required_rubygems_version: !ruby/object:Gem::Requirement
377
- none: false
378
364
  requirements:
379
- - - ! '>'
365
+ - - ! '>='
380
366
  - !ruby/object:Gem::Version
381
- version: 1.3.1
367
+ version: '0'
382
368
  requirements: []
383
369
  rubyforge_project:
384
- rubygems_version: 1.8.24
370
+ rubygems_version: 2.0.6
385
371
  signing_key:
386
- specification_version: 3
372
+ specification_version: 4
387
373
  summary: microformats2 parser
388
374
  test_files:
389
375
  - spec/lib/microformats2/collection_spec.rb
@@ -551,11 +537,16 @@ test_files:
551
537
  - spec/support/lib/microformats2/implied_property/photo-pass.html
552
538
  - spec/support/lib/microformats2/implied_property/url-fail.html
553
539
  - spec/support/lib/microformats2/implied_property/url-pass.html
540
+ - spec/support/lib/microformats2/implied_property/url-relative.html
541
+ - spec/support/lib/microformats2/implied_property/url-unnormalized.html
554
542
  - spec/support/lib/microformats2/nested-format-with-property.html
555
543
  - spec/support/lib/microformats2/nested-format-with-property.js
556
544
  - spec/support/lib/microformats2/nested-format-without-property.html
557
545
  - spec/support/lib/microformats2/nested-property.html
558
546
  - spec/support/lib/microformats2/nested-property.js
547
+ - spec/support/lib/microformats2/rels-that-drop-the-base.html
548
+ - spec/support/lib/microformats2/rels-with-unnormalized-urls.html
549
+ - spec/support/lib/microformats2/rels.html
550
+ - spec/support/lib/microformats2/rels.js
559
551
  - spec/support/lib/microformats2/simple.html
560
552
  - spec/support/lib/microformats2/simple.js
561
- has_rdoc: