mida 0.0.0
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/LICENSE.rdoc +21 -0
- data/README.rdoc +68 -0
- data/Rakefile +26 -0
- data/TODO.rdoc +6 -0
- data/lib/mida.rb +6 -0
- data/lib/mida/document.rb +61 -0
- data/lib/mida/item.rb +100 -0
- data/lib/mida/property.rb +70 -0
- data/spec/document_spec.rb +684 -0
- data/spec/item_spec.rb +393 -0
- data/spec/property_spec.rb +152 -0
- data/spec/spec_helper.rb +41 -0
- metadata +172 -0
data/spec/item_spec.rb
ADDED
@@ -0,0 +1,393 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
require_relative '../lib/mida'
|
3
|
+
|
4
|
+
describe Mida::Item, 'when initialized with an itemscope containing just itemprops' do
|
5
|
+
before do
|
6
|
+
# The first_name element
|
7
|
+
@fn = mock_element('span', {'itemprop' => 'first_name'}, 'Lorry')
|
8
|
+
|
9
|
+
# The last_name element
|
10
|
+
@ln = mock_element('span', {'itemprop' => 'last_name'}, 'Woodman')
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when there is no itemtype' do
|
14
|
+
before do
|
15
|
+
# The surrounding reviewer itemscope element
|
16
|
+
itemscope_el = mock_element('div', {'itemprop' => 'reviewer', 'itemscope' => true}, nil, [@fn,@ln])
|
17
|
+
@item = Mida::Item.new(itemscope_el)
|
18
|
+
end
|
19
|
+
|
20
|
+
it '#type should return the correct type' do
|
21
|
+
@item.type.should == nil
|
22
|
+
end
|
23
|
+
|
24
|
+
it '#id should return the correct id' do
|
25
|
+
@item.id.should == nil
|
26
|
+
end
|
27
|
+
|
28
|
+
it '#properties should return the correct name/value pairs' do
|
29
|
+
@item.properties.should == {
|
30
|
+
'first_name' => ['Lorry'],
|
31
|
+
'last_name' => ['Woodman']
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
it '#to_h should return the correct type and properties' do
|
36
|
+
@item.to_h.should == {
|
37
|
+
type: nil, id: nil, properties: {
|
38
|
+
'first_name' => ['Lorry'],
|
39
|
+
'last_name' => ['Woodman']
|
40
|
+
}
|
41
|
+
}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'when there is an itemtype' do
|
46
|
+
before do
|
47
|
+
# The surrounding reviewer itemscope element
|
48
|
+
itemscope_el = mock_element('div', {'itemprop' => 'reviewer', 'itemtype' => 'person', 'itemscope' => true}, nil, [@fn,@ln])
|
49
|
+
@item = Mida::Item.new(itemscope_el)
|
50
|
+
end
|
51
|
+
|
52
|
+
it '#type should return the correct type' do
|
53
|
+
@item.type.should == 'person'
|
54
|
+
end
|
55
|
+
|
56
|
+
it '#id should return the correct id' do
|
57
|
+
@item.id.should == nil
|
58
|
+
end
|
59
|
+
|
60
|
+
it '#properties should return the correct name/value pairs' do
|
61
|
+
@item.properties.should == {
|
62
|
+
'first_name' => ['Lorry'],
|
63
|
+
'last_name' => ['Woodman']
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
it '#to_h should return the correct type and properties' do
|
68
|
+
@item.to_h.should == {
|
69
|
+
type: 'person',
|
70
|
+
id: nil,
|
71
|
+
properties: {
|
72
|
+
'first_name' => ['Lorry'],
|
73
|
+
'last_name' => ['Woodman']
|
74
|
+
}
|
75
|
+
}
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe Mida::Item, 'when initialized with an itemscope containing an itemprop with a relative url' do
|
81
|
+
before do
|
82
|
+
@url = mock_element('a', {'itemprop' => 'url', 'href' => 'home/lorry'})
|
83
|
+
itemscope_el = mock_element('div', {'itemscope' => true}, nil, [@url])
|
84
|
+
@item = Mida::Item.new(itemscope_el, "http://example.com")
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'should return the url as an absolute url' do
|
88
|
+
@item.properties['url'].should == ['http://example.com/home/lorry']
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe Mida::Item, 'when initialized with an itemscope containing itemprops surrounded by a non microdata element' do
|
93
|
+
before do
|
94
|
+
# The first_name element
|
95
|
+
fn = mock_element('span', {'itemprop' => 'first_name'}, 'Lorry')
|
96
|
+
|
97
|
+
# The last_name element
|
98
|
+
ln = mock_element('span', {'itemprop' => 'last_name'}, 'Woodman')
|
99
|
+
|
100
|
+
# A non microdata element surrounding last_name
|
101
|
+
surround = mock_element('span', {}, nil, [ln])
|
102
|
+
|
103
|
+
# The surrounding reviewer itemscope element
|
104
|
+
itemscope_el = mock_element('div', {'itemprop' => 'reviewer',
|
105
|
+
'itemtype' => 'person',
|
106
|
+
'itemscope' => true},
|
107
|
+
nil, [fn,surround])
|
108
|
+
@item = Mida::Item.new(itemscope_el)
|
109
|
+
end
|
110
|
+
|
111
|
+
it '#type should return the correct type' do
|
112
|
+
@item.type.should == 'person'
|
113
|
+
end
|
114
|
+
|
115
|
+
it '#id should return the correct id' do
|
116
|
+
@item.id.should == nil
|
117
|
+
end
|
118
|
+
|
119
|
+
it '#properties should return the correct name/value pairs' do
|
120
|
+
@item.properties.should == {
|
121
|
+
'first_name' => ['Lorry'],
|
122
|
+
'last_name' => ['Woodman']
|
123
|
+
}
|
124
|
+
end
|
125
|
+
|
126
|
+
it '#to_h should return the correct type and properties' do
|
127
|
+
@item.to_h.should == {
|
128
|
+
type: 'person',
|
129
|
+
id: nil,
|
130
|
+
properties: {
|
131
|
+
'first_name' => ['Lorry'],
|
132
|
+
'last_name' => ['Woodman']
|
133
|
+
}
|
134
|
+
}
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
describe Mida::Item, 'when initialized with an itemscope containing itemprops with the same name' do
|
140
|
+
before do
|
141
|
+
# Lemon Sorbet flavour
|
142
|
+
ls_flavour = mock_element('span', {'itemprop' => 'flavour'}, 'Lemon Sorbet')
|
143
|
+
|
144
|
+
# Apricot Sorbet flavour
|
145
|
+
as_flavour = mock_element('span', {'itemprop' => 'flavour'}, 'Apricot Sorbet')
|
146
|
+
|
147
|
+
# Strawberry icecream
|
148
|
+
fruit = mock_element('span', {'itemprop' => 'fruit'}, 'Strawberry')
|
149
|
+
|
150
|
+
# Homemade icecream
|
151
|
+
style = mock_element('span', {'itemprop' => 'style'}, 'Homemade')
|
152
|
+
|
153
|
+
# The surrounding icecreame-type itemscope
|
154
|
+
@sb_flavour = mock_element('div', {'itemprop' => 'flavour',
|
155
|
+
'itemtype' => 'icecream-type',
|
156
|
+
'itemscope' => true},
|
157
|
+
nil, [fruit,style])
|
158
|
+
|
159
|
+
# The surrounding icecreams itemscope element
|
160
|
+
icecreams = mock_element('div', {'itemtype' => 'icecreams',
|
161
|
+
'itemscope' => true},
|
162
|
+
nil, [ls_flavour, as_flavour, @sb_flavour])
|
163
|
+
@item = Mida::Item.new(icecreams)
|
164
|
+
end
|
165
|
+
|
166
|
+
it '#type should return the correct type' do
|
167
|
+
@item.type.should == 'icecreams'
|
168
|
+
end
|
169
|
+
|
170
|
+
it '#id should return the correct id' do
|
171
|
+
@item.id.should == nil
|
172
|
+
end
|
173
|
+
|
174
|
+
it '#properties should return the correct name/value pairs' do
|
175
|
+
@item.properties.should == {
|
176
|
+
'flavour' => [
|
177
|
+
'Lemon Sorbet',
|
178
|
+
'Apricot Sorbet',
|
179
|
+
Mida::Item.new(@sb_flavour)
|
180
|
+
]
|
181
|
+
}
|
182
|
+
end
|
183
|
+
|
184
|
+
it '#to_h should return the correct type and properties' do
|
185
|
+
@item.to_h.should == {
|
186
|
+
type: 'icecreams',
|
187
|
+
id: nil,
|
188
|
+
properties: {
|
189
|
+
'flavour' => [
|
190
|
+
'Lemon Sorbet',
|
191
|
+
'Apricot Sorbet',
|
192
|
+
{ type: 'icecream-type',
|
193
|
+
id: nil,
|
194
|
+
properties: {
|
195
|
+
'fruit' => ['Strawberry'],
|
196
|
+
'style' => ['Homemade']
|
197
|
+
}
|
198
|
+
}
|
199
|
+
]
|
200
|
+
}
|
201
|
+
}
|
202
|
+
end
|
203
|
+
|
204
|
+
end
|
205
|
+
|
206
|
+
describe Mida::Item, 'when initialized with an itemscope containing itemrefs' do
|
207
|
+
|
208
|
+
before do
|
209
|
+
|
210
|
+
name = mock_element('span', {'itemprop' => 'name'}, 'Amanda')
|
211
|
+
name_p = mock_element('p', {'id' => 'a'}, nil, [name])
|
212
|
+
|
213
|
+
band_name = mock_element('span', {'itemprop' => 'band_name'}, 'Jazz Band')
|
214
|
+
band_size = mock_element('span', {'itemprop' => 'band_size'}, '12')
|
215
|
+
band_div = mock_element('div', {'id' => 'c'}, nil, [band_name, band_size])
|
216
|
+
@empty_band_div = mock_element('div', {'id' => 'b',
|
217
|
+
'itemprop' => 'band',
|
218
|
+
'itemref' => 'c',
|
219
|
+
'itemscope' => true},
|
220
|
+
nil, [],
|
221
|
+
{'c' => band_div})
|
222
|
+
|
223
|
+
|
224
|
+
age = mock_element('span', {'itemprop' => 'age'}, '30')
|
225
|
+
age_div = mock_element('div', {'itemref' => 'a b',
|
226
|
+
'itemscope' => true},
|
227
|
+
nil, [age],
|
228
|
+
{'a' => name_p, 'b' => @empty_band_div})
|
229
|
+
|
230
|
+
@item = Mida::Item.new(age_div)
|
231
|
+
end
|
232
|
+
|
233
|
+
it '#type should return the correct type' do
|
234
|
+
@item.type.should == nil
|
235
|
+
end
|
236
|
+
|
237
|
+
it '#id should return the correct id' do
|
238
|
+
@item.id.should == nil
|
239
|
+
end
|
240
|
+
|
241
|
+
it '#properties should return the correct name/value pairs' do
|
242
|
+
@item.properties.should == {
|
243
|
+
'age' => ['30'],
|
244
|
+
'name' => ['Amanda'],
|
245
|
+
'band' => [Mida::Item.new(@empty_band_div)]
|
246
|
+
}
|
247
|
+
end
|
248
|
+
|
249
|
+
it '#to_h should return the correct type and properties' do
|
250
|
+
@item.to_h.should == {
|
251
|
+
type: nil,
|
252
|
+
id: nil,
|
253
|
+
properties: {
|
254
|
+
'age' => ['30'],
|
255
|
+
'name' => ['Amanda'],
|
256
|
+
'band' => [{
|
257
|
+
type: nil,
|
258
|
+
id: nil,
|
259
|
+
properties: {
|
260
|
+
'band_name' => ['Jazz Band'],
|
261
|
+
'band_size' => ['12']
|
262
|
+
}
|
263
|
+
}]
|
264
|
+
}
|
265
|
+
}
|
266
|
+
end
|
267
|
+
|
268
|
+
end
|
269
|
+
|
270
|
+
describe Mida::Item, 'when initialized with an itemscope containing an itemid' do
|
271
|
+
|
272
|
+
before do
|
273
|
+
|
274
|
+
title = mock_element('span', {'itemprop' => 'title'}, 'Hacking Vim 7.2')
|
275
|
+
author = mock_element('span', {'itemprop' => 'author'}, 'Kim Schulz')
|
276
|
+
book = mock_element('div', {
|
277
|
+
'itemtype' => 'book',
|
278
|
+
'itemid' => 'urn:isbn:978-1-849510-50-9',
|
279
|
+
'itemscope' => true},
|
280
|
+
nil, [title,author])
|
281
|
+
|
282
|
+
@item = Mida::Item.new(book)
|
283
|
+
end
|
284
|
+
|
285
|
+
it '#type should return the correct type' do
|
286
|
+
@item.type.should == 'book'
|
287
|
+
end
|
288
|
+
|
289
|
+
it '#id should return the correct id' do
|
290
|
+
@item.id.should == 'urn:isbn:978-1-849510-50-9'
|
291
|
+
end
|
292
|
+
|
293
|
+
it '#properties should return the correct name/value pairs' do
|
294
|
+
@item.properties.should == {
|
295
|
+
'title' => ['Hacking Vim 7.2'],
|
296
|
+
'author' => ['Kim Schulz']
|
297
|
+
}
|
298
|
+
end
|
299
|
+
|
300
|
+
it '#to_h should return the correct type and properties' do
|
301
|
+
@item.to_h.should == {
|
302
|
+
type: 'book',
|
303
|
+
id: 'urn:isbn:978-1-849510-50-9',
|
304
|
+
properties: {
|
305
|
+
'title' => ['Hacking Vim 7.2'],
|
306
|
+
'author' => ['Kim Schulz']
|
307
|
+
}
|
308
|
+
}
|
309
|
+
end
|
310
|
+
|
311
|
+
end
|
312
|
+
|
313
|
+
describe Mida::Item, 'when initialized with an itemscope containing itemscopes as properties nested two deep' do
|
314
|
+
before do
|
315
|
+
|
316
|
+
# The name of the item reviewed
|
317
|
+
@item_name = mock_element('span', {'itemprop' => 'item_name'}, 'Acme Anvil')
|
318
|
+
|
319
|
+
# The rating of the item
|
320
|
+
@rating = mock_element('span', {'itemprop' => 'rating'}, '5')
|
321
|
+
|
322
|
+
# The first_name
|
323
|
+
@fn = mock_element('span', {'itemprop' => 'first_name'}, 'Lorry')
|
324
|
+
|
325
|
+
# The last_name
|
326
|
+
@ln = mock_element('span', {'itemprop' => 'last_name'}, 'Woodman')
|
327
|
+
|
328
|
+
# The organization name
|
329
|
+
@org_name = mock_element('span', {'itemprop' => 'name'}, 'Acme')
|
330
|
+
|
331
|
+
# The surrounding organization itemscope
|
332
|
+
@org_el = mock_element('div', {'itemprop' => 'represents',
|
333
|
+
'itemtype' => 'organization',
|
334
|
+
'itemscope' => true}, nil, [@org_name])
|
335
|
+
|
336
|
+
# The surrounding reviewer itemscope
|
337
|
+
@reviewer_el = mock_element('div', {'itemprop' => 'reviewer',
|
338
|
+
'itemtype' => 'person',
|
339
|
+
'itemscope' => true},
|
340
|
+
nil, [@fn,@ln, @org_el])
|
341
|
+
|
342
|
+
# The surrounding reviewer itemscope
|
343
|
+
@review_el = mock_element('div', {'itemtype' => 'review', 'itemscope' => true}, nil, [@item_name, @rating, @reviewer_el])
|
344
|
+
|
345
|
+
@item = Mida::Item.new(@review_el)
|
346
|
+
|
347
|
+
end
|
348
|
+
|
349
|
+
before do
|
350
|
+
end
|
351
|
+
|
352
|
+
it '#type should return the correct type' do
|
353
|
+
@item.type.should == 'review'
|
354
|
+
end
|
355
|
+
|
356
|
+
it '#id should return the correct id' do
|
357
|
+
@item.id.should == nil
|
358
|
+
end
|
359
|
+
|
360
|
+
it '#properties should return the correct name/value pairs' do
|
361
|
+
@item.properties.should == {
|
362
|
+
'item_name' => ['Acme Anvil'],
|
363
|
+
'rating' => ['5'],
|
364
|
+
'reviewer' => [Mida::Item.new(@reviewer_el)]
|
365
|
+
}
|
366
|
+
end
|
367
|
+
|
368
|
+
it '#to_h should return the correct type and properties' do
|
369
|
+
@item.to_h.should == {
|
370
|
+
type: 'review',
|
371
|
+
id: nil,
|
372
|
+
properties: {
|
373
|
+
'item_name' => ['Acme Anvil'],
|
374
|
+
'rating' => ['5'],
|
375
|
+
'reviewer' => [{
|
376
|
+
type: 'person',
|
377
|
+
id: nil,
|
378
|
+
properties: {
|
379
|
+
'first_name' => ['Lorry'],
|
380
|
+
'last_name' => ['Woodman'],
|
381
|
+
'represents' => [{
|
382
|
+
type: 'organization',
|
383
|
+
id: nil,
|
384
|
+
properties: {
|
385
|
+
'name' => ['Acme']
|
386
|
+
}
|
387
|
+
}]
|
388
|
+
}
|
389
|
+
}]
|
390
|
+
}
|
391
|
+
}
|
392
|
+
end
|
393
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
require_relative '../lib/mida'
|
3
|
+
|
4
|
+
|
5
|
+
describe Mida::Property, 'when parsing an element without an itemprop attribute' do
|
6
|
+
before do
|
7
|
+
@element = mock_element('span')
|
8
|
+
end
|
9
|
+
|
10
|
+
it '#parse should return an empty Hash' do
|
11
|
+
Mida::Property.parse(@element).should == {}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe Mida::Property, 'when parsing an element with one itemprop name' do
|
16
|
+
before do
|
17
|
+
@element = mock_element('span', {'itemprop' => 'reviewer'}, 'Lorry Woodman')
|
18
|
+
end
|
19
|
+
|
20
|
+
it '#parse should return a Hash with the correct name/value pair' do
|
21
|
+
Mida::Property.parse(@element).should == {'reviewer' => 'Lorry Woodman'}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe Mida::Property, 'when parsing an itemscope element that has a relative url' do
|
26
|
+
before do
|
27
|
+
|
28
|
+
# The first_name element
|
29
|
+
fn = mock_element('span', {'itemprop' => 'first_name'}, 'Lorry')
|
30
|
+
|
31
|
+
# The last_name element
|
32
|
+
ln = mock_element('span', {'itemprop' => 'last_name'}, 'Woodman')
|
33
|
+
|
34
|
+
# The url. This is important to check whether the page_url is passed onto Item
|
35
|
+
url = mock_element('a', {'itemprop' => 'url', 'href' => 'home/LorryWoodman'})
|
36
|
+
|
37
|
+
# The surrounding reviewer itemscope element
|
38
|
+
@itemscope_el = mock_element('div', {'itemprop' => 'reviewer',
|
39
|
+
'itemtype' => 'person',
|
40
|
+
'itemscope' =>true}, nil, [fn,ln,url])
|
41
|
+
end
|
42
|
+
|
43
|
+
it '#parse should return a Hash with the correct name/value pair' do
|
44
|
+
property = Mida::Property.parse(@itemscope_el, "http://example.com")
|
45
|
+
property.size.should == 1
|
46
|
+
reviewer = property['reviewer']
|
47
|
+
reviewer.type.should == 'person'
|
48
|
+
reviewer.properties.should == {
|
49
|
+
'first_name' => ['Lorry'],
|
50
|
+
'last_name' => ['Woodman'],
|
51
|
+
'url' => ['http://example.com/home/LorryWoodman']
|
52
|
+
}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe Mida::Property, 'when parsing an element with multiple itemprop names' do
|
57
|
+
before do
|
58
|
+
@element = mock_element('span', {'itemprop' => 'reviewer friend person'}, 'the property text')
|
59
|
+
end
|
60
|
+
|
61
|
+
it '#parse should return a Hash with the name/value pairs' do
|
62
|
+
Mida::Property.parse(@element).should == {
|
63
|
+
'reviewer' => 'the property text',
|
64
|
+
'friend' => 'the property text',
|
65
|
+
'person' => 'the property text'
|
66
|
+
}
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe Mida::Property, 'when parsing an element with non text content url values' do
|
71
|
+
before :all do
|
72
|
+
URL_ELEMENTS = {
|
73
|
+
'a' => 'href', 'area' => 'href',
|
74
|
+
'audio' => 'src', 'embed' => 'src',
|
75
|
+
'iframe' => 'src', 'img' => 'src',
|
76
|
+
'link' => 'href', 'source' => 'src',
|
77
|
+
'object' => 'data', 'track' => 'src',
|
78
|
+
'video' => 'src'
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'when not given a page_url' do
|
83
|
+
|
84
|
+
it 'should return nothing for relative urls' do
|
85
|
+
url = 'register/index.html'
|
86
|
+
URL_ELEMENTS.each do |tag, attr|
|
87
|
+
element = mock_element(tag, {'itemprop' => 'url', attr => url})
|
88
|
+
Mida::Property.parse(element).should == {'url' => ''}
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should return the url for absolute urls' do
|
93
|
+
urls = [
|
94
|
+
'http://example.com',
|
95
|
+
'http://example.com/register',
|
96
|
+
'http://example.com/register/index.html'
|
97
|
+
]
|
98
|
+
|
99
|
+
urls.each do |url|
|
100
|
+
URL_ELEMENTS.each do |tag, attr|
|
101
|
+
element = mock_element(tag, {'itemprop' => 'url', attr => url})
|
102
|
+
Mida::Property.parse(element).should == {'url' => url}
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context 'when given a page_url' do
|
109
|
+
before do
|
110
|
+
@page_url = 'http://example.com/test/index.html'
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'should return the absolute url for relative urls' do
|
114
|
+
url = 'register/index.html'
|
115
|
+
URL_ELEMENTS.each do |tag, attr|
|
116
|
+
element = mock_element(tag, {'itemprop' => 'url', attr => url})
|
117
|
+
Mida::Property.parse(element, @page_url).should ==
|
118
|
+
{'url' => 'http://example.com/test/register/index.html'}
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'should return the url unchanged for absolute urls' do
|
123
|
+
urls = [
|
124
|
+
'http://example.com',
|
125
|
+
'http://example.com/register',
|
126
|
+
'http://example.com/register/index.html'
|
127
|
+
]
|
128
|
+
|
129
|
+
urls.each do |url|
|
130
|
+
URL_ELEMENTS.each do |tag, attr|
|
131
|
+
element = mock_element(tag, {'itemprop' => 'url', attr => url})
|
132
|
+
Mida::Property.parse(element, @page_url).should == {'url' => url}
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe Mida::Property, 'when parsing an element with non text content non url values' do
|
141
|
+
it 'should get values from a meta content attribute' do
|
142
|
+
element = mock_element('meta', {'itemprop' => 'reviewer',
|
143
|
+
'content' => 'Lorry Woodman'})
|
144
|
+
Mida::Property.parse(element).should == {'reviewer' => 'Lorry Woodman'}
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'should get time from an time datatime attribute' do
|
148
|
+
element = mock_element('time', {'itemprop' => 'dtreviewed',
|
149
|
+
'datetime' => '2011-04-04'})
|
150
|
+
Mida::Property.parse(element).should == {'dtreviewed' => '2011-04-04'}
|
151
|
+
end
|
152
|
+
end
|