abc_jsonapi 0.3.0 → 0.4.3

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