jsonapi_deserializer 1.1.1 → 1.2.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
- SHA1:
3
- metadata.gz: 5d114171139c779e27ebf9e75c9c1f9c099af98e
4
- data.tar.gz: 0eab51a21e34a602cfa9ce3acf9ed5ec8d48ebe4
2
+ SHA256:
3
+ metadata.gz: 2e893a9e49dd289acebe86c9f18af0450650659ef36297dfacc219564d6e62e2
4
+ data.tar.gz: 1cfd8dd28ff6515fa64db6a96dabf1734f4910cccbab1a331c8f790f5be98ba6
5
5
  SHA512:
6
- metadata.gz: ced938bbb209c7e52692f6123efc9b9ab71acd7dcd9913a1f8d50f4a594d6c08300f17c584c9e3b7d1634af656019630e951fcddcef81a5f2997c589f053ba5d
7
- data.tar.gz: 707d4f4aa7d0b878c9f57c8cdb3e6f5011a77f5ef06e6fd7b476a1159fc27d0f3dcf537f03387657fcb843b8a0474a527f16f76a319141ad6ffa19f5e8f5e423
6
+ metadata.gz: 20ca6743e1ba0412da7c16a493b0046555cd6bc8065982d912fa682be548e76729d0ae2a983f389c05e752a3345f2deb396023df5cf94ee4ca36059021f9586a
7
+ data.tar.gz: 11cfd77060188941556ca17b62e93e7d05055f746900be994683c773b6099524b59c7edc3ad7f35eb79f4b5296f82760c83766c17ab65bd70e21d286702a0940
@@ -7,7 +7,7 @@ Gem::Specification.new do |spec|
7
7
  spec.name = "jsonapi_deserializer"
8
8
  spec.version = JSONApi::Deserializer::VERSION
9
9
  spec.authors = ["Trek Glowacki"]
10
- spec.email = ["trek@popularpays.com"]
10
+ spec.email = ["trek.glowacki@gmail.com"]
11
11
 
12
12
  spec.summary = "Deserialize your json-api payloads into easy-to-use hashes with attribute properties."
13
13
  spec.homepage = "https://github.com/PopularPays/jsonapi_deserializer"
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.10"
21
+ spec.add_development_dependency "bundler", ">= 1.10", "< 3.0"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
23
  spec.add_development_dependency "rspec"
24
24
 
@@ -9,7 +9,14 @@ module JSONApi
9
9
  include Hashie::Extensions::IndifferentAccess
10
10
 
11
11
  def initialize(source_hash = nil, default = nil, &blk)
12
- source_hash[:id] = source_hash[:id].to_s
12
+
13
+ if source_hash[:id]
14
+ source_hash[:id] = source_hash[:id].to_s
15
+ end
16
+
17
+ if source_hash[:lid]
18
+ source_hash[:lid] = source_hash[:lid].to_s
19
+ end
13
20
  super
14
21
  end
15
22
  end
@@ -18,11 +25,43 @@ module JSONApi
18
25
  include Hashie::Extensions::MethodAccess
19
26
  include Hashie::Extensions::IndifferentAccess
20
27
  include Hashie::Extensions::DeepFetch
28
+
29
+ def initialize(source_hash = nil, default = nil, &blk)
30
+ if source_hash[:id]
31
+ source_hash[:id] = source_hash[:id].to_s
32
+ end
33
+
34
+ if source_hash[:lid]
35
+ source_hash[:lid] = source_hash[:lid].to_s
36
+ end
37
+ super
38
+ end
39
+ end
40
+
41
+ class Store
42
+ def initialize
43
+ @db = {}
44
+ end
45
+
46
+ def set(type, id, lid, record)
47
+ per_type = @db[type] ||= {}
48
+ identifier = id || lid
49
+
50
+ per_type[identifier.to_s] = record
51
+ end
52
+
53
+ def get(type, id, lid)
54
+ per_type = @db[type]
55
+ return nil unless per_type
56
+
57
+ identifier = id || lid
58
+ per_type[identifier.to_s]
59
+ end
21
60
  end
22
61
 
23
62
  def initialize(response)
24
63
  @response = response.is_a?(Hash) ? response.with_indifferent_access : response
25
- @store = {}
64
+ @store = Store.new
26
65
 
27
66
  all_data = ([] << @response[:data] << @response[:included]).flatten.compact
28
67
  store_records(all_data)
@@ -32,9 +71,9 @@ module JSONApi
32
71
  def deserialized_hash
33
72
  data = @response[:data]
34
73
  if data.is_a? Array
35
- data.map { |datum| @store[datum[:type]][datum[:id].to_s] }
74
+ data.map { |datum| @store.get(datum[:type], datum[:id], datum[:lid]) }
36
75
  else
37
- @store[data[:type]][data[:id].to_s]
76
+ @store.get(data[:type], data[:id], data[:lid])
38
77
  end
39
78
  end
40
79
 
@@ -42,26 +81,19 @@ module JSONApi
42
81
 
43
82
  def store_records(data)
44
83
  data.each do |datum|
45
- type = datum[:type]
46
- per_type = @store[type] ||= {}
47
- record = Record.new(id: datum[:id].to_s).merge(datum[:attributes] || {})
48
-
49
- per_type[record.id] = record
84
+ record = Record.new(id: datum[:id], lid: datum[:lid]).merge(datum[:attributes] || {})
85
+ @store.set(datum[:type], datum[:id], datum[:lid], record)
50
86
  end
51
87
  end
52
88
 
53
89
  def find_association(association)
54
90
  return nil unless association
55
- if @store[association[:type]] && @store[association[:type]][association[:id].to_s]
56
- @store[association[:type]][association[:id].to_s]
57
- else
58
- Assocation.new(association)
59
- end
91
+ @store.get(association[:type], association[:id], association[:lid]) || Assocation.new(association)
60
92
  end
61
93
 
62
94
  def build_associations(data)
63
95
  data.each do |datum|
64
- record = @store[datum[:type]][datum[:id].to_s]
96
+ record = @store.get(datum[:type], datum[:id], datum[:lid])
65
97
 
66
98
  relationships = datum[:relationships] || {}
67
99
  relationships.each do |relationship_name, relationship|
@@ -1,5 +1,5 @@
1
1
  module JSONApi
2
2
  class Deserializer
3
- VERSION = "1.1.1"
3
+ VERSION = "1.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi_deserializer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Trek Glowacki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-09 00:00:00.000000000 Z
11
+ date: 2021-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.10'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3.0'
20
23
  type: :development
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '1.10'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3.0'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rake
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +88,7 @@ dependencies:
82
88
  version: '0'
83
89
  description:
84
90
  email:
85
- - trek@popularpays.com
91
+ - trek.glowacki@gmail.com
86
92
  executables: []
87
93
  extensions: []
88
94
  extra_rdoc_files: []
@@ -119,8 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
125
  - !ruby/object:Gem::Version
120
126
  version: '0'
121
127
  requirements: []
122
- rubyforge_project:
123
- rubygems_version: 2.5.1
128
+ rubygems_version: 3.1.4
124
129
  signing_key:
125
130
  specification_version: 4
126
131
  summary: Deserialize your json-api payloads into easy-to-use hashes with attribute