representative 0.3.4 → 0.3.5

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.
@@ -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: