in_json 0.0.2 → 0.0.3

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
data/in_json.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{in_json}
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Henry Hsu"]
12
- s.date = %q{2011-03-11}
12
+ s.date = %q{2011-05-23}
13
13
  s.description = %q{JSON serialization for Rails. Straight-forward attributes. Only serialize what you want. Optimally obeys eager-loaded associations}
14
14
  s.email = %q{henry.hsu@photomugs.com}
15
15
  s.extra_rdoc_files = [
@@ -34,7 +34,7 @@ Gem::Specification.new do |s|
34
34
  s.homepage = %q{http://github.com/hsume2/in_json}
35
35
  s.licenses = ["MIT"]
36
36
  s.require_paths = ["lib"]
37
- s.rubygems_version = %q{1.3.7}
37
+ s.rubygems_version = %q{1.5.0}
38
38
  s.summary = %q{Optimally straight-forward JSON serialization for Rails}
39
39
  s.test_files = [
40
40
  "spec/in_json_spec.rb",
@@ -42,7 +42,6 @@ Gem::Specification.new do |s|
42
42
  ]
43
43
 
44
44
  if s.respond_to? :specification_version then
45
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
46
45
  s.specification_version = 3
47
46
 
48
47
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
data/lib/in_json.rb CHANGED
@@ -80,16 +80,27 @@ module InJson
80
80
 
81
81
  protected
82
82
 
83
+ # TODO move precedence to doc
83
84
  def in_json_definition(name, injected_definition)
84
85
  definitions = self.class.read_inheritable_attribute(:in_json_definitions)
86
+
87
+ # Try nested first (if I am nested)
88
+ return injected_definition if injected_definition.kind_of?(Hash)
89
+
90
+ # Try named second
91
+ injected_definition.kind_of?(Symbol) && definitions && result = definitions[injected_definition]
92
+ return result if result
93
+
94
+ # Try thread third
85
95
  thread_definition = Thread.current[:in_json_definition]
86
96
  thread_definition && definitions && result = definitions[thread_definition]
87
97
  return result if result # *yuck*
88
- injected_definition.kind_of?(Symbol) && definitions && result = definitions[injected_definition]
89
- return result if result
90
- return injected_definition if injected_definition.kind_of?(Hash)
98
+
99
+ # Try given definitions fourth
91
100
  definitions && result = definitions[name]
92
101
  return result if result
102
+
103
+ # Try default last
93
104
  return definitions && definitions[:default]
94
105
  end
95
106
  end
data/spec/in_json_spec.rb CHANGED
@@ -48,6 +48,15 @@ class User < ActiveRecord::Base
48
48
  end
49
49
  end
50
50
 
51
+ in_json(:with_posts_and_comments_nested) do
52
+ posts do
53
+ title
54
+ comments do
55
+ content
56
+ end
57
+ end
58
+ end
59
+
51
60
  in_json(:with_posts_and_comments_named) do
52
61
  posts do
53
62
  title
@@ -104,6 +113,14 @@ class Comment < ActiveRecord::Base
104
113
  in_json(:only_approved) do
105
114
  approved
106
115
  end
116
+
117
+ in_json(:with_posts_and_comments_nested) do
118
+ approved
119
+ end
120
+
121
+ in_json(:with_posts_and_comments_named) do # Just to counter-act collission
122
+ content
123
+ end
107
124
  end
108
125
 
109
126
  class Review < ActiveRecord::Base
@@ -184,6 +201,17 @@ describe InJson do
184
201
  }
185
202
  end
186
203
 
204
+ it "should return model in json with posts and comments nested via Thread" do
205
+ InJson.with(:with_posts_and_comments_nested) do
206
+ @user.in_json.should == {
207
+ :posts => [
208
+ { :title => 'Hello World!', :comments=>[{:content=>"Great blog!"}] },
209
+ { :title => 'Hello World!', :comments=>[] }
210
+ ]
211
+ }
212
+ end
213
+ end
214
+
187
215
  it "should return model in json with posts and comments named" do
188
216
  @user.in_json(:with_posts_and_comments_named).should == {
189
217
  :posts => [
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: in_json
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease: false
4
+ hash: 25
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Henry Hsu
@@ -15,12 +15,10 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-11 00:00:00 -08:00
18
+ date: 2011-05-23 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- prerelease: false
23
- type: :runtime
24
22
  name: activerecord
25
23
  version_requirements: &id001 !ruby/object:Gem::Requirement
26
24
  none: false
@@ -33,10 +31,10 @@ dependencies:
33
31
  - 3
34
32
  - 8
35
33
  version: 2.3.8
36
- requirement: *id001
37
- - !ruby/object:Gem::Dependency
38
34
  prerelease: false
39
35
  type: :runtime
36
+ requirement: *id001
37
+ - !ruby/object:Gem::Dependency
40
38
  name: activesupport
41
39
  version_requirements: &id002 !ruby/object:Gem::Requirement
42
40
  none: false
@@ -49,10 +47,10 @@ dependencies:
49
47
  - 3
50
48
  - 8
51
49
  version: 2.3.8
52
- requirement: *id002
53
- - !ruby/object:Gem::Dependency
54
50
  prerelease: false
55
51
  type: :runtime
52
+ requirement: *id002
53
+ - !ruby/object:Gem::Dependency
56
54
  name: json
57
55
  version_requirements: &id003 !ruby/object:Gem::Requirement
58
56
  none: false
@@ -63,10 +61,10 @@ dependencies:
63
61
  segments:
64
62
  - 0
65
63
  version: "0"
64
+ prerelease: false
65
+ type: :runtime
66
66
  requirement: *id003
67
67
  - !ruby/object:Gem::Dependency
68
- prerelease: false
69
- type: :development
70
68
  name: rspec
71
69
  version_requirements: &id004 !ruby/object:Gem::Requirement
72
70
  none: false
@@ -79,10 +77,10 @@ dependencies:
79
77
  - 3
80
78
  - 0
81
79
  version: 2.3.0
82
- requirement: *id004
83
- - !ruby/object:Gem::Dependency
84
80
  prerelease: false
85
81
  type: :development
82
+ requirement: *id004
83
+ - !ruby/object:Gem::Dependency
86
84
  name: yard
87
85
  version_requirements: &id005 !ruby/object:Gem::Requirement
88
86
  none: false
@@ -95,10 +93,10 @@ dependencies:
95
93
  - 6
96
94
  - 0
97
95
  version: 0.6.0
98
- requirement: *id005
99
- - !ruby/object:Gem::Dependency
100
96
  prerelease: false
101
97
  type: :development
98
+ requirement: *id005
99
+ - !ruby/object:Gem::Dependency
102
100
  name: bundler
103
101
  version_requirements: &id006 !ruby/object:Gem::Requirement
104
102
  none: false
@@ -111,10 +109,10 @@ dependencies:
111
109
  - 0
112
110
  - 0
113
111
  version: 1.0.0
114
- requirement: *id006
115
- - !ruby/object:Gem::Dependency
116
112
  prerelease: false
117
113
  type: :development
114
+ requirement: *id006
115
+ - !ruby/object:Gem::Dependency
118
116
  name: jeweler
119
117
  version_requirements: &id007 !ruby/object:Gem::Requirement
120
118
  none: false
@@ -127,10 +125,10 @@ dependencies:
127
125
  - 5
128
126
  - 2
129
127
  version: 1.5.2
130
- requirement: *id007
131
- - !ruby/object:Gem::Dependency
132
128
  prerelease: false
133
129
  type: :development
130
+ requirement: *id007
131
+ - !ruby/object:Gem::Dependency
134
132
  name: rcov
135
133
  version_requirements: &id008 !ruby/object:Gem::Requirement
136
134
  none: false
@@ -141,10 +139,10 @@ dependencies:
141
139
  segments:
142
140
  - 0
143
141
  version: "0"
144
- requirement: *id008
145
- - !ruby/object:Gem::Dependency
146
142
  prerelease: false
147
143
  type: :development
144
+ requirement: *id008
145
+ - !ruby/object:Gem::Dependency
148
146
  name: reek
149
147
  version_requirements: &id009 !ruby/object:Gem::Requirement
150
148
  none: false
@@ -157,10 +155,10 @@ dependencies:
157
155
  - 2
158
156
  - 8
159
157
  version: 1.2.8
160
- requirement: *id009
161
- - !ruby/object:Gem::Dependency
162
158
  prerelease: false
163
159
  type: :development
160
+ requirement: *id009
161
+ - !ruby/object:Gem::Dependency
164
162
  name: roodi
165
163
  version_requirements: &id010 !ruby/object:Gem::Requirement
166
164
  none: false
@@ -173,10 +171,10 @@ dependencies:
173
171
  - 1
174
172
  - 0
175
173
  version: 2.1.0
176
- requirement: *id010
177
- - !ruby/object:Gem::Dependency
178
174
  prerelease: false
179
175
  type: :development
176
+ requirement: *id010
177
+ - !ruby/object:Gem::Dependency
180
178
  name: autotest
181
179
  version_requirements: &id011 !ruby/object:Gem::Requirement
182
180
  none: false
@@ -187,10 +185,10 @@ dependencies:
187
185
  segments:
188
186
  - 0
189
187
  version: "0"
190
- requirement: *id011
191
- - !ruby/object:Gem::Dependency
192
188
  prerelease: false
193
189
  type: :development
190
+ requirement: *id011
191
+ - !ruby/object:Gem::Dependency
194
192
  name: sqlite3
195
193
  version_requirements: &id012 !ruby/object:Gem::Requirement
196
194
  none: false
@@ -201,10 +199,10 @@ dependencies:
201
199
  segments:
202
200
  - 0
203
201
  version: "0"
204
- requirement: *id012
205
- - !ruby/object:Gem::Dependency
206
202
  prerelease: false
207
203
  type: :development
204
+ requirement: *id012
205
+ - !ruby/object:Gem::Dependency
208
206
  name: rspec-rails
209
207
  version_requirements: &id013 !ruby/object:Gem::Requirement
210
208
  none: false
@@ -215,10 +213,10 @@ dependencies:
215
213
  segments:
216
214
  - 0
217
215
  version: "0"
218
- requirement: *id013
219
- - !ruby/object:Gem::Dependency
220
216
  prerelease: false
221
217
  type: :development
218
+ requirement: *id013
219
+ - !ruby/object:Gem::Dependency
222
220
  name: database_cleaner
223
221
  version_requirements: &id014 !ruby/object:Gem::Requirement
224
222
  none: false
@@ -229,6 +227,8 @@ dependencies:
229
227
  segments:
230
228
  - 0
231
229
  version: "0"
230
+ prerelease: false
231
+ type: :development
232
232
  requirement: *id014
233
233
  description: JSON serialization for Rails. Straight-forward attributes. Only serialize what you want. Optimally obeys eager-loaded associations
234
234
  email: henry.hsu@photomugs.com
@@ -283,7 +283,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
283
283
  requirements: []
284
284
 
285
285
  rubyforge_project:
286
- rubygems_version: 1.3.7
286
+ rubygems_version: 1.5.0
287
287
  signing_key:
288
288
  specification_version: 3
289
289
  summary: Optimally straight-forward JSON serialization for Rails