representative 0.2.5 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +4 -9
- data/lib/representative/abstract_xml.rb +119 -0
- data/lib/representative/json.rb +14 -2
- data/lib/representative/nokogiri.rb +61 -0
- data/lib/representative/tilt_integration.rb +56 -0
- data/lib/representative/version.rb +1 -1
- data/lib/representative/xml.rb +10 -116
- data/spec/representative/json_spec.rb +49 -0
- data/spec/representative/nokogiri_spec.rb +74 -0
- data/spec/representative/tilt_integration_spec.rb +136 -0
- data/spec/representative/xml_behaviour.rb +270 -0
- data/spec/representative/xml_spec.rb +3 -264
- data/spec/spec_helper.rb +0 -3
- metadata +65 -41
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
require "representative/xml"
|
4
|
-
|
4
|
+
require "representative/xml_behaviour"
|
5
5
|
require "rexml/document"
|
6
6
|
|
7
7
|
describe Representative::Xml do
|
@@ -18,267 +18,6 @@ describe Representative::Xml do
|
|
18
18
|
@xml.target!
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
before do
|
24
|
-
@subject = OpenStruct.new(:name => "Fred", :width => 200, :vehicle => OpenStruct.new(:year => "1959", :make => "Chevrolet"))
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "#element" do
|
28
|
-
|
29
|
-
it "generates an element with content extracted from the subject" do
|
30
|
-
r.element :name
|
31
|
-
resulting_xml.should == %(<name>Fred</name>)
|
32
|
-
end
|
33
|
-
|
34
|
-
it "dasherizes the property name" do
|
35
|
-
@subject.full_name = "Fredrick"
|
36
|
-
r.element :full_name
|
37
|
-
resulting_xml.should == %(<full-name>Fredrick</full-name>)
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "with attributes" do
|
41
|
-
|
42
|
-
it "generates attributes on the element" do
|
43
|
-
r.element :name, :lang => "fr"
|
44
|
-
resulting_xml.should == %(<name lang="fr">Fred</name>)
|
45
|
-
end
|
46
|
-
|
47
|
-
it "dasherizes the attribute name" do
|
48
|
-
r.element :name, :sourced_from => "phonebook"
|
49
|
-
resulting_xml.should == %(<name sourced-from="phonebook">Fred</name>)
|
50
|
-
end
|
51
|
-
|
52
|
-
describe "whose value supports #to_proc" do
|
53
|
-
|
54
|
-
it "calls the Proc on the subject to generate a value" do
|
55
|
-
r.element :name, :rev => :reverse
|
56
|
-
resulting_xml.should == %(<name rev="derF">Fred</name>)
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
describe "with value nil" do
|
62
|
-
|
63
|
-
it "omits the attribute" do
|
64
|
-
r.element :name, :lang => nil
|
65
|
-
resulting_xml.should == %(<name>Fred</name>)
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
describe "with an explicit value" do
|
73
|
-
|
74
|
-
it "generates an element with explicitly provided content" do
|
75
|
-
r.element :name, "Bloggs"
|
76
|
-
resulting_xml.should == %(<name>Bloggs</name>)
|
77
|
-
end
|
78
|
-
|
79
|
-
describe "AND attributes" do
|
80
|
-
|
81
|
-
it "generates attributes on the element" do
|
82
|
-
r.element :name, "Bloggs", :lang => "fr"
|
83
|
-
resulting_xml.should == %(<name lang="fr">Bloggs</name>)
|
84
|
-
end
|
85
|
-
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
|
90
|
-
describe "with a value argument that supports #to_proc" do
|
91
|
-
|
92
|
-
it "calls the Proc on the subject to generate a value" do
|
93
|
-
r.element :name, :width
|
94
|
-
resulting_xml.should == %(<name>200</name>)
|
95
|
-
end
|
96
|
-
|
97
|
-
end
|
98
|
-
|
99
|
-
describe "with value argument :self" do
|
100
|
-
|
101
|
-
it "doesn't alter the subject" do
|
102
|
-
r.element :info, :self do
|
103
|
-
r.element :name
|
104
|
-
end
|
105
|
-
resulting_xml.should == %(<info><name>Fred</name></info>)
|
106
|
-
end
|
107
|
-
|
108
|
-
end
|
109
|
-
|
110
|
-
describe "with value argument nil" do
|
111
|
-
|
112
|
-
it "builds an empty element" do
|
113
|
-
r.element :name, nil
|
114
|
-
resulting_xml.should == %(<name/>)
|
115
|
-
end
|
116
|
-
|
117
|
-
describe "and attributes" do
|
118
|
-
|
119
|
-
it "omits attributes derived from the subject" do
|
120
|
-
r.element :name, nil, :size => :size
|
121
|
-
resulting_xml.should == %(<name/>)
|
122
|
-
end
|
123
|
-
|
124
|
-
it "retains attributes with explicit values" do
|
125
|
-
r.element :name, nil, :lang => "en"
|
126
|
-
resulting_xml.should == %(<name lang="en"/>)
|
127
|
-
end
|
128
|
-
|
129
|
-
end
|
130
|
-
|
131
|
-
describe "and a block" do
|
132
|
-
|
133
|
-
it "doesn't call the block" do
|
134
|
-
r.element :name, nil do
|
135
|
-
raise "hell"
|
136
|
-
end
|
137
|
-
resulting_xml.should == %(<name/>)
|
138
|
-
end
|
139
|
-
|
140
|
-
end
|
141
|
-
|
142
|
-
end
|
143
|
-
|
144
|
-
describe "with a block" do
|
145
|
-
|
146
|
-
it "generates nested elements" do
|
147
|
-
r.element :vehicle do
|
148
|
-
r.element :year
|
149
|
-
r.element :make
|
150
|
-
end
|
151
|
-
resulting_xml.should == %(<vehicle><year>1959</year><make>Chevrolet</make></vehicle>)
|
152
|
-
end
|
153
|
-
|
154
|
-
it "yields each new subject" do
|
155
|
-
r.element :vehicle do |vehicle|
|
156
|
-
r.element :year, vehicle.year
|
157
|
-
end
|
158
|
-
resulting_xml.should == %(<vehicle><year>1959</year></vehicle>)
|
159
|
-
end
|
160
|
-
|
161
|
-
end
|
162
|
-
|
163
|
-
describe "with an EMPTY block" do
|
164
|
-
|
165
|
-
it "generates an empty element" do
|
166
|
-
r.element :vehicle, :year => :year, &r.empty
|
167
|
-
resulting_xml.should == %(<vehicle year="1959"/>)
|
168
|
-
end
|
169
|
-
|
170
|
-
end
|
171
|
-
|
172
|
-
end
|
173
|
-
|
174
|
-
describe "#list_of" do
|
175
|
-
|
176
|
-
before do
|
177
|
-
@subject.nick_names = ["Freddie", "Knucklenose"]
|
178
|
-
end
|
179
|
-
|
180
|
-
it "generates an array element" do
|
181
|
-
r.list_of(:nick_names)
|
182
|
-
resulting_xml.should == %(<nick-names type="array"><nick-name>Freddie</nick-name><nick-name>Knucklenose</nick-name></nick-names>)
|
183
|
-
end
|
184
|
-
|
185
|
-
describe "with :list_attributes" do
|
186
|
-
|
187
|
-
it "attaches attributes to the array element" do
|
188
|
-
r.list_of(:nick_names, :list_attributes => {:color => "blue", :size => :size})
|
189
|
-
array_element_attributes = REXML::Document.new(resulting_xml).root.attributes
|
190
|
-
array_element_attributes["type"].should == "array"
|
191
|
-
array_element_attributes["color"].should == "blue"
|
192
|
-
array_element_attributes["size"].should == "2"
|
193
|
-
array_element_attributes.size.should == 3
|
194
|
-
end
|
195
|
-
|
196
|
-
end
|
197
|
-
|
198
|
-
describe "with :item_attributes" do
|
199
|
-
|
200
|
-
it "attaches attributes to each item element" do
|
201
|
-
r.list_of(:nick_names, :item_attributes => {:length => :size})
|
202
|
-
resulting_xml.should == %(<nick-names type="array"><nick-name length="7">Freddie</nick-name><nick-name length="11">Knucklenose</nick-name></nick-names>)
|
203
|
-
end
|
204
|
-
|
205
|
-
end
|
206
|
-
|
207
|
-
describe "with an explicit :item_name" do
|
208
|
-
it "uses the name provided" do
|
209
|
-
r.list_of(:nick_names, :item_name => :nick)
|
210
|
-
resulting_xml.should == %(<nick-names type="array"><nick>Freddie</nick><nick>Knucklenose</nick></nick-names>)
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
describe "with an argument that resolves to nil" do
|
215
|
-
|
216
|
-
it "omits the attribute" do
|
217
|
-
r.list_of(:services) do
|
218
|
-
r.date
|
219
|
-
end
|
220
|
-
resulting_xml.should == %(<services/>)
|
221
|
-
end
|
222
|
-
|
223
|
-
end
|
224
|
-
|
225
|
-
describe "with a block" do
|
226
|
-
|
227
|
-
it "generates a nested element for each list element" do
|
228
|
-
r.list_of(:nick_names) do
|
229
|
-
r.element :length
|
230
|
-
end
|
231
|
-
resulting_xml.should == %(<nick-names type="array"><nick-name><length>7</length></nick-name><nick-name><length>11</length></nick-name></nick-names>)
|
232
|
-
end
|
233
|
-
|
234
|
-
end
|
235
|
-
|
236
|
-
describe "with an EMPTY block" do
|
237
|
-
|
238
|
-
it "generates empty elements for each list element" do
|
239
|
-
r.list_of(:nick_names, :item_attributes => {:value => :to_s}, &r.empty)
|
240
|
-
resulting_xml.should == %(<nick-names type="array"><nick-name value="Freddie"/><nick-name value="Knucklenose"/></nick-names>)
|
241
|
-
end
|
242
|
-
|
243
|
-
end
|
244
|
-
|
245
|
-
describe "with :item_attributes AND block" do
|
246
|
-
|
247
|
-
it "generates attributes and nested elements" do
|
248
|
-
r.list_of(:nick_names, :item_attributes => {:length => :size}) do
|
249
|
-
r.element :reverse
|
250
|
-
end
|
251
|
-
resulting_xml.should == %(<nick-names type="array"><nick-name length="7"><reverse>eidderF</reverse></nick-name><nick-name length="11"><reverse>esonelkcunK</reverse></nick-name></nick-names>)
|
252
|
-
end
|
253
|
-
|
254
|
-
end
|
255
|
-
|
256
|
-
end
|
257
|
-
|
258
|
-
describe "#representing" do
|
259
|
-
|
260
|
-
it "selects a new subject without generating an element" do
|
261
|
-
r.representing :vehicle do
|
262
|
-
r.element :make
|
263
|
-
end
|
264
|
-
resulting_xml.should == %(<make>Chevrolet</make>)
|
265
|
-
end
|
266
|
-
|
267
|
-
end
|
268
|
-
|
269
|
-
describe "#comment" do
|
270
|
-
|
271
|
-
it "inserts a comment" do
|
272
|
-
r.element :vehicle do
|
273
|
-
r.comment "Year of manufacture"
|
274
|
-
r.element :year
|
275
|
-
end
|
276
|
-
resulting_xml.should ==
|
277
|
-
%(<vehicle><!-- Year of manufacture --><year>1959</year></vehicle>)
|
278
|
-
end
|
279
|
-
|
280
|
-
end
|
281
|
-
|
282
|
-
end
|
283
|
-
|
21
|
+
it_should_behave_like "an XML Representative"
|
22
|
+
|
284
23
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: representative
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Mike Williams
|
@@ -15,13 +15,11 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-11-16 00:00:00 +11:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
23
|
-
prerelease: false
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
22
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
23
|
none: false
|
26
24
|
requirements:
|
27
25
|
- - ">="
|
@@ -32,12 +30,12 @@ dependencies:
|
|
32
30
|
- 2
|
33
31
|
- 2
|
34
32
|
version: 2.2.2
|
33
|
+
requirement: *id001
|
35
34
|
type: :runtime
|
36
|
-
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: i18n
|
35
|
+
name: activesupport
|
39
36
|
prerelease: false
|
40
|
-
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
41
39
|
none: false
|
42
40
|
requirements:
|
43
41
|
- - ">="
|
@@ -48,12 +46,12 @@ dependencies:
|
|
48
46
|
- 4
|
49
47
|
- 1
|
50
48
|
version: 0.4.1
|
49
|
+
requirement: *id002
|
51
50
|
type: :runtime
|
52
|
-
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: builder
|
51
|
+
name: i18n
|
55
52
|
prerelease: false
|
56
|
-
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
57
55
|
none: false
|
58
56
|
requirements:
|
59
57
|
- - ">="
|
@@ -64,12 +62,12 @@ dependencies:
|
|
64
62
|
- 1
|
65
63
|
- 2
|
66
64
|
version: 2.1.2
|
65
|
+
requirement: *id003
|
67
66
|
type: :runtime
|
68
|
-
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: json
|
67
|
+
name: builder
|
71
68
|
prerelease: false
|
72
|
-
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
73
71
|
none: false
|
74
72
|
requirements:
|
75
73
|
- - ">="
|
@@ -80,12 +78,12 @@ dependencies:
|
|
80
78
|
- 4
|
81
79
|
- 5
|
82
80
|
version: 1.4.5
|
81
|
+
requirement: *id004
|
83
82
|
type: :runtime
|
84
|
-
|
85
|
-
- !ruby/object:Gem::Dependency
|
86
|
-
name: rake
|
83
|
+
name: json
|
87
84
|
prerelease: false
|
88
|
-
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
89
87
|
none: false
|
90
88
|
requirements:
|
91
89
|
- - ~>
|
@@ -96,12 +94,12 @@ dependencies:
|
|
96
94
|
- 8
|
97
95
|
- 7
|
98
96
|
version: 0.8.7
|
97
|
+
requirement: *id005
|
99
98
|
type: :development
|
100
|
-
|
101
|
-
- !ruby/object:Gem::Dependency
|
102
|
-
name: rspec
|
99
|
+
name: rake
|
103
100
|
prerelease: false
|
104
|
-
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
105
103
|
none: false
|
106
104
|
requirements:
|
107
105
|
- - ~>
|
@@ -112,28 +110,43 @@ dependencies:
|
|
112
110
|
- 3
|
113
111
|
- 0
|
114
112
|
version: 1.3.0
|
113
|
+
requirement: *id006
|
115
114
|
type: :development
|
116
|
-
|
117
|
-
- !ruby/object:Gem::Dependency
|
118
|
-
name: yard
|
115
|
+
name: rspec
|
119
116
|
prerelease: false
|
120
|
-
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
121
119
|
none: false
|
122
120
|
requirements:
|
123
|
-
- -
|
121
|
+
- - ">="
|
124
122
|
- !ruby/object:Gem::Version
|
125
|
-
hash:
|
123
|
+
hash: 25
|
126
124
|
segments:
|
127
125
|
- 0
|
128
|
-
-
|
129
|
-
|
130
|
-
|
126
|
+
- 9
|
127
|
+
version: "0.9"
|
128
|
+
requirement: *id007
|
131
129
|
type: :development
|
132
|
-
|
130
|
+
name: tilt
|
131
|
+
prerelease: false
|
133
132
|
- !ruby/object:Gem::Dependency
|
134
|
-
|
133
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
134
|
+
none: false
|
135
|
+
requirements:
|
136
|
+
- - ~>
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
hash: 3
|
139
|
+
segments:
|
140
|
+
- 1
|
141
|
+
- 4
|
142
|
+
- 2
|
143
|
+
version: 1.4.2
|
144
|
+
requirement: *id008
|
145
|
+
type: :development
|
146
|
+
name: nokogiri
|
135
147
|
prerelease: false
|
136
|
-
|
148
|
+
- !ruby/object:Gem::Dependency
|
149
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
137
150
|
none: false
|
138
151
|
requirements:
|
139
152
|
- - ">="
|
@@ -142,8 +155,10 @@ dependencies:
|
|
142
155
|
segments:
|
143
156
|
- 0
|
144
157
|
version: "0"
|
158
|
+
requirement: *id009
|
145
159
|
type: :development
|
146
|
-
|
160
|
+
name: diff-lcs
|
161
|
+
prerelease: false
|
147
162
|
description:
|
148
163
|
email: mdub@dogbiscuit.org
|
149
164
|
executables: []
|
@@ -153,10 +168,13 @@ extensions: []
|
|
153
168
|
extra_rdoc_files: []
|
154
169
|
|
155
170
|
files:
|
171
|
+
- lib/representative/abstract_xml.rb
|
156
172
|
- lib/representative/base.rb
|
157
173
|
- lib/representative/empty.rb
|
158
174
|
- lib/representative/json.rb
|
175
|
+
- lib/representative/nokogiri.rb
|
159
176
|
- lib/representative/object_inspector.rb
|
177
|
+
- lib/representative/tilt_integration.rb
|
160
178
|
- lib/representative/version.rb
|
161
179
|
- lib/representative/xml.rb
|
162
180
|
- lib/representative.rb
|
@@ -165,6 +183,9 @@ files:
|
|
165
183
|
- README.markdown
|
166
184
|
- LICENSE
|
167
185
|
- spec/representative/json_spec.rb
|
186
|
+
- spec/representative/nokogiri_spec.rb
|
187
|
+
- spec/representative/tilt_integration_spec.rb
|
188
|
+
- spec/representative/xml_behaviour.rb
|
168
189
|
- spec/representative/xml_spec.rb
|
169
190
|
- spec/spec_helper.rb
|
170
191
|
- Rakefile
|
@@ -204,6 +225,9 @@ specification_version: 3
|
|
204
225
|
summary: Builds XML and JSON representations of your Ruby objects
|
205
226
|
test_files:
|
206
227
|
- spec/representative/json_spec.rb
|
228
|
+
- spec/representative/nokogiri_spec.rb
|
229
|
+
- spec/representative/tilt_integration_spec.rb
|
230
|
+
- spec/representative/xml_behaviour.rb
|
207
231
|
- spec/representative/xml_spec.rb
|
208
232
|
- spec/spec_helper.rb
|
209
233
|
- Rakefile
|