jsonity 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/jsonity/attribute.rb +2 -0
- data/lib/jsonity/builder.rb +36 -11
- data/lib/jsonity/rails.rb +5 -2
- data/lib/jsonity/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2659fcf6db5641ea0b6dbf288e14562dcd57cc6
|
4
|
+
data.tar.gz: 87eea35053efa6c0f1b5dc7ec4ae5a6185ff22b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97c515d3530a9922573f0cc1902739aa5e5876f248c0b2ad3d345fb67cf9860c22a6a4100d30ebdb966626af45470ea2bf8725291c015c76ad62aa0ef4469f97
|
7
|
+
data.tar.gz: 8db7d2049b3996e47c7c7c57075edbb6321596f9ddef05b6a801a94eab698b3e7420bdb4895885eabeab7c01235069c4bb4e66b556a68e9844359788d43c120d
|
data/lib/jsonity/attribute.rb
CHANGED
data/lib/jsonity/builder.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'set'
|
2
|
-
|
3
1
|
module Jsonity
|
4
2
|
class Builder < BasicObject
|
5
3
|
|
@@ -32,6 +30,7 @@ module Jsonity
|
|
32
30
|
###
|
33
31
|
def initialize(object, content)
|
34
32
|
@object, @content = object, content
|
33
|
+
@deferred_array_blocks = {}
|
35
34
|
end
|
36
35
|
|
37
36
|
###
|
@@ -42,7 +41,7 @@ module Jsonity
|
|
42
41
|
end
|
43
42
|
|
44
43
|
###
|
45
|
-
#
|
44
|
+
# Create array context
|
46
45
|
#
|
47
46
|
# @return {Jsonity::Builder} - `self`
|
48
47
|
###
|
@@ -74,7 +73,7 @@ module Jsonity
|
|
74
73
|
def method_missing(name, *args, &block)
|
75
74
|
name = name.to_s
|
76
75
|
is_object = name.match OBJECT_SUFFIX
|
77
|
-
name = name[0..-2] if is_object
|
76
|
+
name, is_object = name[0..-2], is_object[0] if is_object
|
78
77
|
|
79
78
|
options = args.last.is_a?(::Hash) ? args.pop : {}
|
80
79
|
options[:_object] = args[0]
|
@@ -105,6 +104,7 @@ module Jsonity
|
|
105
104
|
# @return {Hash | nil}
|
106
105
|
###
|
107
106
|
def content
|
107
|
+
evaluate_array_blocks!
|
108
108
|
@content
|
109
109
|
end
|
110
110
|
|
@@ -148,24 +148,49 @@ module Jsonity
|
|
148
148
|
# @block
|
149
149
|
###
|
150
150
|
def array(name, options, &block)
|
151
|
+
::Kernel.raise RequiredBlockError.new('No block') unless block
|
152
|
+
|
153
|
+
if (deferred = @deferred_array_blocks[name])
|
154
|
+
deferred[:blocks] << block
|
155
|
+
return
|
156
|
+
end
|
157
|
+
|
151
158
|
obj = get_object_for name, options
|
152
159
|
|
153
160
|
is_array = obj && obj.class < ::Enumerable
|
154
161
|
|
155
162
|
if !is_array && options[:_nullable]
|
156
163
|
@content[name] ||= nil
|
157
|
-
|
164
|
+
else
|
165
|
+
@content[name] = [] unless @content[name].is_a?(::Array)
|
158
166
|
end
|
159
167
|
|
160
|
-
@content[name] = [] unless @content[name].is_a?(::Array)
|
161
|
-
ary = @content[name]
|
162
|
-
|
163
168
|
if is_array
|
164
|
-
|
165
|
-
|
166
|
-
|
169
|
+
@deferred_array_blocks[name] = {
|
170
|
+
obj: obj,
|
171
|
+
blocks: [block],
|
172
|
+
}
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
###
|
177
|
+
# Evaluate all deferred blocks of array nodes,
|
178
|
+
# and reset block stack
|
179
|
+
###
|
180
|
+
def evaluate_array_blocks!
|
181
|
+
@deferred_array_blocks.each do |name, d|
|
182
|
+
next unless d[:obj]
|
183
|
+
|
184
|
+
ary = @content[name]
|
185
|
+
|
186
|
+
d[:obj].each.with_index do |a, i|
|
187
|
+
d[:blocks].each do |block|
|
188
|
+
ary[i] = Builder.build a, ary[i], &block
|
189
|
+
end
|
167
190
|
end
|
168
191
|
end
|
192
|
+
|
193
|
+
@deferred_array_blocks = {}
|
169
194
|
end
|
170
195
|
|
171
196
|
###
|
data/lib/jsonity/rails.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
module ActionController
|
2
2
|
class Base
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
protected
|
5
|
+
|
6
|
+
def render_json(*args, &block)
|
7
|
+
options = args.extract_options!
|
8
|
+
json = Jsonity::Builder.build args[0], &block
|
6
9
|
options[:json] = json
|
7
10
|
render options
|
8
11
|
end
|
data/lib/jsonity/version.rb
CHANGED