mida 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +12 -0
- data/Rakefile +2 -2
- data/lib/mida/item.rb +4 -5
- data/lib/mida/property.rb +2 -4
- data/spec/item_spec.rb +76 -0
- data/spec/property_spec.rb +13 -0
- metadata +4 -2
data/CHANGELOG.rdoc
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
== 0.1.3 (18th April 2011)
|
2
|
+
* Ensure itemprops are parsed properly if containing non-microdata elements
|
3
|
+
* Support itemprops nested within other itemprops
|
4
|
+
|
5
|
+
== 0.1.2 (14th April 2011)
|
6
|
+
* Add version for rspec dependency
|
7
|
+
|
8
|
+
== 0.1.1 (12th April 2011)
|
9
|
+
* Improve gemspec description
|
10
|
+
|
11
|
+
== 0.1.0 (12th April 2011)
|
12
|
+
* Initial Release
|
data/Rakefile
CHANGED
@@ -6,14 +6,14 @@ spec = Gem::Specification.new do |s|
|
|
6
6
|
s.name = "mida"
|
7
7
|
s.summary = "A Microdata parser/extractor library"
|
8
8
|
s.description = "A Microdata parser and extractor library, based on the latest published version of the Microdata Specification, dated 5th April 2011."
|
9
|
-
s.version = "0.1.
|
9
|
+
s.version = "0.1.3"
|
10
10
|
s.author = "Lawrence Woodman"
|
11
11
|
s.email = "lwoodman@vlifesystems.com"
|
12
12
|
s.homepage = %q{http://github.com/LawrenceWoodman/mida}
|
13
13
|
s.platform = Gem::Platform::RUBY
|
14
14
|
s.required_ruby_version = '>=1.9'
|
15
15
|
s.files = Dir['lib/**/*.rb'] + Dir['spec/**/*.rb'] + Dir['*.rdoc'] + Dir['Rakefile']
|
16
|
-
s.extra_rdoc_files = ['README.rdoc', 'LICENSE.rdoc']
|
16
|
+
s.extra_rdoc_files = ['README.rdoc', 'LICENSE.rdoc', 'CHANGELOG.rdoc']
|
17
17
|
s.rdoc_options << '--main' << 'README.rdoc'
|
18
18
|
s.add_dependency('nokogiri')
|
19
19
|
s.add_development_dependency('rspec', '>= 2.0' )
|
data/lib/mida/item.rb
CHANGED
@@ -81,12 +81,11 @@ module Mida
|
|
81
81
|
|
82
82
|
def traverse_elements(elements)
|
83
83
|
elements.each do |element|
|
84
|
+
itemscope = element.attribute('itemscope')
|
85
|
+
itemprop = element.attribute('itemprop')
|
84
86
|
internal_elements = extract_elements(element)
|
85
|
-
if
|
86
|
-
|
87
|
-
else
|
88
|
-
traverse_elements(internal_elements)
|
89
|
-
end
|
87
|
+
add_itemprop(element) if itemscope || itemprop
|
88
|
+
traverse_elements(internal_elements) if internal_elements && !itemscope
|
90
89
|
end
|
91
90
|
end
|
92
91
|
|
data/lib/mida/property.rb
CHANGED
@@ -11,11 +11,9 @@ module Mida
|
|
11
11
|
# [element] The itemprop element to be parsed
|
12
12
|
# [page_url] The url of the page, including the filename, used to form absolute urls
|
13
13
|
def self.parse(element, page_url=nil)
|
14
|
-
|
15
|
-
|
16
|
-
hash[name] = extract_property(element, page_url)
|
14
|
+
extract_property_names(element).each_with_object({}) do |name, memo|
|
15
|
+
memo[name] = extract_property(element, page_url)
|
17
16
|
end
|
18
|
-
hash
|
19
17
|
end
|
20
18
|
|
21
19
|
NON_TEXTCONTENT_ELEMENTS = {
|
data/spec/item_spec.rb
CHANGED
@@ -136,6 +136,82 @@ describe Mida::Item, 'when initialized with an itemscope containing itemprops su
|
|
136
136
|
|
137
137
|
end
|
138
138
|
|
139
|
+
describe Mida::Item, "when initialized with an itemscope containing itemprops
|
140
|
+
who's inner text is surrounded by non-microdata elements" do
|
141
|
+
before do
|
142
|
+
html = '<div itemscope><span itemprop="reviewer">Lorry <em>Woodman</em></span></div>'
|
143
|
+
doc = Nokogiri(html)
|
144
|
+
itemscope = doc.search('./*').first
|
145
|
+
@item = Mida::Item.new(itemscope)
|
146
|
+
end
|
147
|
+
|
148
|
+
it '#type should return the correct type' do
|
149
|
+
@item.type.should == nil
|
150
|
+
end
|
151
|
+
|
152
|
+
it '#id should return the correct id' do
|
153
|
+
@item.id.should == nil
|
154
|
+
end
|
155
|
+
|
156
|
+
it '#properties should return the correct name/value pairs' do
|
157
|
+
@item.properties.should == {
|
158
|
+
'reviewer' => ['Lorry Woodman']
|
159
|
+
}
|
160
|
+
end
|
161
|
+
|
162
|
+
it '#to_h should return the correct type and properties' do
|
163
|
+
@item.to_h.should == {
|
164
|
+
type: nil,
|
165
|
+
id: nil,
|
166
|
+
properties: {
|
167
|
+
'reviewer' => ['Lorry Woodman']
|
168
|
+
}
|
169
|
+
}
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
|
174
|
+
describe Mida::Item, "when initialized with an itemscope containing an itemprop
|
175
|
+
nested within another itemprop" do
|
176
|
+
before do
|
177
|
+
html = '
|
178
|
+
<div itemscope>
|
179
|
+
<span itemprop="description">The animal is a <span itemprop="colour">green</span> parrot.</span>
|
180
|
+
</div>
|
181
|
+
'
|
182
|
+
doc = Nokogiri(html)
|
183
|
+
itemscope = doc.search('./*').first
|
184
|
+
@item = Mida::Item.new(itemscope)
|
185
|
+
end
|
186
|
+
|
187
|
+
it '#type should return the correct type' do
|
188
|
+
@item.type.should == nil
|
189
|
+
end
|
190
|
+
|
191
|
+
it '#id should return the correct id' do
|
192
|
+
@item.id.should == nil
|
193
|
+
end
|
194
|
+
|
195
|
+
it '#properties should return the correct name/value pairs' do
|
196
|
+
@item.properties.should == {
|
197
|
+
'description' => ['The animal is a green parrot.'],
|
198
|
+
'colour' => ['green']
|
199
|
+
}
|
200
|
+
end
|
201
|
+
|
202
|
+
it '#to_h should return the correct type and properties' do
|
203
|
+
@item.to_h.should == {
|
204
|
+
type: nil,
|
205
|
+
id: nil,
|
206
|
+
properties: {
|
207
|
+
'description' => ['The animal is a green parrot.'],
|
208
|
+
'colour' => ['green']
|
209
|
+
}
|
210
|
+
}
|
211
|
+
end
|
212
|
+
|
213
|
+
end
|
214
|
+
|
139
215
|
describe Mida::Item, 'when initialized with an itemscope containing itemprops with the same name' do
|
140
216
|
before do
|
141
217
|
# Lemon Sorbet flavour
|
data/spec/property_spec.rb
CHANGED
@@ -22,6 +22,19 @@ describe Mida::Property, 'when parsing an element with one itemprop name' do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
describe Mida::Property, "when parsing an element who's inner text contains\
|
26
|
+
non microdata elements" do
|
27
|
+
before do
|
28
|
+
html = '<span itemprop="reviewer">Lorry <em>Woodman</em></span>'
|
29
|
+
doc = Nokogiri(html)
|
30
|
+
@itemprop = doc.search('./*').first
|
31
|
+
end
|
32
|
+
|
33
|
+
it '#parse should return a Hash with the correct name/value pair' do
|
34
|
+
Mida::Property.parse(@itemprop).should == {'reviewer' => 'Lorry Woodman'}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
25
38
|
describe Mida::Property, 'when parsing an itemscope element that has a relative url' do
|
26
39
|
before do
|
27
40
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: mida
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Lawrence Woodman
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-04-
|
13
|
+
date: 2011-04-18 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
@@ -43,6 +43,7 @@ extensions: []
|
|
43
43
|
extra_rdoc_files:
|
44
44
|
- README.rdoc
|
45
45
|
- LICENSE.rdoc
|
46
|
+
- CHANGELOG.rdoc
|
46
47
|
files:
|
47
48
|
- lib/mida.rb
|
48
49
|
- lib/mida/property.rb
|
@@ -53,6 +54,7 @@ files:
|
|
53
54
|
- spec/item_spec.rb
|
54
55
|
- spec/spec_helper.rb
|
55
56
|
- TODO.rdoc
|
57
|
+
- CHANGELOG.rdoc
|
56
58
|
- README.rdoc
|
57
59
|
- LICENSE.rdoc
|
58
60
|
- Rakefile
|