representative 0.3.4 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
@@ -5,8 +5,10 @@ module Representative
|
|
5
5
|
class AbstractXml < Base
|
6
6
|
|
7
7
|
def initialize(subject = nil, options = {})
|
8
|
+
unless options.has_key?(:naming_strategy)
|
9
|
+
options = options.merge!(:naming_strategy => :dasherize)
|
10
|
+
end
|
8
11
|
super(subject, options)
|
9
|
-
@naming_strategy = options[:naming_strategy] || :dasherize
|
10
12
|
end
|
11
13
|
|
12
14
|
# Generate an element.
|
@@ -120,22 +122,6 @@ module Representative
|
|
120
122
|
|
121
123
|
private
|
122
124
|
|
123
|
-
attr_reader :naming_strategy
|
124
|
-
|
125
|
-
def format_name(name)
|
126
|
-
name = name.to_s
|
127
|
-
case naming_strategy
|
128
|
-
when :camelcase
|
129
|
-
name.camelcase(:lower)
|
130
|
-
when :dasherize
|
131
|
-
name.dasherize
|
132
|
-
when Symbol
|
133
|
-
name.send(naming_strategy)
|
134
|
-
else
|
135
|
-
naming_strategy.to_proc.call(name)
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
125
|
def resolve_attributes(attributes)
|
140
126
|
if attributes
|
141
127
|
attributes.inject({}) do |resolved, (name, value_generator)|
|
data/lib/representative/base.rb
CHANGED
@@ -7,7 +7,7 @@ module Representative
|
|
7
7
|
def initialize(subject = nil, options = {})
|
8
8
|
@subjects = [subject]
|
9
9
|
@inspector = options[:inspector] || ObjectInspector.new
|
10
|
-
@naming_strategy = options[:naming_strategy]
|
10
|
+
@naming_strategy = options[:naming_strategy] || :plain
|
11
11
|
end
|
12
12
|
|
13
13
|
# Return the current "subject" of representation.
|
@@ -50,6 +50,20 @@ module Representative
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
+
def format_name(name)
|
54
|
+
name = name.to_s
|
55
|
+
case @naming_strategy
|
56
|
+
when :plain
|
57
|
+
name
|
58
|
+
when :camelcase, :camelCase
|
59
|
+
name.camelcase(:lower)
|
60
|
+
when Symbol
|
61
|
+
name.send(@naming_strategy)
|
62
|
+
else
|
63
|
+
@naming_strategy.to_proc.call(name)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
53
67
|
end
|
54
68
|
|
55
|
-
end
|
69
|
+
end
|
data/lib/representative/json.rb
CHANGED
@@ -4,8 +4,8 @@ require "representative/json"
|
|
4
4
|
|
5
5
|
describe Representative::Json do
|
6
6
|
|
7
|
-
def r
|
8
|
-
@representative ||= Representative::Json.new(@subject)
|
7
|
+
def r(options = {})
|
8
|
+
@representative ||= Representative::Json.new(@subject, options)
|
9
9
|
end
|
10
10
|
|
11
11
|
def resulting_json
|
@@ -319,4 +319,37 @@ describe Representative::Json do
|
|
319
319
|
|
320
320
|
end
|
321
321
|
|
322
|
+
context "by default" do
|
323
|
+
|
324
|
+
it "does not tranform element names" do
|
325
|
+
r.element :user, Object.new do
|
326
|
+
r.element :full_name, "Fred Bloggs"
|
327
|
+
end
|
328
|
+
resulting_json.should == undent(<<-JSON)
|
329
|
+
{
|
330
|
+
"full_name": "Fred Bloggs"
|
331
|
+
}
|
332
|
+
JSON
|
333
|
+
end
|
334
|
+
|
335
|
+
end
|
336
|
+
|
337
|
+
context "with naming_strategy :camelcase" do
|
338
|
+
|
339
|
+
it "generates camelCased element and attribute names" do
|
340
|
+
@user = OpenStruct.new(:full_name => "Fred Bloggs")
|
341
|
+
r(:naming_strategy => :camelcase).element :user, @user do
|
342
|
+
r.attribute :alt_url, "http://xyz.com"
|
343
|
+
r.element :full_name
|
344
|
+
end
|
345
|
+
resulting_json.should == undent(<<-JSON)
|
346
|
+
{
|
347
|
+
"@altUrl": "http://xyz.com",
|
348
|
+
"fullName": "Fred Bloggs"
|
349
|
+
}
|
350
|
+
JSON
|
351
|
+
end
|
352
|
+
|
353
|
+
end
|
354
|
+
|
322
355
|
end
|
@@ -7,14 +7,15 @@ shared_examples_for "an XML Representative" do
|
|
7
7
|
describe "for some 'subject'" do
|
8
8
|
|
9
9
|
before do
|
10
|
-
@subject = OpenStruct.new(
|
10
|
+
@subject = OpenStruct.new(
|
11
|
+
:name => "Fred",
|
12
|
+
:full_name => "Fredrick",
|
13
|
+
:width => 200,
|
14
|
+
:vehicle => OpenStruct.new(:year => "1959", :make => "Chevrolet")
|
15
|
+
)
|
11
16
|
end
|
12
17
|
|
13
18
|
describe "#element" do
|
14
|
-
|
15
|
-
before do
|
16
|
-
@subject.full_name = "Fredrick"
|
17
|
-
end
|
18
19
|
|
19
20
|
it "generates an element with content extracted from the subject" do
|
20
21
|
r.element :name
|
@@ -26,25 +27,6 @@ shared_examples_for "an XML Representative" do
|
|
26
27
|
resulting_xml.should == %(<full-name>Fredrick</full-name>)
|
27
28
|
end
|
28
29
|
|
29
|
-
context "with naming_strategy :camelcase" do
|
30
|
-
|
31
|
-
it "applies the naming strategy to produce element names" do
|
32
|
-
r(:naming_strategy => :camelcase).element :full_name
|
33
|
-
resulting_xml.should == %(<fullName>Fredrick</fullName>)
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
context "with a custom naming_strategy" do
|
39
|
-
|
40
|
-
it "applies the naming strategy to produce element names" do
|
41
|
-
biff = lambda { |name| name.upcase }
|
42
|
-
r(:naming_strategy => biff).element :full_name
|
43
|
-
resulting_xml.should == %(<FULL_NAME>Fredrick</FULL_NAME>)
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
30
|
describe "with attributes" do
|
49
31
|
|
50
32
|
it "generates attributes on the element" do
|
@@ -293,9 +275,37 @@ shared_examples_for "an XML Representative" do
|
|
293
275
|
resulting_xml.should ==
|
294
276
|
%(<vehicle><!-- Year of manufacture --><year>1959</year></vehicle>)
|
295
277
|
end
|
296
|
-
|
278
|
+
|
297
279
|
end
|
298
|
-
|
280
|
+
|
281
|
+
context "with naming_strategy :camelcase" do
|
282
|
+
|
283
|
+
it "generates camelCased element and attribute names" do
|
284
|
+
r(:naming_strategy => :camelcase).element :full_name, :foo_bar => 5
|
285
|
+
resulting_xml.should == %(<fullName fooBar="5">Fredrick</fullName>)
|
286
|
+
end
|
287
|
+
|
288
|
+
end
|
289
|
+
|
290
|
+
context "with a custom naming_strategy" do
|
291
|
+
|
292
|
+
it "generates suitably transformed names" do
|
293
|
+
biff = lambda { |name| name.upcase }
|
294
|
+
r(:naming_strategy => biff).element :full_name
|
295
|
+
resulting_xml.should == %(<FULL_NAME>Fredrick</FULL_NAME>)
|
296
|
+
end
|
297
|
+
|
298
|
+
end
|
299
|
+
|
300
|
+
context "with no naming_strategy" do
|
301
|
+
|
302
|
+
it "uses raw names" do
|
303
|
+
r(:naming_strategy => nil).element :full_name
|
304
|
+
resulting_xml.should == %(<full_name>Fredrick</full_name>)
|
305
|
+
end
|
306
|
+
|
307
|
+
end
|
308
|
+
|
299
309
|
end
|
300
310
|
|
301
311
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: representative
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.3.
|
5
|
+
version: 0.3.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Mike Williams
|
@@ -14,7 +14,6 @@ date: 2011-05-26 00:00:00 Z
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
17
|
-
prerelease: false
|
18
17
|
requirement: &id001 !ruby/object:Gem::Requirement
|
19
18
|
none: false
|
20
19
|
requirements:
|
@@ -22,10 +21,10 @@ dependencies:
|
|
22
21
|
- !ruby/object:Gem::Version
|
23
22
|
version: 2.2.2
|
24
23
|
type: :runtime
|
24
|
+
prerelease: false
|
25
25
|
version_requirements: *id001
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: i18n
|
28
|
-
prerelease: false
|
29
28
|
requirement: &id002 !ruby/object:Gem::Requirement
|
30
29
|
none: false
|
31
30
|
requirements:
|
@@ -33,10 +32,10 @@ dependencies:
|
|
33
32
|
- !ruby/object:Gem::Version
|
34
33
|
version: 0.4.1
|
35
34
|
type: :runtime
|
35
|
+
prerelease: false
|
36
36
|
version_requirements: *id002
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: builder
|
39
|
-
prerelease: false
|
40
39
|
requirement: &id003 !ruby/object:Gem::Requirement
|
41
40
|
none: false
|
42
41
|
requirements:
|
@@ -44,10 +43,10 @@ dependencies:
|
|
44
43
|
- !ruby/object:Gem::Version
|
45
44
|
version: 2.1.2
|
46
45
|
type: :runtime
|
46
|
+
prerelease: false
|
47
47
|
version_requirements: *id003
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: json
|
50
|
-
prerelease: false
|
51
50
|
requirement: &id004 !ruby/object:Gem::Requirement
|
52
51
|
none: false
|
53
52
|
requirements:
|
@@ -55,10 +54,10 @@ dependencies:
|
|
55
54
|
- !ruby/object:Gem::Version
|
56
55
|
version: 1.4.5
|
57
56
|
type: :runtime
|
57
|
+
prerelease: false
|
58
58
|
version_requirements: *id004
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: rake
|
61
|
-
prerelease: false
|
62
61
|
requirement: &id005 !ruby/object:Gem::Requirement
|
63
62
|
none: false
|
64
63
|
requirements:
|
@@ -66,10 +65,10 @@ dependencies:
|
|
66
65
|
- !ruby/object:Gem::Version
|
67
66
|
version: 0.8.7
|
68
67
|
type: :development
|
68
|
+
prerelease: false
|
69
69
|
version_requirements: *id005
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rspec
|
72
|
-
prerelease: false
|
73
72
|
requirement: &id006 !ruby/object:Gem::Requirement
|
74
73
|
none: false
|
75
74
|
requirements:
|
@@ -77,10 +76,10 @@ dependencies:
|
|
77
76
|
- !ruby/object:Gem::Version
|
78
77
|
version: 2.5.0
|
79
78
|
type: :development
|
79
|
+
prerelease: false
|
80
80
|
version_requirements: *id006
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: tilt
|
83
|
-
prerelease: false
|
84
83
|
requirement: &id007 !ruby/object:Gem::Requirement
|
85
84
|
none: false
|
86
85
|
requirements:
|
@@ -88,10 +87,10 @@ dependencies:
|
|
88
87
|
- !ruby/object:Gem::Version
|
89
88
|
version: "0.9"
|
90
89
|
type: :development
|
90
|
+
prerelease: false
|
91
91
|
version_requirements: *id007
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
93
|
name: nokogiri
|
94
|
-
prerelease: false
|
95
94
|
requirement: &id008 !ruby/object:Gem::Requirement
|
96
95
|
none: false
|
97
96
|
requirements:
|
@@ -99,10 +98,10 @@ dependencies:
|
|
99
98
|
- !ruby/object:Gem::Version
|
100
99
|
version: 1.4.2
|
101
100
|
type: :development
|
101
|
+
prerelease: false
|
102
102
|
version_requirements: *id008
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: diff-lcs
|
105
|
-
prerelease: false
|
106
105
|
requirement: &id009 !ruby/object:Gem::Requirement
|
107
106
|
none: false
|
108
107
|
requirements:
|
@@ -110,6 +109,7 @@ dependencies:
|
|
110
109
|
- !ruby/object:Gem::Version
|
111
110
|
version: "0"
|
112
111
|
type: :development
|
112
|
+
prerelease: false
|
113
113
|
version_requirements: *id009
|
114
114
|
description:
|
115
115
|
email: mdub@dogbiscuit.org
|
@@ -154,12 +154,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
154
154
|
requirements:
|
155
155
|
- - ">="
|
156
156
|
- !ruby/object:Gem::Version
|
157
|
+
hash: 4481095583233401892
|
158
|
+
segments:
|
159
|
+
- 0
|
157
160
|
version: "0"
|
158
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
162
|
none: false
|
160
163
|
requirements:
|
161
164
|
- - ">="
|
162
165
|
- !ruby/object:Gem::Version
|
166
|
+
hash: 4481095583233401892
|
167
|
+
segments:
|
168
|
+
- 0
|
163
169
|
version: "0"
|
164
170
|
requirements: []
|
165
171
|
|
@@ -176,4 +182,3 @@ test_files:
|
|
176
182
|
- spec/representative/xml_spec.rb
|
177
183
|
- spec/spec_helper.rb
|
178
184
|
- Rakefile
|
179
|
-
has_rdoc:
|