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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c0b3d54f6eddfdffc490d03bd3ca9e425fb3070d
4
- data.tar.gz: 8a27c77c19e6aca44dacd7d566f48069c3289e14
3
+ metadata.gz: e143b7fe62f2f26f3cb2a822b3187dcf4fbb02e2
4
+ data.tar.gz: 104e8408636364ced72db027c4d612890934019c
5
5
  SHA512:
6
- metadata.gz: f2c478c82bd37af05ef29e02cdc622d8ac6d04482d8c0a538617d60bfa55ef98e487496243cf9c8041d81661e403187411ffef8daf6610923fae510211c54a9f
7
- data.tar.gz: 953b99cc7190836866bd5350c03894d3cb57e4a65dcaea29c1d18449e4c31ff866ad370ce3c0e79aeef2c6fb8bc3bbe5915f1d408fdcecf5ea4385b6522e6a90
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
- ### Using data object
438
+ ### Conditional
439
439
 
440
- You can get the data object as a second block parameter.
440
+ You can use `if:` and `unless:` options.
441
441
 
442
442
  ```ruby
443
443
  Jsonity.build { |t|
444
- t[].people!(@people) { |person, person_obj|
445
- unless person_obj.private_member?
446
- person.name
447
- person.age
448
- end
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
- person.cv if person_obj.looking_for_job?
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
  ```
@@ -4,11 +4,11 @@ module Jsonity
4
4
  ###
5
5
  # Build Jsonity
6
6
  #
7
- # @params {any} object - [optional]
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 {any} object
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 {any} obj - [optional]
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, @object
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 {any}
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 {[any]} *args
242
+ # @params {Array<Object>} *args
222
243
  #
223
- # @return {any}
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
@@ -1,3 +1,9 @@
1
1
  module Jsonity
2
- VERSION = '1.0.8'
2
+
3
+ MAJOR = 1
4
+ MINOR = 1
5
+ REVISION = 0
6
+
7
+ VERSION = [MAJOR, MINOR, REVISION].compact.join '.'
8
+
3
9
  end
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.8
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-04 00:00:00.000000000 Z
11
+ date: 2014-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler