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 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