mida 0.2.0 → 0.3.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/CHANGELOG.rdoc +18 -2
- data/README.rdoc +22 -11
- data/Rakefile +2 -2
- data/lib/mida.rb +1 -1
- data/lib/mida/datatype.rb +15 -0
- data/lib/mida/datatype/boolean.rb +18 -0
- data/lib/mida/datatype/float.rb +15 -0
- data/lib/mida/datatype/integer.rb +15 -0
- data/lib/mida/datatype/iso8601date.rb +17 -0
- data/lib/mida/datatype/number.rb +15 -0
- data/lib/mida/datatype/text.rb +13 -0
- data/lib/mida/document.rb +21 -19
- data/lib/mida/genericvocabulary.rb +13 -0
- data/lib/mida/item.rb +83 -71
- data/lib/mida/itemprop.rb +55 -30
- data/lib/mida/itemscope.rb +82 -0
- data/lib/mida/propertydesc.rb +36 -0
- data/lib/mida/vocabulary.rb +60 -6
- data/spec/datatype/boolean_spec.rb +27 -0
- data/spec/datatype/float_spec.rb +23 -0
- data/spec/datatype/integer_spec.rb +23 -0
- data/spec/datatype/iso8601date_spec.rb +20 -0
- data/spec/datatype/number_spec.rb +23 -0
- data/spec/datatype/text_spec.rb +14 -0
- data/spec/document_spec.rb +31 -487
- data/spec/item_spec.rb +163 -472
- data/spec/itemprop_spec.rb +40 -45
- data/spec/itemscope_spec.rb +287 -0
- data/spec/propertydesc_spec.rb +56 -0
- data/spec/spec_helper.rb +13 -36
- data/spec/vocabulary_spec.rb +148 -0
- metadata +22 -6
- data/lib/mida/vocabulary/generic.rb +0 -15
- data/lib/mida/vocabularydesc.rb +0 -57
- data/spec/vocabularydesc_spec.rb +0 -106
data/spec/spec_helper.rb
CHANGED
@@ -1,41 +1,18 @@
|
|
1
|
+
require 'bundler/setup'
|
1
2
|
require 'rspec'
|
2
3
|
|
3
|
-
def
|
4
|
-
|
5
|
-
attr = mock(Nokogiri::XML::Attr)
|
6
|
-
if value != true
|
7
|
-
attr.stub!(:value).and_return(value)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
element.should_receive(:attribute).any_number_of_times.with(attribute).and_return(attr)
|
11
|
-
element
|
4
|
+
def html_wrap(html)
|
5
|
+
"<!DOCTYPE html><html><body>#{html}</body></html>"
|
12
6
|
end
|
13
7
|
|
14
|
-
# Return
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
element.stub!(:inner_text).and_return(inner_text)
|
26
|
-
element.stub!(:name).and_return(tag)
|
27
|
-
|
28
|
-
element.should_receive(:search).any_number_of_times.with('./*').and_return(search_return)
|
29
|
-
|
30
|
-
# Set a valid return element for each likely id
|
31
|
-
('a'..'z').each do |id|
|
32
|
-
stub = element.should_receive(:search).any_number_of_times.with("//*[@id='#{id}']")
|
33
|
-
if id_searches.has_key?(id)
|
34
|
-
stub.and_return([id_searches[id]])
|
35
|
-
else
|
36
|
-
stub.and_return([])
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
element
|
8
|
+
# Return the last error message on STDERR.
|
9
|
+
# Prevents the message being output to STDERR.
|
10
|
+
def last_stderr
|
11
|
+
orig_stderr = $stderr
|
12
|
+
$stderr = StringIO.new
|
13
|
+
yield
|
14
|
+
$stderr.rewind
|
15
|
+
message = $stderr.string.chomp
|
16
|
+
$stderr = orig_stderr
|
17
|
+
message
|
41
18
|
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'mida'
|
3
|
+
|
4
|
+
describe Mida::Vocabulary, 'when subclassed and given has statements with no blocks' do
|
5
|
+
before do
|
6
|
+
class Organization < Mida::Vocabulary
|
7
|
+
itemtype %r{http://example\.com.*?organization$}i
|
8
|
+
has_one 'name'
|
9
|
+
has_many 'tel', 'url'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it '#itemtype should return the correct regexp' do
|
14
|
+
Organization.itemtype.should == %r{http://example\.com.*?organization$}i
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should specify name to appear once' do
|
18
|
+
Organization.properties['name'][:num].should == :one
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should specify tel and url to appear many times' do
|
22
|
+
Organization.properties['tel'][:num].should == :many
|
23
|
+
Organization.properties['url'][:num].should == :many
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe Mida::Vocabulary, 'when subclassed and given has statements with blocks' do
|
28
|
+
before do
|
29
|
+
class Rating < Mida::Vocabulary
|
30
|
+
itemtype %r{http://example\.com.*?rating$}i
|
31
|
+
has_one 'best', 'value'
|
32
|
+
end
|
33
|
+
|
34
|
+
class Comment < Mida::Vocabulary
|
35
|
+
itemtype %r{http://example\.com.*?comment$}i
|
36
|
+
has_one 'commentor', 'comment'
|
37
|
+
end
|
38
|
+
|
39
|
+
class Review < Mida::Vocabulary
|
40
|
+
itemtype %r{http://example\.com.*?review$}i
|
41
|
+
has_one 'itemreviewed'
|
42
|
+
has_one 'rating' do
|
43
|
+
extract Rating, Mida::DataType::Text
|
44
|
+
end
|
45
|
+
has_many 'comments' do
|
46
|
+
extract Comment
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it '#itemtype should return the correct regexp' do
|
52
|
+
Review.itemtype.should == %r{http://example\.com.*?review$}i
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should specify itemreviewed to appear once' do
|
56
|
+
Review.properties['itemreviewed'][:num].should == :one
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should specify that itemreviewed only have the type Mida::DataType::Text' do
|
60
|
+
Review.properties['itemreviewed'][:types].should == [Mida::DataType::Text]
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should specify rating to appear once' do
|
64
|
+
Review.properties['rating'][:num].should == :one
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should specify rating to only have the types: Rating, Mida::DataType::Text' do
|
68
|
+
Review.properties['rating'][:types].should == [Rating, Mida::DataType::Text]
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should specify comments to appear many times' do
|
72
|
+
Review.properties['comments'][:num].should == :many
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'should specify that comments only have the type Comment' do
|
76
|
+
Review.properties['comments'][:types].should == [Comment]
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe Mida::Vocabulary, 'when subclassed and used with :any for properties and types' do
|
81
|
+
before do
|
82
|
+
class Person < Mida::Vocabulary
|
83
|
+
itemtype %r{http://example.com/vocab/person}
|
84
|
+
has_one 'name'
|
85
|
+
has_many :any do
|
86
|
+
extract :any
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
it '#itemtype should return the correct regexp' do
|
92
|
+
Person.itemtype.should == %r{http://example.com/vocab/person}
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'should specify that name only appears once' do
|
96
|
+
Person.properties['name'][:num].should == :one
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'should specify that any other property can appear many times' do
|
100
|
+
Person.properties[:any][:num].should == :many
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'should specify that any other property can have any type' do
|
104
|
+
Person.properties[:any][:types].should == [:any]
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe Mida::Vocabulary, 'when subclassed' do
|
109
|
+
|
110
|
+
before do
|
111
|
+
# Make sure the class is redefined afresh to make sure that
|
112
|
+
# inherited() hook is called
|
113
|
+
Mida::Vocabulary.unregister(Person)
|
114
|
+
Object.send(:remove_const, :Person)
|
115
|
+
|
116
|
+
class Person < Mida::Vocabulary
|
117
|
+
itemtype %r{http://example.com/vocab/person}
|
118
|
+
has_one 'name'
|
119
|
+
has_many :any do
|
120
|
+
extract :any
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'should register the vocabulary subclass' do
|
126
|
+
Mida::Vocabulary.vocabularies.should include(Person)
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
131
|
+
describe Mida::Vocabulary, 'when subclassed and has no properties' do
|
132
|
+
|
133
|
+
before do
|
134
|
+
|
135
|
+
class Empty < Mida::Vocabulary
|
136
|
+
itemtype %r{http://example.com/vocab/empty}
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'should register the vocabulary subclass' do
|
141
|
+
Mida::Vocabulary.vocabularies.should include(Empty)
|
142
|
+
end
|
143
|
+
|
144
|
+
it '#properties should return an empty hash' do
|
145
|
+
Mida::Vocabulary.properties.should == {}
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: mida
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.3.0
|
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-
|
13
|
+
date: 2011-06-29 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
@@ -48,21 +48,37 @@ files:
|
|
48
48
|
- lib/mida.rb
|
49
49
|
- lib/mida/item.rb
|
50
50
|
- lib/mida/document.rb
|
51
|
-
- lib/mida/
|
52
|
-
- lib/mida/
|
51
|
+
- lib/mida/datatype.rb
|
52
|
+
- lib/mida/propertydesc.rb
|
53
53
|
- lib/mida/itemprop.rb
|
54
|
+
- lib/mida/datatype/float.rb
|
55
|
+
- lib/mida/datatype/number.rb
|
56
|
+
- lib/mida/datatype/iso8601date.rb
|
57
|
+
- lib/mida/datatype/text.rb
|
58
|
+
- lib/mida/datatype/boolean.rb
|
59
|
+
- lib/mida/datatype/integer.rb
|
60
|
+
- lib/mida/genericvocabulary.rb
|
54
61
|
- lib/mida/vocabulary.rb
|
62
|
+
- lib/mida/itemscope.rb
|
63
|
+
- spec/propertydesc_spec.rb
|
64
|
+
- spec/itemscope_spec.rb
|
55
65
|
- spec/itemprop_spec.rb
|
56
66
|
- spec/document_spec.rb
|
67
|
+
- spec/vocabulary_spec.rb
|
57
68
|
- spec/item_spec.rb
|
58
69
|
- spec/spec_helper.rb
|
59
|
-
- spec/
|
70
|
+
- spec/datatype/iso8601date_spec.rb
|
71
|
+
- spec/datatype/integer_spec.rb
|
72
|
+
- spec/datatype/float_spec.rb
|
73
|
+
- spec/datatype/text_spec.rb
|
74
|
+
- spec/datatype/boolean_spec.rb
|
75
|
+
- spec/datatype/number_spec.rb
|
60
76
|
- TODO.rdoc
|
61
77
|
- CHANGELOG.rdoc
|
62
78
|
- README.rdoc
|
63
79
|
- LICENSE.rdoc
|
64
80
|
- Rakefile
|
65
|
-
homepage: http://github.com/
|
81
|
+
homepage: http://lawrencewoodman.github.com/mida/
|
66
82
|
licenses: []
|
67
83
|
|
68
84
|
post_install_message:
|
data/lib/mida/vocabularydesc.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
module Mida
|
2
|
-
|
3
|
-
# Class used to describe a vocabulary
|
4
|
-
#
|
5
|
-
# To specify a vocabulary use the following methods:
|
6
|
-
# +itemtype+, +has_one+, +has_many+, +types+
|
7
|
-
class VocabularyDesc
|
8
|
-
|
9
|
-
# Sets the regular expression to match against the +itemtype+
|
10
|
-
# or returns the current regular expression
|
11
|
-
def self.itemtype(regexp_arg=nil)
|
12
|
-
if regexp_arg
|
13
|
-
@itemtype = regexp_arg
|
14
|
-
else
|
15
|
-
@itemtype
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
# Getter to read the created propeties specification
|
20
|
-
def self.prop_spec
|
21
|
-
@prop_spec || {}
|
22
|
-
end
|
23
|
-
|
24
|
-
# The types a property can take. E.g. +String+, or another +Vocabulary+
|
25
|
-
# If you want to say any type, then use +:any+ as the class
|
26
|
-
# This should be used within a +has_one+ or +has_many+ block
|
27
|
-
def self.types(*type_classes)
|
28
|
-
{types: type_classes}
|
29
|
-
end
|
30
|
-
|
31
|
-
# Defines the properties as only containing one value
|
32
|
-
# If want to say any property name, then use +:any+ as a name
|
33
|
-
def self.has_one(*property_names, &block)
|
34
|
-
has(:one, *property_names, &block)
|
35
|
-
end
|
36
|
-
|
37
|
-
# Defines the properties as containing many values
|
38
|
-
# If want to say any property name, then use +:any+ as a name
|
39
|
-
def self.has_many(*property_names, &block)
|
40
|
-
has(:many, *property_names, &block)
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.has(num, *property_names, &block)
|
44
|
-
@prop_spec ||= {}
|
45
|
-
property_names.each_with_object(@prop_spec) do |name, prop_spec|
|
46
|
-
prop_spec[name] = if block_given?
|
47
|
-
{num: num}.merge(yield)
|
48
|
-
else
|
49
|
-
{num: num, types: [String]}
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
private_class_method :has
|
55
|
-
|
56
|
-
end
|
57
|
-
end
|
data/spec/vocabularydesc_spec.rb
DELETED
@@ -1,106 +0,0 @@
|
|
1
|
-
require_relative 'spec_helper'
|
2
|
-
require_relative '../lib/mida'
|
3
|
-
|
4
|
-
describe Mida::VocabularyDesc, 'when subclassed and given has statements with no blocks' do
|
5
|
-
before do
|
6
|
-
class Organization < Mida::VocabularyDesc
|
7
|
-
itemtype %r{http://example\.com.*?organization$}i
|
8
|
-
has_one 'name'
|
9
|
-
has_many 'tel', 'url'
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
it '#itemtype should return the correct regexp' do
|
14
|
-
Organization.itemtype.should == %r{http://example\.com.*?organization$}i
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should specify name to appear once' do
|
18
|
-
Organization.prop_spec['name'][:num].should == :one
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'should specify tel and url to appear many times' do
|
22
|
-
Organization.prop_spec['tel'][:num].should == :many
|
23
|
-
Organization.prop_spec['url'][:num].should == :many
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe Mida::VocabularyDesc, 'when subclassed and given has statements with blocks' do
|
28
|
-
before do
|
29
|
-
class Rating < Mida::VocabularyDesc
|
30
|
-
itemtype %r{http://example\.com.*?rating$}i
|
31
|
-
has_one 'best', 'value'
|
32
|
-
end
|
33
|
-
|
34
|
-
class Comment < Mida::VocabularyDesc
|
35
|
-
itemtype %r{http://example\.com.*?comment$}i
|
36
|
-
has_one 'commentor', 'comment'
|
37
|
-
end
|
38
|
-
|
39
|
-
class Review < Mida::VocabularyDesc
|
40
|
-
itemtype %r{http://example\.com.*?review$}i
|
41
|
-
has_one 'itemreviewed'
|
42
|
-
has_one 'rating' do
|
43
|
-
types Rating, String
|
44
|
-
end
|
45
|
-
has_many 'comments' do
|
46
|
-
types Comment
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
it '#itemtype should return the correct regexp' do
|
52
|
-
Review.itemtype.should == %r{http://example\.com.*?review$}i
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'should specify itemreviewed to appear once' do
|
56
|
-
Review.prop_spec['itemreviewed'][:num].should == :one
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'should specify that itemreviewed only have the type String' do
|
60
|
-
Review.prop_spec['itemreviewed'][:types].should == [String]
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'should specify rating to appear once' do
|
64
|
-
Review.prop_spec['rating'][:num].should == :one
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'should specify rating to only have the types: Rating, String' do
|
68
|
-
Review.prop_spec['rating'][:types].should == [Rating, String]
|
69
|
-
end
|
70
|
-
|
71
|
-
it 'should specify comments to appear many times' do
|
72
|
-
Review.prop_spec['comments'][:num].should == :many
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'should specify that comments only have the type Comment' do
|
76
|
-
Review.prop_spec['comments'][:types].should == [Comment]
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
describe Mida::VocabularyDesc, 'when subclassed and used with :any for properties and types' do
|
81
|
-
before do
|
82
|
-
class Person < Mida::VocabularyDesc
|
83
|
-
itemtype %r{}
|
84
|
-
has_one 'name'
|
85
|
-
has_many :any do
|
86
|
-
types :any
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
it '#itemtype should return the correct regexp' do
|
92
|
-
Person.itemtype.should == %r{}
|
93
|
-
end
|
94
|
-
|
95
|
-
it 'should specify that name only appears once' do
|
96
|
-
Person.prop_spec['name'][:num].should == :one
|
97
|
-
end
|
98
|
-
|
99
|
-
it 'should specify that any other property can appear many times' do
|
100
|
-
Person.prop_spec[:any][:num].should == :many
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'should specify that any other property can have any type' do
|
104
|
-
Person.prop_spec[:any][:types].should == [:any]
|
105
|
-
end
|
106
|
-
end
|