active_interaction-extras 1.0.3 → 1.1.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
2
  SHA256:
3
- metadata.gz: c3637e9bc034e39019c7a5273730c9c66e39257fcb7006f8cb153318c2345acf
4
- data.tar.gz: 51d7d883e0cfab7d0eae0f15b764f2b9e3f0868372cc4329fe47785014669e98
3
+ metadata.gz: 355913c4e3805b1373112d39fe9e686d6f1ae8b1cd7f2bca289443fd0cd37f63
4
+ data.tar.gz: f0e1a1611ca60b7199db6e18dc8152aa36fa76dde81cacfba1a6290a143ae544
5
5
  SHA512:
6
- metadata.gz: 798047a1473aec22f030540ee4af4f7d074c7372cde93b9ceedcec996cc368d88c2e48743f7a0868da2029549f1e155c70037be36e252e7b5877caf64268bbbb
7
- data.tar.gz: 38890669f04e15239b5ace15841dbb39e2a048eb9881ce127d80ad5b33126396417b5be918d8bef7a8b5a67bb1973fde82e2378baa0ce8b8dc00973d44546558
6
+ metadata.gz: 256a1e71cd64571c76418ab9a4688d827ca2f98d589610af9445ea084ef018646a28ad095b32df776163530a6c544c85d9a22e9732aaa8de85829d47c841306f
7
+ data.tar.gz: 38cea9d7580d1c9966b9f4b70168e10cd8f7f8548605d040f4ded80ee70040032f6e9bbca9c6ed1b22f2896ed9056192a7df003eac1e6dd299a5cfcbeafbfffe
@@ -19,7 +19,7 @@ jobs:
19
19
  runs-on: ubuntu-latest
20
20
  strategy:
21
21
  matrix:
22
- ruby-version: ['2.6', '2.7', '3.0']
22
+ ruby-version: ['2.7', '3.0', '3.1', '3.2']
23
23
 
24
24
  steps:
25
25
  - uses: actions/checkout@v2
@@ -27,7 +27,7 @@ jobs:
27
27
  # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
28
28
  # change this to (see https://github.com/ruby/setup-ruby#versioning):
29
29
  # uses: ruby/setup-ruby@v1
30
- uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
30
+ uses: ruby/setup-ruby@v1
31
31
  with:
32
32
  ruby-version: ${{ matrix.ruby-version }}
33
33
  bundler-cache: true # runs 'bundle install' and caches installed gems automatically
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  Gemfile.lock
10
+ .ruby-version
data/CHANGELOG.md CHANGED
@@ -4,6 +4,10 @@ This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.0.4] - 2022-06-08
8
+
9
+ - Improve halt's robustness (https://github.com/antulik/active_interaction-extras/pull/13)
10
+
7
11
  ## [1.0.3] - 2021-07-11
8
12
 
9
13
  - Loosen the gem requirements
@@ -17,6 +17,8 @@ Gem::Specification.new do |spec|
17
17
  "changelog_uri" => "https://github.com/antulik/active_interaction-extras/blob/master/CHANGELOG.md",
18
18
  }
19
19
 
20
+ spec.required_ruby_version = '>= 2.7'
21
+
20
22
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
21
23
  f.match(%r{^(test|spec|features)/})
22
24
  end
@@ -24,7 +26,7 @@ Gem::Specification.new do |spec|
24
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
27
  spec.require_paths = ["lib"]
26
28
 
27
- spec.add_dependency "active_interaction", ">= 4.0.2"
29
+ spec.add_dependency "active_interaction", ">= 5.0", "< 6.0"
28
30
  spec.add_dependency "activemodel", ">= 6.0"
29
31
  spec.add_dependency "activesupport", ">= 6.0"
30
32
 
@@ -34,4 +36,6 @@ Gem::Specification.new do |spec|
34
36
  spec.add_development_dependency "pry"
35
37
  spec.add_development_dependency "sqlite3"
36
38
  spec.add_development_dependency "activerecord"
39
+ spec.add_development_dependency "activejob"
40
+ spec.add_development_dependency "actionpack"
37
41
  end
@@ -29,6 +29,8 @@ module ActiveInteraction::Extras::FilterExtensions::ObjectClasses
29
29
 
30
30
  def matches?(value)
31
31
  if polymorphic?
32
+ return false if value == nil
33
+
32
34
  class_list.any? { |klass| value.class <= klass }
33
35
  else
34
36
  super
@@ -3,7 +3,14 @@
3
3
  class ActiveInteraction::Extras::Filters::AnythingFilter < ActiveInteraction::Filter
4
4
  register :anything
5
5
 
6
- def matches?(_object)
7
- true
6
+ def matches?(value)
7
+ if value == nil && default?
8
+ # as per v5 there is no way to know if value of `nil` is given by caller or
9
+ # is a default value when it's missing. We want to maintain standard default
10
+ # behaviour when value is `nil`. Returning `false` will trigger default value
11
+ false
12
+ else
13
+ true
14
+ end
8
15
  end
9
16
  end
@@ -10,6 +10,11 @@ class ActiveInteraction::Extras::Filters::UUIDFilter < ActiveInteraction::String
10
10
  end
11
11
 
12
12
  def convert(value)
13
- super&.presence
13
+ value, error = super
14
+ if error
15
+ [value, error]
16
+ else
17
+ [value&.presence, nil]
18
+ end
14
19
  end
15
20
  end
@@ -1,16 +1,19 @@
1
1
  module ActiveInteraction::Extras::Halt
2
2
  extend ActiveSupport::Concern
3
3
 
4
+ THROW_OBJECT = Object.new.freeze
5
+ private_constant :THROW_OBJECT
6
+
4
7
  included do
5
8
  set_callback :execute, :around, lambda { |_interaction, block|
6
- catch :strict_error do
9
+ catch THROW_OBJECT do
7
10
  block.call
8
11
  end
9
12
  }
10
13
  end
11
14
 
12
15
  def halt!
13
- throw :strict_error, errors
16
+ throw THROW_OBJECT, errors
14
17
  end
15
18
 
16
19
  def halt_if_errors!
@@ -1,10 +1,14 @@
1
+ require "active_support/core_ext/object/with_options"
2
+
1
3
  module ActiveInteraction::Extras::ModelFields
2
4
  extend ActiveSupport::Concern
3
5
 
4
6
  # returns hash of all model fields and their values
5
7
  def model_fields(model_name)
6
8
  fields = self.class.model_field_cache[model_name]
7
- inputs.slice(*fields)
9
+ fields.to_h do |field|
10
+ [field, public_send(field)]
11
+ end
8
12
  end
9
13
 
10
14
  # returns hash of only changed model fields and their values
@@ -17,7 +21,7 @@ module ActiveInteraction::Extras::ModelFields
17
21
  # returns hash of only given model fields and their values
18
22
  def given_model_fields(model_name)
19
23
  model_fields(model_name).select do |field, _value|
20
- given?(field)
24
+ inputs.given?(field)
21
25
  end
22
26
  end
23
27
 
@@ -63,22 +67,23 @@ module ActiveInteraction::Extras::ModelFields
63
67
  value_changed = send(model_field).send(field) != send(field)
64
68
  end
65
69
 
66
- given?(field) && value_changed
70
+ inputs.given?(field) && value_changed
67
71
  end
68
72
  end
69
73
 
70
74
  # overwritten to pre-populate model fields
71
- def populate_filters_and_inputs(_inputs)
72
- super.tap do
73
- self.class.filters.each do |name, filter|
74
- next if given?(name)
75
+ def initialize(...)
76
+ super
75
77
 
76
- model_field = self.class.model_field_cache_inverse[name]
77
- next if model_field.nil?
78
+ self.class.filters.each do |name, filter|
79
+ next if inputs.given?(name)
78
80
 
79
- value = public_send(model_field)&.public_send(name)
80
- public_send("#{name}=", filter.clean(value, self))
81
- end
81
+ model_field = self.class.model_field_cache_inverse[name]
82
+ next if model_field.nil?
83
+
84
+ value = public_send(model_field)&.public_send(name)
85
+ input = filter.process(value, self)
86
+ public_send("#{name}=", input.value)
82
87
  end
83
88
  end
84
89
 
@@ -5,6 +5,8 @@ module ActiveInteraction::Extras::StrongParams
5
5
  # TODO: whitelist :params and :form_params, so they could not be used as filters
6
6
  return super if self.class.filters.key?(:params) || self.class.filters.key?(:form_params)
7
7
 
8
+ return super if %i[fetch key? merge].any? { |m| !inputs.respond_to?(m) }
9
+
8
10
  if inputs.key?(:params) && inputs.key?(:form_params)
9
11
  raise ArgumentError, 'Both options :params and :form_params are given. ' \
10
12
  'One or none are accepted.'
@@ -1,5 +1,5 @@
1
1
  module ActiveInteraction
2
2
  module Extras
3
- VERSION = "1.0.3"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_interaction-extras
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Katunin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-07-11 00:00:00.000000000 Z
11
+ date: 2023-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_interaction
@@ -16,14 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.0.2
19
+ version: '5.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '6.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: 4.0.2
29
+ version: '5.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '6.0'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: activemodel
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +142,34 @@ dependencies:
136
142
  - - ">="
137
143
  - !ruby/object:Gem::Version
138
144
  version: '0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: activejob
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: actionpack
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
139
173
  description: Extensions for active_interaction gem
140
174
  email:
141
175
  - antulik@gmail.com
@@ -188,14 +222,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
188
222
  requirements:
189
223
  - - ">="
190
224
  - !ruby/object:Gem::Version
191
- version: '0'
225
+ version: '2.7'
192
226
  required_rubygems_version: !ruby/object:Gem::Requirement
193
227
  requirements:
194
228
  - - ">="
195
229
  - !ruby/object:Gem::Version
196
230
  version: '0'
197
231
  requirements: []
198
- rubygems_version: 3.1.4
232
+ rubygems_version: 3.3.26
199
233
  signing_key:
200
234
  specification_version: 4
201
235
  summary: Extensions for active_interaction gem