jsonity 1.0.8 → 1.1.0
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/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
|