abc_jsonapi 0.3.0 → 0.4.3

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
  SHA256:
3
- metadata.gz: 44cf8738d4c32a565b70155cbc4db4b9311b6deb8eefec37d93303b3097e288a
4
- data.tar.gz: c77da4b0262c50f1ed2e312591f4aea3d88b494a1628b1f5e40f02cae8c42244
3
+ metadata.gz: 47608d89a5b953b5248762f9fbd6fec69c39822626c3c8c7099007a335a1dc43
4
+ data.tar.gz: 9affbf330a11e3823899ad8001e602d606894726fd9ff640520cb223e4ef8adc
5
5
  SHA512:
6
- metadata.gz: c51515e94d0bdbe536b9ae61b96f493b1263a5144cc922de56c71c80667ea2c937a3b7e7647d5be392639cf6b5c5cca9a786f432a3ed68f3c0c49fb046a61d20
7
- data.tar.gz: 908a9104627de99ed4d99654bd11d2fba9a2d806e16c2c896de2dc90b5773a5e7539458bdb28fd1cd9ba328280c8fc78046fc7ccec97895ebdb6a5ef3d73a445
6
+ metadata.gz: e36d1787f14f8d0f2aed441ff9d5a17f189f9ae6d5107b1ac08c6ae6ba4c21ca30081e41ab953544f2010bdb4ead33a1d8fba67992fee71c41ba19a238dee461
7
+ data.tar.gz: 6be35fcac6f2b64382f34f9006b14ad92a03bb62bb4e7b9b40cab06a4c4548ccad7381038991d082b29ec3e6733350871d238a62827f3a74e812723b68f79246
data/.gitignore CHANGED
File without changes
@@ -0,0 +1 @@
1
+ 2.6.5
data/Gemfile CHANGED
File without changes
@@ -1,32 +1,32 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- abc_jsonapi (0.3.0)
4
+ abc_jsonapi (0.4.3)
5
5
  activesupport (>= 5.2)
6
6
  i18n
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activesupport (6.0.0)
11
+ activesupport (6.0.3.2)
12
12
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
13
  i18n (>= 0.7, < 2)
14
14
  minitest (~> 5.1)
15
15
  tzinfo (~> 1.1)
16
- zeitwerk (~> 2.1, >= 2.1.8)
16
+ zeitwerk (~> 2.2, >= 2.2.2)
17
17
  byebug (11.0.1)
18
18
  coderay (1.1.2)
19
- concurrent-ruby (1.1.5)
19
+ concurrent-ruby (1.1.6)
20
20
  diff-lcs (1.3)
21
- i18n (1.7.0)
21
+ i18n (1.8.3)
22
22
  concurrent-ruby (~> 1.0)
23
23
  method_source (0.9.2)
24
- minitest (5.13.0)
24
+ minitest (5.14.1)
25
25
  pg (1.1.4)
26
26
  pry (0.12.2)
27
27
  coderay (~> 1.1.0)
28
28
  method_source (~> 0.9.0)
29
- rake (10.5.0)
29
+ rake (13.0.1)
30
30
  rspec (3.8.0)
31
31
  rspec-core (~> 3.8.0)
32
32
  rspec-expectations (~> 3.8.0)
@@ -42,9 +42,9 @@ GEM
42
42
  rspec-support (3.8.2)
43
43
  sequel (5.21.0)
44
44
  thread_safe (0.3.6)
45
- tzinfo (1.2.5)
45
+ tzinfo (1.2.7)
46
46
  thread_safe (~> 0.1)
47
- zeitwerk (2.2.0)
47
+ zeitwerk (2.3.0)
48
48
 
49
49
  PLATFORMS
50
50
  ruby
@@ -55,9 +55,9 @@ DEPENDENCIES
55
55
  byebug
56
56
  pg
57
57
  pry
58
- rake (~> 10.0)
58
+ rake (~> 13.0)
59
59
  rspec (~> 3.0)
60
60
  sequel
61
61
 
62
62
  BUNDLED WITH
63
- 2.0.1
63
+ 2.1.2
data/LICENSE CHANGED
File without changes
data/README.md CHANGED
@@ -35,7 +35,7 @@ Or install it yourself as:
35
35
 
36
36
  Syntax is very similar to Active Model Serializer.
37
37
 
38
- The serializer is able to work with any ruby ​​objects. Not only ActiveRecord. The idea is to use duck typing for getting object attributes, relationships and all other data.
38
+ The serializer is able to work with any ruby ​​objects. Not only ActiveRecord. It calls objects methods to get all the data.
39
39
 
40
40
  #### Model Example
41
41
 
data/Rakefile CHANGED
File without changes
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.require_paths = ["lib"]
24
24
 
25
25
  spec.add_development_dependency "bundler", "~> 2.0"
26
- spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "rake", "~> 13.0"
27
27
  spec.add_development_dependency "rspec", "~> 3.0"
28
28
  spec.add_development_dependency "pry"
29
29
  spec.add_development_dependency "sequel"
File without changes
File without changes
File without changes
@@ -18,7 +18,7 @@ module AbcJsonapi
18
18
  end
19
19
 
20
20
  def get_included_records(resource, include_chain)
21
- return if resource.nil? || include_chain.empty?
21
+ return if resource.blank? || include_chain.empty?
22
22
 
23
23
  # Get first include name of include_chain and delete it from include_chain
24
24
  inc_resource_name = include_chain.shift
@@ -26,15 +26,15 @@ module AbcJsonapi
26
26
  # Check if include name is exist in relationships array. Take it or return nil
27
27
  resource_class_name = resource.is_a?(Enumerable) ? resource[0].class.name : resource.class.name
28
28
  relationship = serializer(resource_class_name).relationships.find { |h| h[:name] == inc_resource_name.to_sym }
29
- return if relationship.nil?
29
+ return if relationship.blank?
30
30
 
31
31
  # Get included resource
32
32
  if resource.is_a?(Enumerable)
33
- resource = included_items_from_collection(resource, inc_resource_name, relationship.dig(:block))
33
+ resource = resource.map{ |res| res.public_send(inc_resource_name) }.flatten.reject(&:blank?).uniq{ |item| item.id }
34
34
  else
35
35
  resource = resource.public_send(inc_resource_name)
36
36
  end
37
- return if resource.nil?
37
+ return if resource.blank?
38
38
 
39
39
  @includes_result << serializer(inc_resource_name).new(resource).serializable_hash[:data]
40
40
 
@@ -48,15 +48,6 @@ module AbcJsonapi
48
48
  end
49
49
  end
50
50
 
51
- def included_items_from_collection(collection, include_name, block = nil)
52
- # Run custom include strategy if block given. Otherwise run default method
53
- if block.present?
54
- block.call(collection)
55
- else
56
- collection.map{ |res| res.public_send(include_name) }.flatten.reject(&:nil?).uniq{ |item| item.id }
57
- end
58
- end
59
-
60
51
  def serializer(included_resource_name)
61
52
  (serializer_namespace + included_resource_name.to_s.classify + 'Serializer').constantize
62
53
  end
@@ -48,7 +48,8 @@ module AbcJsonapi
48
48
  rel_model = AbcJsonapi::Relationship.new(
49
49
  model: model,
50
50
  relationship: relationship[:name],
51
- type: relationship[:type]
51
+ type: relationship[:type],
52
+ block: relationship[:block]
52
53
  )
53
54
  result[relationship[:name].to_sym] = rel_model.serializable_hash
54
55
  end
@@ -1,11 +1,12 @@
1
1
  module AbcJsonapi
2
2
  class Relationship
3
- attr_reader :model, :relationship, :type
3
+ attr_reader :model, :relationship, :type, :block
4
4
 
5
- def initialize(model:, relationship:, type:)
5
+ def initialize(model:, relationship:, type:, block:)
6
6
  @model = model
7
7
  @relationship = relationship
8
8
  @type = type
9
+ @block = block
9
10
  end
10
11
 
11
12
  def serializable_hash
@@ -31,7 +32,8 @@ module AbcJsonapi
31
32
  end
32
33
 
33
34
  def serialize_has_many
34
- data = model.public_send(relationship).map do |relation|
35
+ rels = block.present? ? block.call(model) : model.public_send(relationship)
36
+ data = rels.map do |relation|
35
37
  {
36
38
  id: relation.id.to_s,
37
39
  type: Helpers.pluralize_if_necessary(relationship.to_s).to_sym
@@ -25,8 +25,6 @@ module AbcJsonapi
25
25
  end
26
26
 
27
27
  def serializable_hash
28
- return nil if resource.blank?
29
-
30
28
  result_hash[:meta] = meta if meta.present?
31
29
  result_hash[:data] = data_hash
32
30
  result_hash[:included] = included_hash if @includes.present?
@@ -1,3 +1,3 @@
1
1
  module AbcJsonapi
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.3"
3
3
  end
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abc_jsonapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zhmakin Evgeniy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-31 00:00:00.000000000 Z
11
+ date: 2020-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -144,6 +144,7 @@ extensions: []
144
144
  extra_rdoc_files: []
145
145
  files:
146
146
  - ".gitignore"
147
+ - ".ruby-version"
147
148
  - Gemfile
148
149
  - Gemfile.lock
149
150
  - LICENSE
@@ -180,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
181
  - !ruby/object:Gem::Version
181
182
  version: '0'
182
183
  requirements: []
183
- rubygems_version: 3.0.6
184
+ rubygems_version: 3.0.3
184
185
  signing_key:
185
186
  specification_version: 4
186
187
  summary: Json API serializer gem