jsonity 1.0.8 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +24 -8
- data/lib/jsonity/builder.rb +61 -18
- data/lib/jsonity/version.rb +7 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e143b7fe62f2f26f3cb2a822b3187dcf4fbb02e2
|
4
|
+
data.tar.gz: 104e8408636364ced72db027c4d612890934019c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64a51ab45373c8d4fa38593dfbc7dba6a8d1900d4b1544bada32dfc7d55df3a1cbb2d95e83fe17b00eaace5e99a7aac6a48f67e4964115ec4acaf9efdad107df
|
7
|
+
data.tar.gz: e5a980b2de32ca4fe8f66a92f4fa849c6002f6470490f00d2a4670bfc9f91e33b0f55a0d4bb3623137b0d2cdf950c187b222ea003369e98160ff6202fad4b60f
|
data/README.md
CHANGED
@@ -435,19 +435,35 @@ Notice that two objects `meta!` got merged.
|
|
435
435
|
```
|
436
436
|
|
437
437
|
|
438
|
-
###
|
438
|
+
### Conditional
|
439
439
|
|
440
|
-
You can
|
440
|
+
You can use `if:` and `unless:` options.
|
441
441
|
|
442
442
|
```ruby
|
443
443
|
Jsonity.build { |t|
|
444
|
-
t[].people!(@people) { |person
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
444
|
+
t[].people!(@people) { |person|
|
445
|
+
# if:
|
446
|
+
person.cv!(if: &:looking_for_job?) { |cv|
|
447
|
+
cv.title
|
448
|
+
cv.download_link
|
449
|
+
}
|
450
|
+
|
451
|
+
# unless:
|
452
|
+
person.name unless: &:anonymous?
|
453
|
+
}
|
454
|
+
}
|
455
|
+
```
|
449
456
|
|
450
|
-
|
457
|
+
|
458
|
+
### Getting data object
|
459
|
+
|
460
|
+
You can get the data object by calling `get`.
|
461
|
+
|
462
|
+
```ruby
|
463
|
+
Jsonity.build { |t|
|
464
|
+
t[].people!(@people) { |person|
|
465
|
+
# debugging object
|
466
|
+
p person.get
|
451
467
|
}
|
452
468
|
}
|
453
469
|
```
|
data/lib/jsonity/builder.rb
CHANGED
@@ -4,11 +4,11 @@ module Jsonity
|
|
4
4
|
###
|
5
5
|
# Build Jsonity
|
6
6
|
#
|
7
|
-
# @params {
|
8
|
-
# @params {Hash | nil} content - [optional]
|
7
|
+
# @params {Object} object - [optional]
|
8
|
+
# @params {Hash<Object, Object> | nil} content - [optional]
|
9
9
|
# @block
|
10
10
|
#
|
11
|
-
# @return {Hash} - json object
|
11
|
+
# @return {Hash<String, Object>} - json object
|
12
12
|
###
|
13
13
|
def self.build(object = nil, content = nil, &block)
|
14
14
|
content = {} unless content.is_a?(::Hash)
|
@@ -29,8 +29,8 @@ module Jsonity
|
|
29
29
|
###
|
30
30
|
# Initializer
|
31
31
|
#
|
32
|
-
# @params {
|
33
|
-
# @params {Hash | nil} content
|
32
|
+
# @params {Object} object
|
33
|
+
# @params {Hash<Object, Object> | nil} content
|
34
34
|
###
|
35
35
|
def initialize(object, content)
|
36
36
|
@object, @content = object, content
|
@@ -39,11 +39,22 @@ module Jsonity
|
|
39
39
|
|
40
40
|
###
|
41
41
|
# Set `obj` for the object
|
42
|
+
#
|
43
|
+
# @return {Object}
|
42
44
|
###
|
43
45
|
def <=(obj)
|
44
46
|
@object = obj
|
45
47
|
end
|
46
48
|
|
49
|
+
###
|
50
|
+
# Get the object
|
51
|
+
#
|
52
|
+
# @return {Object}
|
53
|
+
###
|
54
|
+
def get
|
55
|
+
@object
|
56
|
+
end
|
57
|
+
|
47
58
|
###
|
48
59
|
# Create array context
|
49
60
|
#
|
@@ -57,21 +68,21 @@ module Jsonity
|
|
57
68
|
###
|
58
69
|
# Mixin / Scoping
|
59
70
|
#
|
60
|
-
# @params {
|
71
|
+
# @params {Object} obj - [optional]
|
61
72
|
# @block
|
62
73
|
###
|
63
74
|
def call(obj = nil, &block)
|
64
75
|
if obj
|
65
76
|
Builder.build obj, @content, &block
|
66
77
|
else
|
67
|
-
block_call block, self
|
78
|
+
block_call block, self
|
68
79
|
end
|
69
80
|
end
|
70
81
|
|
71
82
|
###
|
72
83
|
# Getter for `@content`
|
73
84
|
#
|
74
|
-
# @return {Hash | nil}
|
85
|
+
# @return {Hash<Object, Object> | nil}
|
75
86
|
###
|
76
87
|
def _content
|
77
88
|
evaluate_array_blocks!
|
@@ -83,6 +94,10 @@ module Jsonity
|
|
83
94
|
|
84
95
|
###
|
85
96
|
# Handle ghost methods
|
97
|
+
#
|
98
|
+
# @params {Symbol} name
|
99
|
+
# @params {Array<Object>} args
|
100
|
+
# @block block - [optional]
|
86
101
|
###
|
87
102
|
def method_missing(name, *args, &block)
|
88
103
|
name = name.to_s
|
@@ -116,10 +131,12 @@ module Jsonity
|
|
116
131
|
# Create attribute node
|
117
132
|
#
|
118
133
|
# @params {String} name
|
119
|
-
# @params {Hash} options
|
120
|
-
# @block - [optional]
|
134
|
+
# @params {Hash<Symbol, Object>} options
|
135
|
+
# @block block - [optional]
|
121
136
|
###
|
122
137
|
def attribute(name, options, &block)
|
138
|
+
return unless on_condition options
|
139
|
+
|
123
140
|
obj = get_object_for name, options
|
124
141
|
|
125
142
|
value = block ? block_call(block, options[:_object] || @object) : obj
|
@@ -130,10 +147,12 @@ module Jsonity
|
|
130
147
|
# Create hash node
|
131
148
|
#
|
132
149
|
# @params {String} name
|
133
|
-
# @params {Hash} options
|
134
|
-
# @block - [optional]
|
150
|
+
# @params {Hash<Symbol, Object>} options
|
151
|
+
# @block block - [optional]
|
135
152
|
###
|
136
153
|
def hash(name, options, &block)
|
154
|
+
return unless on_condition options
|
155
|
+
|
137
156
|
obj = get_object_for name, options
|
138
157
|
|
139
158
|
if options[:_nullable] && !obj
|
@@ -149,10 +168,12 @@ module Jsonity
|
|
149
168
|
# Create array node
|
150
169
|
#
|
151
170
|
# @params {String} name
|
152
|
-
# @params {Hash} options
|
153
|
-
# @block
|
171
|
+
# @params {Hash<Symbol, Object>} options
|
172
|
+
# @block block - [optional]
|
154
173
|
###
|
155
174
|
def array(name, options, &block)
|
175
|
+
return unless on_condition options
|
176
|
+
|
156
177
|
block ||= ->(t) {}
|
157
178
|
|
158
179
|
if (deferred = @deferred_array_blocks[name])
|
@@ -200,9 +221,9 @@ module Jsonity
|
|
200
221
|
# Get object
|
201
222
|
#
|
202
223
|
# @params {String} name
|
203
|
-
# @params {Hash} options
|
224
|
+
# @params {Hash<Symbol, Object>} options
|
204
225
|
#
|
205
|
-
# @return {
|
226
|
+
# @return {Object}
|
206
227
|
###
|
207
228
|
def get_object_for(name, options)
|
208
229
|
if options[:_object]
|
@@ -218,9 +239,9 @@ module Jsonity
|
|
218
239
|
# Arity safe proc call
|
219
240
|
#
|
220
241
|
# @params {Proc} block
|
221
|
-
# @params {
|
242
|
+
# @params {Array<Object>} *args
|
222
243
|
#
|
223
|
-
# @return {
|
244
|
+
# @return {Object}
|
224
245
|
###
|
225
246
|
def block_call(block, *args)
|
226
247
|
::Kernel.raise RequiredBlockError.new('No block') unless block
|
@@ -228,5 +249,27 @@ module Jsonity
|
|
228
249
|
block.call *args.first(block.arity.abs)
|
229
250
|
end
|
230
251
|
|
252
|
+
###
|
253
|
+
# On condition
|
254
|
+
#
|
255
|
+
# @params {Hash<Symbol, Object>} options
|
256
|
+
# @params {Object} obj
|
257
|
+
###
|
258
|
+
def on_condition(options, obj = @object)
|
259
|
+
o_if, o_unless = options[:if], options[:unless]
|
260
|
+
|
261
|
+
flag = true
|
262
|
+
|
263
|
+
unless o_if.nil?
|
264
|
+
flag &&= o_if.is_a?(::Proc) ? block_call(o_if, obj) : o_if
|
265
|
+
end
|
266
|
+
|
267
|
+
unless o_unless.nil?
|
268
|
+
flag &&= !(o_unless.is_a?(::Proc) ? block_call(o_unless, obj) : o_unless)
|
269
|
+
end
|
270
|
+
|
271
|
+
flag
|
272
|
+
end
|
273
|
+
|
231
274
|
end
|
232
275
|
end
|
data/lib/jsonity/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsonity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuki Iwanaga
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|