jsonity 1.0.1 → 1.0.2
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.
- 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