grape-entity 0.8.0 → 0.8.1

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: 619c4d253ef6fbfde4f5c3bff0a0a309a67ef6ce49d408de9f3912bf12c4f690
4
- data.tar.gz: e4c3f773ba0b6c1751abdbc0642e730c325be409b6d0d55dae1c1b2ce075b7e2
3
+ metadata.gz: fb3365afa36454c797c3d44adfa51ecc757a105fe6cb6644f3f3896ff06af48d
4
+ data.tar.gz: 1e3c91d73fb17727c931443910b2f602e037384eb4f04e055207bbaf471c3962
5
5
  SHA512:
6
- metadata.gz: 8937886f91fe82d37eb9a8eca7b6d4542b8dcb12b8ea241d8b08c4116305e351c3acc980722fe60dead828140c6c56425763854287b6e0736134e994da2b1f5e
7
- data.tar.gz: 3073993606e0f950e39ed8417bbc33aaff7d21544bbdb3797b3e0325ee01c0c8f71c9a63295630af21006698fae585b0bd1a5139dd6241221e2aac07442f1ac6
6
+ metadata.gz: ba4bd4207a7c5f5f09806017b29723ba0f3ed0fc749cd360d55ebba9a41465165f91a7ae974d6af4baed71109c2ad5b7f19514a6f510953fe3733b46d35f405e
7
+ data.tar.gz: 4ac4db65df766dd004c35e926a6a43e08023d86b4477d6e396b8c9ce9b125ee889bbbe86fecf7f6f4a60f847c2ae5d38beb829ce017957737de7a52f0ab802d3
@@ -6,9 +6,14 @@ AllCops:
6
6
  - example/**/*
7
7
  TargetRubyVersion: 2.7
8
8
 
9
+ # Layout stuff
10
+ #
9
11
  Layout/EmptyLinesAroundArguments:
10
12
  Enabled: false
11
13
 
14
+ Layout/EmptyLinesAroundAttributeAccessor:
15
+ Enabled: true
16
+
12
17
  Layout/FirstHashElementIndentation:
13
18
  EnforcedStyle: consistent
14
19
 
@@ -17,6 +22,28 @@ Layout/LineLength:
17
22
  Exclude:
18
23
  - spec/**/*
19
24
 
25
+ Layout/SpaceAroundMethodCallOperator:
26
+ Enabled: true
27
+
28
+ # Lint stuff
29
+ #
30
+ Lint/DeprecatedOpenSSLConstant:
31
+ Enabled: true
32
+
33
+ Lint/DuplicateElsifCondition:
34
+ Enabled: true
35
+
36
+ Lint/MixedRegexpCaptureTypes:
37
+ Enabled: true
38
+
39
+ Lint/RaiseException:
40
+ Enabled: true
41
+
42
+ Lint/StructNewOverride:
43
+ Enabled: true
44
+
45
+ # Metrics stuff
46
+ #
20
47
  Metrics/AbcSize:
21
48
  Max: 25
22
49
 
@@ -25,7 +52,7 @@ Metrics/BlockLength:
25
52
  - spec/**/*
26
53
 
27
54
  Metrics/CyclomaticComplexity:
28
- Max: 10
55
+ Max: 13
29
56
 
30
57
  Metrics/ClassLength:
31
58
  Max: 300
@@ -38,11 +65,64 @@ Metrics/MethodLength:
38
65
  Metrics/PerceivedComplexity:
39
66
  Max: 11
40
67
 
68
+ # Naming stuff
69
+ #
70
+
41
71
  Naming:
42
72
  Enabled: false
43
73
 
74
+ # Style stuff
75
+ #
76
+ Style/AccessorGrouping:
77
+ Enabled: true
78
+
79
+ Style/ArrayCoercion:
80
+ Enabled: true
81
+
82
+ Style/BisectedAttrAccessor:
83
+ Enabled: true
84
+
85
+ Style/CaseLikeIf:
86
+ Enabled: true
87
+
44
88
  Style/Documentation:
45
89
  Enabled: false
46
90
 
91
+ Style/ExponentialNotation:
92
+ Enabled: true
93
+
94
+ Style/HashAsLastArrayItem:
95
+ Enabled: true
96
+
97
+ Style/HashEachMethods:
98
+ Enabled: true
99
+
100
+ Style/HashLikeCase:
101
+ Enabled: true
102
+
103
+ Style/HashTransformKeys:
104
+ Enabled: true
105
+
106
+ Style/HashTransformValues:
107
+ Enabled: true
108
+
109
+ Style/RedundantAssignment:
110
+ Enabled: true
111
+
112
+ Style/RedundantFetchBlock:
113
+ Enabled: true
114
+
115
+ Style/RedundantFileExtensionInRequire:
116
+ Enabled: true
117
+
118
+ Style/RedundantRegexpCharacterClass:
119
+ Enabled: true
120
+
121
+ Style/RedundantRegexpEscape:
122
+ Enabled: true
123
+
47
124
  Style/RegexpLiteral:
48
125
  Enabled: false
126
+
127
+ Style/SlicingWithRange:
128
+ Enabled: true
@@ -7,9 +7,9 @@ after_success:
7
7
  - bundle exec danger
8
8
 
9
9
  rvm:
10
- - 2.5.7
11
- - 2.6.5
12
- - 2.7.0
10
+ - 2.5.8
11
+ - 2.6.6
12
+ - 2.7.1
13
13
  - ruby-head
14
14
  - jruby-head
15
15
 
@@ -17,9 +17,9 @@ matrix:
17
17
  fast_finish: true
18
18
 
19
19
  include:
20
- - rvm: 2.4.9
20
+ - rvm: 2.4.10
21
21
 
22
22
  allow_failures:
23
- - rvm: 2.4.9
23
+ - rvm: 2.4.10
24
24
  - rvm: ruby-head
25
25
  - rvm: jruby-head
@@ -8,7 +8,14 @@
8
8
 
9
9
  * Your contribution here.
10
10
 
11
- ### 0.9.0 (2020-02-18)
11
+ ### 0.8.1 (2020-07-15)
12
+
13
+ #### Fixes
14
+
15
+ * [#336](https://github.com/ruby-grape/grape-entity/pull/336): Pass options to delegators when they accept it - [@dnesteryuk](https://github.com/dnesteryuk).
16
+ * [#333](https://github.com/ruby-grape/grape-entity/pull/333): Fix typo in CHANGELOG.md - [@eitoball](https://github.com/eitoball).
17
+
18
+ ### 0.8.0 (2020-02-18)
12
19
 
13
20
  #### Features
14
21
 
data/Gemfile CHANGED
@@ -5,7 +5,7 @@ source 'http://rubygems.org'
5
5
  gemspec
6
6
 
7
7
  group :development, :test do
8
- gem 'rubocop', '~> 0.79.0', require: false
8
+ gem 'rubocop', '~> 0.88.0', require: false
9
9
  end
10
10
 
11
11
  group :test do
@@ -7,6 +7,7 @@ require 'benchmark'
7
7
  module Models
8
8
  class School
9
9
  attr_reader :classrooms
10
+
10
11
  def initialize
11
12
  @classrooms = []
12
13
  end
@@ -15,6 +16,7 @@ module Models
15
16
  class ClassRoom
16
17
  attr_reader :students
17
18
  attr_accessor :teacher
19
+
18
20
  def initialize(opts = {})
19
21
  @teacher = opts[:teacher]
20
22
  @students = []
@@ -23,6 +25,7 @@ module Models
23
25
 
24
26
  class Person
25
27
  attr_accessor :name
28
+
26
29
  def initialize(opts = {})
27
30
  @name = opts[:name]
28
31
  end
@@ -30,6 +33,7 @@ module Models
30
33
 
31
34
  class Teacher < Models::Person
32
35
  attr_accessor :tenure
36
+
33
37
  def initialize(opts = {})
34
38
  super(opts)
35
39
  @tenure = opts[:tenure]
@@ -38,6 +42,7 @@ module Models
38
42
 
39
43
  class Student < Models::Person
40
44
  attr_reader :grade
45
+
41
46
  def initialize(opts = {})
42
47
  super(opts)
43
48
  @grade = opts[:grade]
@@ -4,7 +4,7 @@ module Grape
4
4
  class Entity
5
5
  module Delegator
6
6
  class FetchableObject < Base
7
- def delegate(attribute, **)
7
+ def delegate(attribute)
8
8
  object.fetch attribute
9
9
  end
10
10
  end
@@ -4,7 +4,7 @@ module Grape
4
4
  class Entity
5
5
  module Delegator
6
6
  class OpenStructObject < Base
7
- def delegate(attribute, **)
7
+ def delegate(attribute)
8
8
  object.send attribute
9
9
  end
10
10
  end
@@ -4,7 +4,7 @@ module Grape
4
4
  class Entity
5
5
  module Delegator
6
6
  class PlainObject < Base
7
- def delegate(attribute, **)
7
+ def delegate(attribute)
8
8
  object.send attribute
9
9
  end
10
10
 
@@ -105,7 +105,7 @@ module Grape
105
105
  @root_exposure ||= Exposure.new(nil, nesting: true)
106
106
  end
107
107
 
108
- attr_writer :root_exposure
108
+ attr_writer :root_exposure, :formatters
109
109
 
110
110
  # Returns all formatters that are registered for this and it's ancestors
111
111
  # @return [Hash] of formatters
@@ -113,8 +113,6 @@ module Grape
113
113
  @formatters ||= {}
114
114
  end
115
115
 
116
- attr_writer :formatters
117
-
118
116
  def hash_access
119
117
  @hash_access ||= :to_sym
120
118
  end
@@ -130,6 +128,10 @@ module Grape
130
128
  :to_sym
131
129
  end
132
130
  end
131
+
132
+ def delegation_opts
133
+ @delegation_opts ||= { hash_access: hash_access }
134
+ end
133
135
  end
134
136
 
135
137
  @formatters = {}
@@ -479,6 +481,9 @@ module Grape
479
481
  @object = object
480
482
  @options = options.is_a?(Options) ? options : Options.new(options)
481
483
  @delegator = Delegator.new(object)
484
+
485
+ # Why not `arity > 1`? It might be negative https://ruby-doc.org/core-2.6.6/Method.html#method-i-arity
486
+ @delegator_accepts_opts = @delegator.method(:delegate).arity != 1
482
487
  end
483
488
 
484
489
  def root_exposures
@@ -531,8 +536,10 @@ module Grape
531
536
  def delegate_attribute(attribute)
532
537
  if is_defined_in_entity?(attribute)
533
538
  send(attribute)
539
+ elsif @delegator_accepts_opts
540
+ delegator.delegate(attribute, self.class.delegation_opts)
534
541
  else
535
- delegator.delegate(attribute, hash_access: self.class.hash_access)
542
+ delegator.delegate(attribute)
536
543
  end
537
544
  end
538
545
 
@@ -106,11 +106,12 @@ module Grape
106
106
  end
107
107
 
108
108
  def build_symbolized_hash(attribute, hash)
109
- if attribute.is_a?(Hash)
109
+ case attribute
110
+ when Hash
110
111
  attribute.each do |attr, nested_attrs|
111
112
  hash[attr.to_sym] = build_symbolized_hash(nested_attrs, {})
112
113
  end
113
- elsif attribute.is_a?(Array)
114
+ when Array
114
115
  return attribute.each { |x| build_symbolized_hash(x, {}) }
115
116
  else
116
117
  hash[attribute.to_sym] = true
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GrapeEntity
4
- VERSION = '0.8.0'
4
+ VERSION = '0.8.1'
5
5
  end
@@ -977,7 +977,7 @@ describe Grape::Entity do
977
977
  subject.expose(:user, using: user_entity)
978
978
 
979
979
  representation = subject.represent(OpenStruct.new(user: {}),
980
- only: [:id, :name, :phone, user: %i[id name email]],
980
+ only: [:id, :name, :phone, { user: %i[id name email] }],
981
981
  except: [:phone, { user: [:id] }], serializable: true)
982
982
  expect(representation).to eq(id: nil, name: nil, user: { name: nil, email: nil })
983
983
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-entity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Bleigh
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-18 00:00:00.000000000 Z
11
+ date: 2020-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -214,7 +214,7 @@ homepage: https://github.com/ruby-grape/grape-entity
214
214
  licenses:
215
215
  - MIT
216
216
  metadata: {}
217
- post_install_message:
217
+ post_install_message:
218
218
  rdoc_options: []
219
219
  require_paths:
220
220
  - lib
@@ -229,8 +229,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
229
229
  - !ruby/object:Gem::Version
230
230
  version: '0'
231
231
  requirements: []
232
- rubygems_version: 3.1.2
233
- signing_key:
232
+ rubygems_version: 3.1.4
233
+ signing_key:
234
234
  specification_version: 4
235
235
  summary: A simple facade for managing the relationship between your model and API.
236
236
  test_files: