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)|
@@ -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
@@ -104,7 +104,7 @@ module Representative
104
104
  def label(name)
105
105
  return false if @indent_level == 0
106
106
  new_item
107
- emit("#{name.to_s.to_json}: ")
107
+ emit("#{format_name(name).to_json}: ")
108
108
  end
109
109
 
110
110
  def new_item
@@ -1,3 +1,3 @@
1
1
  module Representative
2
- VERSION = "0.3.4".freeze
2
+ VERSION = "0.3.5".freeze
3
3
  end
@@ -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(:name => "Fred", :width => 200, :vehicle => OpenStruct.new(:year => "1959", :make => "Chevrolet"))
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.4
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: