json_schema_tools 0.4.1 → 0.4.2

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZWI2NjlkM2IyMjgxZGYyODJkNzk5NmY0MjQxMjA0YWQ4ZTNiYTk3Nw==
4
+ MWUzNzQ4ZTc1NjNjNzRmYzc3Y2Y1ODg2MDBjZWU3NzdhYjNlMzBmOQ==
5
5
  data.tar.gz: !binary |-
6
- MDhlNWEwMTY5ZjY2ZGJiYjViMjdhZWI5Nzg5NGI4MTM3ZmZmODk0OQ==
6
+ NGI2YjAzZGQ2M2UxMDY1M2M5NWNiY2E2NzRhYzYxZDhlZTZiY2E5Zg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YmVlMDY3ZTBkOTJkNzA2OWExNWRiYjM3ZDhhNGNkMTJkZDE2MGQ0YWM1OTIz
10
- Y2NiNDQwNzA0YzljODUzNTM4YmU1MGRmOWVkZDI1MGVhYzg1MWJkNWUzZDY3
11
- ZGQ2MzA5NTBjZTZjZjJkZTRmODdjOGExOTE2NDVmY2IxZjVmOWM=
9
+ MzAxYjIwZTgzN2JhMmMyYTQ5ZGNmNjIyYjdhYzg0ZGNkM2E0ODk2ZTcwZDU2
10
+ NzU2OWI1MjU1YjA2ZjEzYjc0ZjI1YmU0ZDg5MzEzNGY1ZjRjYTYxNGU1NmYy
11
+ ZDQyM2NmM2I4NWMxOGViOWZlYzA2YzQ5MmRiMWQ3NmE1M2ViNTI=
12
12
  data.tar.gz: !binary |-
13
- NTFjZjdkMjAzNDgxOWIxYjdiYmEyYTI3ZGMxNWM2YWViMDJlZmZlNzA3Yzc2
14
- YWEwMzNlZmVjOTIxNjQ5M2JmYzE0YTRjMjhmOGFmZmUxZThlMWQ5NWQwZDFi
15
- ODIyMzY3NDY2Zjc1Y2NkM2JhMGE0YThlNDJiZWMyN2ViNWJiOTU=
13
+ OTcxMDg5YmQ1NjQ4NzcxMzhkN2U4MjVhYTk2MWU5NjQzODAwZGI5MzU1MTkz
14
+ OGM3MmFmMGM1ZTUwYzM4YzhmNzRhYjUwZTFiZTE1YTZiNjU2YzkxOGM1NGVl
15
+ MGQzYjBiZTgzZmE2ZmQzNDQzZjVhYmNiMDIxNTA3NWY1MTdmMDg=
data/README.md CHANGED
@@ -200,9 +200,12 @@ class Contact
200
200
  has_schema_attrs :contact
201
201
  end
202
202
 
203
- json_str = '{"id": "123456", "last_name": "Meier","first_name": "Peter"}
203
+ json_str = '{"id": "123456", "last_name": "Meier","first_name": "Peter"}'
204
204
  c = Contact.from_json(json_str)
205
- c.id #=> 123456
205
+ c.id #=> "123456"
206
+
207
+ # new object from hash (if your favorite http tool already parsed the json)
208
+ c = Contact.from_hash({"id"=>123456, "last_name"=>"Meier","first_name"=>"Peter"})
206
209
 
207
210
  ```
208
211
 
@@ -44,8 +44,9 @@ module SchemaTools
44
44
  end
45
45
  end
46
46
 
47
- # Create a new object from a json string. Auto-detects nesting by
48
- # checking for a hash key with the same name as the schema_name:
47
+ # Create a new object from a json string or a ruby hash (already created
48
+ # from json string). Auto-detects nesting by checking for a hash key
49
+ # with the same name as the schema_name:
49
50
  #
50
51
  # class Contact
51
52
  # include SchemaTools::Modules::Attributes
@@ -53,11 +54,27 @@ module SchemaTools
53
54
  # end
54
55
  # c = Contact.from_json('{ "id": "123456", "last_name": "Meier" }')
55
56
  # c.id #=>123456
56
- # c = Contact.from_json('{"contact:{ "id": "123456", "last_name": "Meier" }}')
57
+ # c = Contact.from_json( {'contact'=>{ "id=>"123456", "last_name"=>"Meier" }} )
57
58
  #
58
- # @param [String] json
59
+ # @param [String|Hash{String=>Mixed}] json string or hash
59
60
  def from_json(json)
60
61
  hash = JSON.parse(json)
62
+ from_hash(hash)
63
+ end
64
+
65
+ # Create a new object from a ruby hash (e.g parsed from json string).
66
+ # Auto-detects nesting by checking for a hash key with the same name as
67
+ # the schema_name:
68
+ #
69
+ # class Contact
70
+ # include SchemaTools::Modules::Attributes
71
+ # has_schema_attrs :contact
72
+ # end
73
+ # c = Contact.from_hash( {'contact'=>{ "id=>"123456", "last_name"=>"Meier" }} )
74
+ # c.id #=>123456
75
+ #
76
+ # @param [String|Hash{String=>Mixed}] json string or hash
77
+ def from_hash(hash)
61
78
  # test if hash is nested and shift up
62
79
  if hash.length == 1 && hash["#{schema_name}"]
63
80
  hash = hash["#{schema_name}"]
@@ -1,3 +1,3 @@
1
1
  module SchemaTools
2
- VERSION = '0.4.1'
2
+ VERSION = '0.4.2'
3
3
  end
@@ -46,7 +46,7 @@ describe SchemaTools::Modules::Attributes do
46
46
  end
47
47
  end
48
48
 
49
- context 'new from_json' do
49
+ context '.from_json' do
50
50
 
51
51
  it 'creates new object' do
52
52
  str = load_fixture_data('contact_plain.json')
@@ -68,6 +68,19 @@ describe SchemaTools::Modules::Attributes do
68
68
  expect(obj.contact_source).to eq hash['contact_source']
69
69
  expect(obj.first_name).to eq hash['first_name']
70
70
  expect(obj.last_name).to eq hash['last_name']
71
+ end
72
+ end
73
+
74
+ context '.from_hash' do
75
+
76
+ it 'creates new object from hash' do
77
+ hash = JSON.parse(load_fixture_data('contact_nested.json'))
78
+ obj = TestContact.from_hash(hash)
79
+ expect(obj.id).to eq hash['contact']['id']
80
+ expect(obj.organisation).to eq hash['contact']['organisation']
81
+ expect(obj.contact_source).to eq hash['contact']['contact_source']
82
+ expect(obj.first_name).to eq hash['contact']['first_name']
83
+ expect(obj.last_name).to eq hash['contact']['last_name']
71
84
  end
72
85
 
73
86
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_schema_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Georg Leciejewski