jsoning 0.6.0 → 0.7.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: 69a10f48340146f1c819bd5d038088913fdd63e8
4
- data.tar.gz: d5761009f4937cf74743679b48ffdd471bfbf3dc
3
+ metadata.gz: 5b677bf0eef2f3f5ec7b07e6132e038ab33e4111
4
+ data.tar.gz: b7db25000fd4b3473d178b7cbaf488a7412d52e3
5
5
  SHA512:
6
- metadata.gz: 6e6edba66976d8f2056c307ccb774f97259db82d3801eadb7c4540792a6e3a09d53327437c9b0fe83b1ec829d936d7b43efd4cb9d9a60deea1059398ec2f5f53
7
- data.tar.gz: a36e4c08c15083b79387d72b7f2c0b2aa116e4b3c87ab0944ebfc31ce7c600c5c4347117fd7e8811e06e2dd39241b2f8d883a1ffe5cb3deaeaa2b65d361fb88d
6
+ metadata.gz: 4ebff10b0fa858c2c787d1f5c14f658fd272e4e99fd7d74880772e23da97a6001e4780a98418a23ce101f329a94780fc71c21f12b2bf5769f8134a4fe1073417
7
+ data.tar.gz: ca07af734f5508bb36218ae69c601ee636e8f8d379b9e08666ffacb154439ec530cda86c84a795d8c8db8426549eb52aa585e61ca53009cbd2cc2b5dd860afba
data/README.md CHANGED
@@ -29,6 +29,7 @@ Or install it yourself as:
29
29
 
30
30
  1. Generating JSON from your object
31
31
  2. Generating Hash from your object
32
+ 3. Versioning the JSON/Hash result
32
33
 
33
34
  ## Assumptions
34
35
 
@@ -68,6 +69,8 @@ Say, we want to serialize User. First, we have to define the serializer for `My:
68
69
  ```ruby
69
70
  Jsoning.for(My::User) do
70
71
  key :name
72
+ # demonstrating value post-processor
73
+ key :upcase_name, from: :name, value: { |name| name.upcase }
71
74
  key :years_old, from: :age
72
75
  key :gender, default: "male"
73
76
  key :books
@@ -112,7 +115,7 @@ Jsoning(user)
112
115
  Which will return:
113
116
 
114
117
  ```json
115
- {"name":"Adam Baihaqi","years_old":21,"gender":"male","books":[{"name":"Quiet: The Power of Introvert"},{"name":"Harry Potter and the Half-Blood Prince"}],"degree_detail":null}
118
+ {"name":"Adam Baihaqi","upcase_name":"ADAM BAIHAQI","years_old":21,"gender":"male","books":[{"name":"Quiet: The Power of Introvert"},{"name":"Harry Potter and the Half-Blood Prince"}],"degree_detail":null}
116
119
  ```
117
120
 
118
121
  We can also pretty-print the value, which usually is bit slower though, by calling:
@@ -126,6 +129,7 @@ Which will return:
126
129
  ```json
127
130
  {
128
131
  "name": "Adam Baihaqi",
132
+ "upcase_name": "ADAM BAIHAQI",
129
133
  "years_old": 21,
130
134
  "gender": "male",
131
135
  "books": [
@@ -154,6 +158,7 @@ Jsoning the user with pretty set to true, will return:
154
158
  ```json
155
159
  {
156
160
  "name": "Adam Baihaqi",
161
+ "upcase_name": "ADAM BAIHAQI",
157
162
  "years_old": 21,
158
163
  "gender": "male",
159
164
  "books": [
@@ -181,6 +186,7 @@ The syntax above will return ruby hash object:
181
186
 
182
187
  ```ruby
183
188
  {"name"=>"Adam Baihaqi",
189
+ "upcase_name"=>"ADAM BAIHAQI",
184
190
  "years_old"=>21,
185
191
  "gender"=>"male",
186
192
  "books"=>[{"name"=>"Quiet: The Power of Introvert"}, {"name"=>"Harry Potter and the Half-Blood Prince"}],
@@ -231,6 +237,7 @@ end
231
237
 
232
238
  the_json_string = %Q{
233
239
  {"name":"Adam Baihaqi",
240
+ "upcase_name"=>"ADAM BAIHAQI",
234
241
  "years_old":21,
235
242
  "gender":"male",
236
243
  "books":[{"name":"Mathematics 6A"},{"name":"Physics A2"}],
@@ -243,6 +250,7 @@ Calling: `Jsoning.parse(the_json_string, My::User)` will yield a Hash as follow:
243
250
 
244
251
  ```ruby
245
252
  {"name"=>"Adam Baihaqi",
253
+ "upcase_name"=>"ADAM BAIHAQI",
246
254
  "years_old"=>21,
247
255
  "gender"=>"male",
248
256
  "books"=>[{"name"=>"Mathematics 6A"}, {"name"=>"Physics A2"}],
@@ -288,9 +296,9 @@ We can also generate the whole user json/hash, too:
288
296
 
289
297
  ```ruby
290
298
  json = Jsoning.generate(user, version: :v1)
291
- expect(JSON.parse(json)).to eq({"name"=>"Adam Baihaqi", "years_old"=>21, "gender"=>"male", "books"=>[{"name"=>"Quiet: The Power of Introvert"}, {"name"=>"Harry Potter and the Half-Blood Prince"}], "degree_detail"=>nil, "registered_at"=>"2015-11-01T14:41:09+0000"})
299
+ expect(JSON.parse(json)).to eq({"name"=>"Adam Baihaqi", "upcase_name"=>"ADAM BAIHAQI", "years_old"=>21, "gender"=>"male", "books"=>[{"name"=>"Quiet: The Power of Introvert"}, {"name"=>"Harry Potter and the Half-Blood Prince"}], "degree_detail"=>nil, "registered_at"=>"2015-11-01T14:41:09+0000"})
292
300
  json = Jsoning.generate(user, version: :v2)
293
- expect(JSON.parse(json)).to eq({"name"=>"Adam Baihaqi", "years_old"=>21, "gender"=>"male", "books"=>[{"book_name"=>"Quiet: The Power of Introvert"}, {"book_name"=>"Harry Potter and the Half-Blood Prince"}], "degree_detail"=>nil, "registered_at"=>"2015-11-01T14:41:09+0000"})
301
+ expect(JSON.parse(json)).to eq({"name"=>"Adam Baihaqi", "upcase_name"=>"ADAM BAIHAQI", "years_old"=>21, "gender"=>"male", "books"=>[{"book_name"=>"Quiet: The Power of Introvert"}, {"book_name"=>"Harry Potter and the Half-Blood Prince"}], "degree_detail"=>nil, "registered_at"=>"2015-11-01T14:41:09+0000"})
294
302
  ```
295
303
 
296
304
  If for when generating object, the requested versioning is undefined, the default version will be used.
@@ -325,6 +333,10 @@ If for when generating object, the requested versioning is undefined, the defaul
325
333
 
326
334
  1. Versioning the way JSON/Hash is de-serialized/serialized
327
335
 
336
+ == Version 0.7.0
337
+
338
+ 1. Add value post-processor
339
+
328
340
  ## License
329
341
 
330
342
  The gem is proudly available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -33,10 +33,13 @@ class Jsoning::ForDsl
33
33
  mapped_from = nil
34
34
  options = {}
35
35
 
36
+ # iterate the args given, it contains a string/symbol indicating the key name
37
+ # and options, that specify further about the behaviour/mechanism of the key
36
38
  args.each do |arg|
37
39
  if arg.is_a?(String) || arg.is_a?(Symbol)
38
40
  mapped_to = arg
39
41
  elsif arg.is_a?(Hash)
42
+ # extract the options if given
40
43
  options = arg
41
44
  end
42
45
  end
@@ -61,7 +64,13 @@ class Jsoning::ForDsl
61
64
  mapper.nullable = options.delete(:null)
62
65
  mapper.nullable = options.delete("null") if mapper.nullable?.nil?
63
66
 
64
- options.keys { |key| raise Jsoning::Error, "Undefined option: #{key}" }
67
+ # if value is given, it has a value processor to be executed
68
+ # after value is determined
69
+ if options[:value] || options['value']
70
+ mapper.value_processor = options.delete(:value) || options.delete('value')
71
+ end
72
+
73
+ options.keys.each { |key| raise Jsoning::Error, "Undefined option: #{key}" }
65
74
 
66
75
  # add mapper to the version
67
76
  version_instance.add_mapper(mapper)
@@ -10,7 +10,7 @@ class Jsoning::Mapper
10
10
  attr_writer :nullable
11
11
  # what variable in the object will be used to obtain the value
12
12
  attr_accessor :parallel_variable
13
- attr_accessor :custom_block
13
+ attr_accessor :value_processor
14
14
 
15
15
  def initialize(version_instance)
16
16
  self.parallel_variable = nil
@@ -48,7 +48,15 @@ class Jsoning::Mapper
48
48
  raise Jsoning::Error, "Null value given for '#{name}' when serializing #{object}"
49
49
  end
50
50
  end
51
- target_hash[name] = deep_parse(target_value, requested_version_name)
51
+
52
+ extracted_value = deep_parse(target_value, requested_version_name)
53
+
54
+ # apply extractor to extracted value, if processor is defined
55
+ if value_processor
56
+ extracted_value = value_processor.(extracted_value)
57
+ end
58
+
59
+ target_hash[name] = extracted_value
52
60
  end
53
61
 
54
62
  def default_value(version_name = self.version.version_name)
@@ -1,3 +1,3 @@
1
1
  module Jsoning
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsoning
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Pahlevi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-10-22 00:00:00.000000000 Z
11
+ date: 2015-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler