granite 0.11.0 → 0.12.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: 7c87ec932a4c14889c6de808acc812dc2eac40bda53454aa5b737176a3b02c01
4
- data.tar.gz: 57c47008c125ec1283bddb6e407b94be2099e1a6e02f909751de03ecbe0669c6
3
+ metadata.gz: 52d8a88997b67bfb217a38ca0cc018dc73643b9bc3c6a6cae2360faba4df0733
4
+ data.tar.gz: c544a8f9581989a4bb9aa46e31bba7ea41ad69275475d68dfb94ccffb12302e2
5
5
  SHA512:
6
- metadata.gz: fca3402fa5593057b236362bdb6050c30f65b1f65dc7e48699ca0179e31005f8c74b1e613a901ae2211869fc2d28ad091fd008b350e7a61c5ba5807528929f98
7
- data.tar.gz: 604bb52620145a6b23c37ca2a8e35250504171a7ce308371c4c4e964a83d7b5ce4d971ff8841ed3f607a3041ff31a9e9ce1058b46a8335811c1ed15411fd959b
6
+ metadata.gz: 2b66c8f502e7010349f5a75cdcd641010ee415797c7ae91e1b6b292501910e1001ba102280f407b75863eef3851eaff7e4c851fd03620930af340929ceeac61c
7
+ data.tar.gz: '08d61d57ebe13e3e40176d93a2dc4554606c998e8855f498338707faa455ad03e90cefee322141e6679e5a2c37ce27ab485646e166834c01d4a4ac364f557eae'
@@ -7,7 +7,7 @@ module Granite
7
7
  class_attribute :_exception_handlers, instance_writer: false
8
8
  self._exception_handlers = {}
9
9
 
10
- protected :_exception_handlers # rubocop:disable Style/AccessModifierDeclarations
10
+ protected :_exception_handlers
11
11
  end
12
12
 
13
13
  module ClassMethods
@@ -98,8 +98,8 @@ module Granite
98
98
  end
99
99
 
100
100
  # Adds passed error message and options to `errors` object
101
- def decline_with(*args)
102
- errors.add(:base, *args)
101
+ def decline_with(*args, **kwargs)
102
+ errors.add(:base, *args, **kwargs)
103
103
  failed_preconditions << args.first
104
104
  end
105
105
 
@@ -85,13 +85,13 @@ module Granite
85
85
  _projectors.store(name, options, &block)
86
86
 
87
87
  class_eval <<-METHOD, __FILE__, __LINE__ + 1
88
- def self.#{name}
89
- _projectors.fetch(:#{name})
90
- end
91
-
92
- def #{name}
93
- @#{name} ||= self.class._projectors.fetch(:#{name}).new(self)
94
- end
88
+ def self.#{name} # def self.foo
89
+ _projectors.fetch(:#{name}) # _projectors.fetch(:foo)
90
+ end # end
91
+ #
92
+ def #{name} # def foo
93
+ @#{name} ||= self.class._projectors.fetch(:#{name}).new(self) # @foo ||= self.class._projectors.fetch(:foo).new(self)
94
+ end # end
95
95
  METHOD
96
96
  end
97
97
  end
@@ -62,11 +62,9 @@ module Granite
62
62
  collected_errors = []
63
63
 
64
64
  callbacks.reverse_each do |callback|
65
- begin
66
- callback.respond_to?(:run_callbacks) ? callback.run_callbacks(:commit) : callback.call
67
- rescue StandardError => e
68
- collected_errors << e
69
- end
65
+ callback.respond_to?(:run_callbacks) ? callback.run_callbacks(:commit) : callback.call
66
+ rescue StandardError => e
67
+ collected_errors << e
70
68
  end
71
69
 
72
70
  return unless collected_errors.any?
@@ -17,7 +17,7 @@ module Granite
17
17
 
18
18
  def translate(*args, **options)
19
19
  key, options = Granite::Translations.scope_translation_args(self.class.i18n_scopes, *args, **options)
20
- I18n.translate(key, **options)
20
+ I18n.t(key, **options)
21
21
  end
22
22
  alias t translate
23
23
  end
@@ -50,20 +50,28 @@ module Granite
50
50
  prepend AssignAttributes
51
51
 
52
52
  handle_exception ActiveRecord::RecordInvalid do |e|
53
- errors.messages.deep_merge!(e.record.errors.messages) do |_, this, other|
54
- (this + other).uniq
55
- end
53
+ merge_errors(e.record.errors)
56
54
  end
57
55
 
58
56
  handle_exception ActiveData::ValidationError do |e|
59
- errors.messages.deep_merge!(e.model.errors.messages) do |_, this, other|
60
- (this + other).uniq
61
- end
57
+ merge_errors(e.model.errors)
62
58
  end
63
59
 
64
60
  handle_exception Granite::Action::ValidationError do |e|
65
- errors.messages.deep_merge!(e.action.errors.messages) do |_, this, other|
66
- (this + other).uniq
61
+ merge_errors(e.action.errors)
62
+ end
63
+
64
+ if ActiveModel.version < Gem::Version.new('6.1.0')
65
+ def merge_errors(other_errors)
66
+ errors.messages.deep_merge!(other_errors.messages) do |_, this, other|
67
+ (this + other).uniq
68
+ end
69
+ end
70
+ else
71
+ def merge_errors(other_errors)
72
+ other_errors.each do |error|
73
+ errors.import(error) unless errors.added?(error.attribute, error)
74
+ end
67
75
  end
68
76
  end
69
77
 
@@ -1,6 +1,6 @@
1
1
  module Granite
2
2
  module AssignData
3
- DataAssignment = Struct.new(:method, :options)
3
+ DataAssignment = Struct.new(:method, :options) # rubocop:disable Lint/StructNewOverride
4
4
 
5
5
  extend ActiveSupport::Concern
6
6
 
@@ -9,7 +9,7 @@ module Granite
9
9
  self.data_assignments = []
10
10
 
11
11
  alias_method :only_run_validations!, :run_validations!
12
- protected :only_run_validations! # rubocop:disable Style/AccessModifierDeclarations
12
+ protected :only_run_validations!
13
13
  end
14
14
 
15
15
  module ClassMethods
@@ -24,15 +24,17 @@ module Granite
24
24
  end
25
25
  end
26
26
 
27
+ protected
28
+
29
+ def assign_data
30
+ data_assignments.each { |assignment| evaluate(assignment.method) if conditions_satisfied?(**assignment.options) }
31
+ end
32
+
27
33
  private
28
34
 
29
35
  def run_validations!
30
36
  assign_data
31
37
  super
32
38
  end
33
-
34
- def assign_data
35
- data_assignments.each { |assignment| evaluate(assignment.method) if conditions_satisfied?(**assignment.options) }
36
- end
37
39
  end
38
40
  end
@@ -22,13 +22,13 @@ module Granite
22
22
  self.controller_actions = controller_actions.merge(name.to_sym => options)
23
23
  controller_class.__send__(:define_method, name, &block)
24
24
  class_eval <<-METHOD, __FILE__, __LINE__ + 1
25
- def #{name}_url(options = {})
26
- action_url(:#{name}, **options.symbolize_keys)
27
- end
28
-
29
- def #{name}_path(options = {})
30
- action_path(:#{name}, **options.symbolize_keys)
31
- end
25
+ def #{name}_url(options = {}) # def foo_url(options = {}
26
+ action_url(:#{name}, **options.symbolize_keys) # action_url(:foo, **options.symbolize_keys)
27
+ end # end
28
+ #
29
+ def #{name}_path(options = {}) # def foo_path(options = {})
30
+ action_path(:#{name}, **options.symbolize_keys) # action_path(:foo, **options.symbolize_keys)
31
+ end # end
32
32
  METHOD
33
33
  else
34
34
  controller_actions[name.to_sym]
@@ -15,7 +15,7 @@ module Granite
15
15
  end
16
16
 
17
17
  def typecast(value)
18
- return value if value.class == type
18
+ return value if value.class == type # rubocop:disable Style/ClassEqualityComparison
19
19
 
20
20
  typecaster.call(value, self) unless value.nil?
21
21
  end
@@ -28,13 +28,13 @@ module Granite
28
28
 
29
29
  def typecaster
30
30
  @typecaster ||= begin
31
- type_class = type.instance_of?(Class) ? type : type.class
32
- @typecaster = ActiveData.typecaster(type_class.ancestors.grep(Class))
33
- end
31
+ type_class = type.instance_of?(Class) ? type : type.class
32
+ @typecaster = ActiveData.typecaster(type_class.ancestors.grep(Class))
33
+ end
34
34
  end
35
35
 
36
36
  def changed?
37
- if reflection.options[:default].present?
37
+ if reflection.options.key?(:default)
38
38
  reference.public_send(reader) != read
39
39
  else
40
40
  owner.public_send("#{name}_changed?")
@@ -23,14 +23,12 @@ RSpec::Matchers.define :raise_validation_error do
23
23
  end
24
24
 
25
25
  match do |block|
26
- begin
27
- block.call
28
- false
29
- rescue Granite::Action::ValidationError => e
30
- @details = e.errors.details
31
- @details_being_checked = @details[@attribute || :base]
32
- @result = @details_being_checked&.any? { |x| x[:error] == @error_type }
33
- end
26
+ block.call
27
+ false
28
+ rescue Granite::Action::ValidationError => e
29
+ @details = e.errors.details
30
+ @details_being_checked = @details[@attribute || :base]
31
+ @result = @details_being_checked&.any? { |x| x[:error] == @error_type }
34
32
  end
35
33
 
36
34
  description do
@@ -1,3 +1,3 @@
1
1
  module Granite
2
- VERSION = '0.11.0'.freeze
2
+ VERSION = '0.12.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: granite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toptal Engineering
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-27 00:00:00.000000000 Z
11
+ date: 2022-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '5.1'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '6.1'
22
+ version: '7.1'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,21 +29,21 @@ dependencies:
29
29
  version: '5.1'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '6.1'
32
+ version: '7.1'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: active_data
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 1.1.5
39
+ version: 1.2.0
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: 1.1.5
46
+ version: 1.2.0
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activesupport
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +53,7 @@ dependencies:
53
53
  version: '5.1'
54
54
  - - "<"
55
55
  - !ruby/object:Gem::Version
56
- version: '6.1'
56
+ version: '7.1'
57
57
  type: :runtime
58
58
  prerelease: false
59
59
  version_requirements: !ruby/object:Gem::Requirement
@@ -63,7 +63,7 @@ dependencies:
63
63
  version: '5.1'
64
64
  - - "<"
65
65
  - !ruby/object:Gem::Version
66
- version: '6.1'
66
+ version: '7.1'
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: memoist
69
69
  requirement: !ruby/object:Gem::Requirement
@@ -84,20 +84,28 @@ dependencies:
84
84
  requirements:
85
85
  - - ">="
86
86
  - !ruby/object:Gem::Version
87
- version: '5.0'
88
- - - "<"
89
- - !ruby/object:Gem::Version
90
- version: '6.1'
87
+ version: '0'
91
88
  type: :development
92
89
  prerelease: false
93
90
  version_requirements: !ruby/object:Gem::Requirement
94
91
  requirements:
95
92
  - - ">="
96
93
  - !ruby/object:Gem::Version
97
- version: '5.0'
98
- - - "<"
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: appraisal
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
99
107
  - !ruby/object:Gem::Version
100
- version: '6.1'
108
+ version: '0'
101
109
  - !ruby/object:Gem::Dependency
102
110
  name: capybara
103
111
  requirement: !ruby/object:Gem::Requirement
@@ -244,42 +252,42 @@ dependencies:
244
252
  requirements:
245
253
  - - "~>"
246
254
  - !ruby/object:Gem::Version
247
- version: 0.78.0
255
+ version: '1.0'
248
256
  type: :development
249
257
  prerelease: false
250
258
  version_requirements: !ruby/object:Gem::Requirement
251
259
  requirements:
252
260
  - - "~>"
253
261
  - !ruby/object:Gem::Version
254
- version: 0.78.0
262
+ version: '1.0'
255
263
  - !ruby/object:Gem::Dependency
256
264
  name: rubocop-rails
257
265
  requirement: !ruby/object:Gem::Requirement
258
266
  requirements:
259
267
  - - "~>"
260
268
  - !ruby/object:Gem::Version
261
- version: 2.4.1
269
+ version: '2.13'
262
270
  type: :development
263
271
  prerelease: false
264
272
  version_requirements: !ruby/object:Gem::Requirement
265
273
  requirements:
266
274
  - - "~>"
267
275
  - !ruby/object:Gem::Version
268
- version: 2.4.1
276
+ version: '2.13'
269
277
  - !ruby/object:Gem::Dependency
270
278
  name: rubocop-rspec
271
279
  requirement: !ruby/object:Gem::Requirement
272
280
  requirements:
273
281
  - - "~>"
274
282
  - !ruby/object:Gem::Version
275
- version: 1.37.0
283
+ version: '2.8'
276
284
  type: :development
277
285
  prerelease: false
278
286
  version_requirements: !ruby/object:Gem::Requirement
279
287
  requirements:
280
288
  - - "~>"
281
289
  - !ruby/object:Gem::Version
282
- version: 1.37.0
290
+ version: '2.8'
283
291
  - !ruby/object:Gem::Dependency
284
292
  name: simplecov
285
293
  requirement: !ruby/object:Gem::Requirement
@@ -383,14 +391,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
383
391
  requirements:
384
392
  - - ">="
385
393
  - !ruby/object:Gem::Version
386
- version: '0'
394
+ version: '2.5'
387
395
  required_rubygems_version: !ruby/object:Gem::Requirement
388
396
  requirements:
389
397
  - - ">="
390
398
  - !ruby/object:Gem::Version
391
399
  version: '0'
392
400
  requirements: []
393
- rubygems_version: 3.0.9
401
+ rubygems_version: 3.1.6
394
402
  signing_key:
395
403
  specification_version: 4
396
404
  summary: Another business actions architecture for Rails apps