in_json 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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