active_interaction 4.0.3 → 4.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: 965fd20ed2231b6cb6a86c1849e11138cb694a77e05cb24e0091674964bbbd51
4
- data.tar.gz: b86949412bf7a60d767fa27dec8b0092f0c0b053afb11bd50a5a5f09f83dc921
3
+ metadata.gz: 557de518b6e1a33937d70d31e6c29dd6179384372e082595f8087b3efcdae784
4
+ data.tar.gz: 2ba312b6ddc61043acbc8bcb48dbbc4a60010be6701a5a368325d0a14fc4c557
5
5
  SHA512:
6
- metadata.gz: 31878456f6b33fb902254fd44cc532d411a97db32ff347ca8bc8164166897d54cd0eae31e0add30f4f130f4e744a16cdb8970859d8bf79a842258b4c0ec38c0f
7
- data.tar.gz: 17addfece52ce88fe5757eae06e14930508d209747caba20bd3e1d9b1aff140d2525e9548ec4a19dd1388dc7ef7e780706e35850351e8b487cda36c3f5b10bd9
6
+ metadata.gz: 28674a0400c7bd8dafaae7430f1609fdbd3cd93e3ca5c60a07d2df2970b825a7e218d2482026f0a6365ba11fdd6518830fdfb96f496909ee7d8cb63154c5b8e7
7
+ data.tar.gz: e527210922d3e9af79ff3c61f2e5d1ba873fe9eb31be543ffd640d255f69de19b40d0621ff9900db19e3cf3f553c8cfbcf583954385d2c8a3db2f24a747037f7
data/CHANGELOG.md CHANGED
@@ -1,19 +1,44 @@
1
+ # [4.1.0][] (2021-12-30)
2
+
3
+ ## Added
4
+
5
+ - [#518][] - Add Rails 7 support
6
+
7
+ # [4.0.6][] (2021-10-13)
8
+
9
+ ## Fixed
10
+
11
+ - [#515][] - Filters nested in arrays should accept default values as indicated in the documentation.
12
+
13
+ # [4.0.5][] (2021-07-11)
14
+
15
+ ## Fixed
16
+
17
+ - [#480][] - Interfaces used inside hashes failed to recognize `nil` as a non-value.
18
+
19
+ # [4.0.4][] (2021-07-03)
20
+
21
+ ## Fixed
22
+
23
+ - [#510][] - Hash parameters failed when working outside of Rails.
24
+ - [#511][] - Nested filters with options but no `:class` failed to have `:class` automatically added.
25
+
1
26
  # [4.0.3][] (2021-06-24)
2
27
 
3
- ## Fix
28
+ ## Fixed
4
29
 
5
30
  - [#499][] - `given?` now recognizes multi-part date inputs by their primary key name
6
31
  - [#493][] - `compose` now properly accepts `Inputs`
7
32
 
8
33
  # [4.0.2][] (2021-06-22)
9
34
 
10
- ## Fix
35
+ ## Fixed
11
36
 
12
37
  - [#505][] - Nested Interface filters using the `:methods` option threw an error.
13
38
 
14
39
  # [4.0.1][] (2021-05-26)
15
40
 
16
- ## Fix
41
+ ## Fixed
17
42
 
18
43
  - Fix regression of filter name relaxing.
19
44
  - [#495][] - Fix time filter ignoring time zones
@@ -77,7 +102,7 @@ class Example < ActiveInteraction::Base
77
102
 
78
103
  validates :first_name,
79
104
  presence: true,
80
- unless: 'first_name.nil?'
105
+ unless: -> { first_name.nil? }
81
106
 
82
107
  def execute
83
108
  # ...
@@ -176,13 +201,13 @@ has a particular module included, you'll need to use the newly expanded
176
201
 
177
202
  ## Fixed
178
203
 
179
- - [486][] `valid?` returns true if block not called and error added in execute around callback.
204
+ - [#486][] `valid?` returns true if block not called and error added in execute around callback.
180
205
 
181
206
  # [3.8.2][] (2020-04-22)
182
207
 
183
208
  ## Fixed
184
209
 
185
- - [479][] Composed interactions that throw errors now show a complete backtrace instead of ending at the `run!` of the outermost interaction.
210
+ - [#479][] Composed interactions that throw errors now show a complete backtrace instead of ending at the `run!` of the outermost interaction.
186
211
 
187
212
  # [3.8.1][] (2020-04-04)
188
213
 
@@ -951,7 +976,11 @@ Example.run
951
976
 
952
977
  - Initial release.
953
978
 
954
- [4.0.2]: https://github.com/AaronLasseigne/active_interaction/compare/v4.0.2...v4.0.3
979
+ [4.1.0]: https://github.com/AaronLasseigne/active_interaction/compare/v4.0.6...v4.1.0
980
+ [4.0.6]: https://github.com/AaronLasseigne/active_interaction/compare/v4.0.5...v4.0.6
981
+ [4.0.5]: https://github.com/AaronLasseigne/active_interaction/compare/v4.0.4...v4.0.5
982
+ [4.0.4]: https://github.com/AaronLasseigne/active_interaction/compare/v4.0.3...v4.0.4
983
+ [4.0.3]: https://github.com/AaronLasseigne/active_interaction/compare/v4.0.2...v4.0.3
955
984
  [4.0.2]: https://github.com/AaronLasseigne/active_interaction/compare/v4.0.1...v4.0.2
956
985
  [4.0.1]: https://github.com/AaronLasseigne/active_interaction/compare/v4.0.0...v4.0.1
957
986
  [4.0.0]: https://github.com/AaronLasseigne/active_interaction/compare/v3.8.3...v4.0.0
@@ -1163,3 +1192,9 @@ Example.run
1163
1192
  [#505]: https://github.com/AaronLasseigne/active_interaction/issues/505
1164
1193
  [#499]: https://github.com/AaronLasseigne/active_interaction/issues/499
1165
1194
  [#493]: https://github.com/AaronLasseigne/active_interaction/issues/493
1195
+ [#510]: https://github.com/AaronLasseigne/active_interaction/issues/510
1196
+ [#511]: https://github.com/AaronLasseigne/active_interaction/issues/511
1197
+ [#412]: https://github.com/AaronLasseigne/active_interaction/issues/412
1198
+ [#480]: https://github.com/AaronLasseigne/active_interaction/issues/480
1199
+ [#515]: https://github.com/AaronLasseigne/active_interaction/issues/515
1200
+ [#518]: https://github.com/AaronLasseigne/active_interaction/issues/518
data/README.md CHANGED
@@ -5,8 +5,6 @@ It's an implementation of the command pattern in Ruby.
5
5
 
6
6
  [![Version](https://img.shields.io/gem/v/active_interaction.svg?style=flat-square)](https://rubygems.org/gems/active_interaction)
7
7
  [![Test](https://img.shields.io/github/workflow/status/AaronLasseigne/active_interaction/Test?label=Test&style=flat-square)](https://github.com/AaronLasseigne/active_interaction/actions?query=workflow%3ATest)
8
- [![Coverage](https://img.shields.io/coveralls/github/AaronLasseigne/active_interaction.svg?style=flat-square)](https://coveralls.io/r/orgsync/active_interaction)
9
- [![Climate](https://img.shields.io/codeclimate/maintainability/orgsync/active_interaction.svg?style=flat-square)](https://codeclimate.com/github/orgsync/active_interaction)
10
8
 
11
9
  ---
12
10
 
@@ -58,20 +56,20 @@ handles your verbs.
58
56
  - [Translations](#translations)
59
57
  - [Credits](#credits)
60
58
 
61
- [Full Documentation][]
59
+ [API Documentation][]
62
60
 
63
61
  ## Installation
64
62
 
65
63
  Add it to your Gemfile:
66
64
 
67
65
  ``` rb
68
- gem 'active_interaction', '~> 4.0'
66
+ gem 'active_interaction', '~> 4.1'
69
67
  ```
70
68
 
71
69
  Or install it manually:
72
70
 
73
71
  ``` sh
74
- $ gem install active_interaction --version '~> 4.0'
72
+ $ gem install active_interaction --version '~> 4.1'
75
73
  ```
76
74
 
77
75
  This project uses [Semantic Versioning][]. Check out [GitHub releases][] for a
@@ -977,10 +975,10 @@ class UpdateAccount < ActiveInteraction::Base
977
975
 
978
976
  validates :first_name,
979
977
  presence: true,
980
- unless: 'first_name.nil?'
978
+ unless: -> { first_name.nil? }
981
979
  validates :last_name,
982
980
  presence: true,
983
- unless: 'last_name.nil?'
981
+ unless: -> { last_name.nil? }
984
982
 
985
983
  def execute
986
984
  account.first_name = first_name if first_name.present?
@@ -1021,9 +1019,9 @@ end
1021
1019
 
1022
1020
  ### Callbacks
1023
1021
 
1024
- ActiveModel provides a powerful framework for defining callbacks.
1025
- ActiveInteraction hooks into that framework to allow hooking into various parts
1026
- of an interaction's lifecycle.
1022
+ [ActiveSupport::Callbacks][] provides a powerful framework for defining callbacks.
1023
+ ActiveInteraction uses that framework to allow hooking into various parts of an
1024
+ interaction's lifecycle.
1027
1025
 
1028
1026
  ``` rb
1029
1027
  class Increment < ActiveInteraction::Base
@@ -1448,8 +1446,8 @@ I18nInteraction.run(name: false).errors.messages[:name]
1448
1446
 
1449
1447
  ## Credits
1450
1448
 
1451
- ActiveInteraction is brought to you by [Aaron Lasseigne][] and
1452
- [Taylor Fausak][] and was originally built at [OrgSync][].
1449
+ ActiveInteraction is brought to you by [Aaron Lasseigne][].
1450
+ Along with Aaron, [Taylor Fausak][] helped create and maintain ActiveInteraction but has since moved on.
1453
1451
 
1454
1452
  If you want to contribute to ActiveInteraction, please read
1455
1453
  [our contribution guidelines][]. A [complete list of contributors][] is
@@ -1458,14 +1456,11 @@ available on GitHub.
1458
1456
  ActiveInteraction is licensed under [the MIT License][].
1459
1457
 
1460
1458
  [activeinteraction]: https://github.com/AaronLasseigne/active_interaction
1461
- [Full Documentation]: http://rubydoc.info/github/orgsync/active_interaction
1459
+ [API Documentation]: http://rubydoc.info/github/AaronLasseigne/active_interaction
1462
1460
  [semantic versioning]: http://semver.org/spec/v2.0.0.html
1463
1461
  [GitHub releases]: https://github.com/AaronLasseigne/active_interaction/releases
1464
- [the announcement post]: http://devblog.orgsync.com/2015/05/06/announcing-active-interaction-2/
1465
- [active_model-errors_details]: https://github.com/cowbell/active_model-errors_details
1466
1462
  [aaron lasseigne]: https://github.com/AaronLasseigne
1467
1463
  [taylor fausak]: https://github.com/tfausak
1468
- [orgsync]: https://github.com/orgsync
1469
1464
  [our contribution guidelines]: CONTRIBUTING.md
1470
1465
  [complete list of contributors]: https://github.com/AaronLasseigne/active_interaction/graphs/contributors
1471
1466
  [the mit license]: LICENSE.md
@@ -1474,5 +1469,5 @@ ActiveInteraction is licensed under [the MIT License][].
1474
1469
  [the filters section]: #filters
1475
1470
  [the errors section]: #errors
1476
1471
  [the optional inputs section]: #optional-inputs
1477
- [aire]: example
1478
1472
  [`with_options`]: http://api.rubyonrails.org/classes/Object.html#method-i-with_options
1473
+ [ActiveSupport::Callbacks]: https://api.rubyonrails.org/classes/ActiveSupport/Callbacks.html
@@ -73,7 +73,7 @@ module ActiveInteraction
73
73
  end
74
74
 
75
75
  def add_option_in_place_of_name(klass, options)
76
- if (keys = FILTER_NAME_OR_OPTION[klass.to_s]) && (keys && options.keys).empty?
76
+ if (keys = FILTER_NAME_OR_OPTION[klass.to_s]) && (keys & options.keys).empty?
77
77
  options.merge(
78
78
  "#{keys.first}": name.to_s.singularize.camelize.to_sym
79
79
  )
@@ -91,7 +91,7 @@ module ActiveInteraction
91
91
 
92
92
  filters[filters.size.to_s.to_sym] = filter
93
93
 
94
- validate!(filter, names)
94
+ validate!(names)
95
95
  end
96
96
  end
97
97
  # rubocop:enable Style/MissingRespondToMissing
@@ -100,13 +100,11 @@ module ActiveInteraction
100
100
  # @param names [Array<Symbol>]
101
101
  #
102
102
  # @raise [InvalidFilterError]
103
- def validate!(filter, names)
103
+ def validate!(names)
104
104
  raise InvalidFilterError, 'multiple filters in array block' if filters.size > 1
105
105
 
106
106
  raise InvalidFilterError, 'attribute names in array block' unless names.empty?
107
107
 
108
- raise InvalidDefaultError, 'default values in array block' if filter.default?
109
-
110
108
  nil
111
109
  end
112
110
  end
@@ -44,7 +44,7 @@ module ActiveInteraction
44
44
  end
45
45
 
46
46
  def adjust_output(value, context)
47
- value = value.to_hash.with_indifferent_access
47
+ value = ActiveSupport::HashWithIndifferentAccess.new(value.to_hash)
48
48
 
49
49
  initial = strip? ? ActiveSupport::HashWithIndifferentAccess.new : value
50
50
 
@@ -48,6 +48,7 @@ module ActiveInteraction
48
48
  end
49
49
 
50
50
  def matches?(object)
51
+ return false if object.nil?
51
52
  return matches_methods?(object) if options.key?(:methods)
52
53
 
53
54
  const = from
@@ -61,7 +62,7 @@ module ActiveInteraction
61
62
  end
62
63
 
63
64
  def matches_methods?(object)
64
- options.fetch(:methods, []).all? { |method| object.respond_to?(method) }
65
+ options[:methods].all? { |method| object.respond_to?(method) }
65
66
  end
66
67
 
67
68
  def checking_class_inheritance?(object, from)
@@ -73,48 +73,8 @@ module ActiveInteraction
73
73
  end
74
74
  end
75
75
 
76
- def initialize
77
- @groups = {}
78
- @groups.default_proc = ->(hash, key) { hash[key] = [] }
79
-
80
- super(@inputs = {})
81
- end
82
-
83
- # Associates the `value` with the `key`. Allows the `key`/`value` pair to
84
- # be associated with one or more groups.
85
- #
86
- # @example
87
- # inputs.store(:key, :value)
88
- # # => :value
89
- # inputs.store(:key, :value, %i[a b])
90
- # # => :value
91
- #
92
- # @param key [Object] The key to store the value under.
93
- # @param value [Object] The value to store.
94
- # @param groups [Array<Object>] The groups to store the pair under.
95
- #
96
- # @return [Object] value
97
- # @private
98
- def store(key, value, groups = [])
99
- groups.each do |group|
100
- @groups[group] << key
101
- end
102
-
103
- super(key, value)
104
- end
105
-
106
- # Returns inputs from the group name given.
107
- #
108
- # @example
109
- # inputs.group(:a)
110
- # # => {key: :value}
111
- #
112
- # @param name [Object] Name of the group to return.
113
- #
114
- # @return [Hash] Inputs from the group name given.
115
- # @private
116
- def group(name)
117
- @inputs.select { |k, _| @groups[name].include?(k) }
76
+ def initialize(inputs = {})
77
+ super(inputs)
118
78
  end
119
79
  end
120
80
  end
@@ -14,26 +14,17 @@ module ActiveInteraction
14
14
  filter.clean(inputs[name], context)
15
15
  rescue NoDefaultError
16
16
  nil
17
- rescue InvalidNestedValueError,
18
- InvalidValueError,
19
- MissingValueError => e
20
- errors << error_args(filter, e)
17
+ rescue InvalidNestedValueError => e
18
+ errors << [filter.name, :invalid_nested, { name: e.filter_name.inspect, value: e.input_value.inspect }]
19
+ rescue InvalidValueError
20
+ errors << [filter.name, :invalid_type, { type: type(filter) }]
21
+ rescue MissingValueError
22
+ errors << [filter.name, :missing]
21
23
  end
22
24
  end
23
25
 
24
26
  private
25
27
 
26
- def error_args(filter, error)
27
- case error
28
- when InvalidNestedValueError
29
- [filter.name, :invalid_nested, { name: error.filter_name.inspect, value: error.input_value.inspect }]
30
- when InvalidValueError
31
- [filter.name, :invalid_type, { type: type(filter) }]
32
- when MissingValueError
33
- [filter.name, :missing]
34
- end
35
- end
36
-
37
28
  # @param filter [Filter]
38
29
  def type(filter)
39
30
  I18n.translate("#{Base.i18n_scope}.types.#{filter.class.slug}")
@@ -4,5 +4,5 @@ module ActiveInteraction
4
4
  # The version number.
5
5
  #
6
6
  # @return [Gem::Version]
7
- VERSION = Gem::Version.new('4.0.3')
7
+ VERSION = Gem::Version.new('4.1.0')
8
8
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_model'
4
+ require 'active_support/hash_with_indifferent_access'
4
5
 
5
6
  # Manage application specific business logic.
6
7
  #
@@ -25,14 +25,6 @@ describe ActiveInteraction::ArrayFilter, :filter do
25
25
  end
26
26
  end
27
27
 
28
- context 'with a nested default' do
29
- let(:block) { proc { array default: nil } }
30
-
31
- it 'raises an error' do
32
- expect { filter }.to raise_error ActiveInteraction::InvalidDefaultError
33
- end
34
- end
35
-
36
28
  describe '#cast' do
37
29
  let(:result) { filter.send(:cast, value, nil) }
38
30
 
@@ -137,6 +129,18 @@ describe ActiveInteraction::ArrayFilter, :filter do
137
129
  expect(filter.filters[:'0'].options[:methods]).to eql %i[to_s]
138
130
  end
139
131
  end
132
+
133
+ context 'with another option set' do
134
+ let(:block) { proc { public_send(:object, converter: :new) } }
135
+ let(:name) { :objects }
136
+
137
+ it 'has a filter with the right options' do
138
+ expect(filter.filters[:'0'].options).to have_key(:class)
139
+ expect(filter.filters[:'0'].options[:class]).to eql :Object
140
+ expect(filter.filters[:'0'].options).to have_key(:converter)
141
+ expect(filter.filters[:'0'].options[:converter]).to eql :new
142
+ end
143
+ end
140
144
  end
141
145
  end
142
146
 
@@ -61,6 +61,17 @@ describe ActiveInteraction::InterfaceFilter, :filter do
61
61
  end
62
62
  end
63
63
 
64
+ context 'that is nil' do
65
+ let(:name) { :interface_module }
66
+ let(:value) { nil }
67
+
68
+ it 'raises an error' do
69
+ expect do
70
+ result
71
+ end.to raise_error ActiveInteraction::MissingValueError
72
+ end
73
+ end
74
+
64
75
  context 'with the class itself' do
65
76
  let(:name) { :interface_class }
66
77
  let(:value) do
@@ -19,7 +19,7 @@ describe HashInteraction do
19
19
  before { inputs[:a] = a }
20
20
 
21
21
  it 'returns the correct value for :a' do
22
- expect(result[:a]).to eql a.with_indifferent_access
22
+ expect(result[:a]).to eql ActiveSupport::HashWithIndifferentAccess.new(a)
23
23
  end
24
24
 
25
25
  it 'returns the correct value for :b' do
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,3 @@
1
- # Disable code coverage for JRuby because it always reports 0% coverage.
2
- if RUBY_ENGINE != 'jruby'
3
- require 'coveralls'
4
- Coveralls.wear!
5
- end
6
-
7
1
  require 'i18n'
8
2
  I18n.config.enforce_available_locales = true if I18n.config.respond_to?(:enforce_available_locales)
9
3
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_interaction
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.3
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Lasseigne
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-06-25 00:00:00.000000000 Z
12
+ date: 2021-12-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
@@ -20,7 +20,7 @@ dependencies:
20
20
  version: '5'
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
- version: '7'
23
+ version: '8'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
@@ -30,23 +30,29 @@ dependencies:
30
30
  version: '5'
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: '7'
33
+ version: '8'
34
34
  - !ruby/object:Gem::Dependency
35
- name: actionpack
35
+ name: activesupport
36
36
  requirement: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
41
- type: :development
40
+ version: '5'
41
+ - - "<"
42
+ - !ruby/object:Gem::Version
43
+ version: '8'
44
+ type: :runtime
42
45
  prerelease: false
43
46
  version_requirements: !ruby/object:Gem::Requirement
44
47
  requirements:
45
48
  - - ">="
46
49
  - !ruby/object:Gem::Version
47
- version: '0'
50
+ version: '5'
51
+ - - "<"
52
+ - !ruby/object:Gem::Version
53
+ version: '8'
48
54
  - !ruby/object:Gem::Dependency
49
- name: activerecord
55
+ name: actionpack
50
56
  requirement: !ruby/object:Gem::Requirement
51
57
  requirements:
52
58
  - - ">="
@@ -60,33 +66,33 @@ dependencies:
60
66
  - !ruby/object:Gem::Version
61
67
  version: '0'
62
68
  - !ruby/object:Gem::Dependency
63
- name: benchmark-ips
69
+ name: activerecord
64
70
  requirement: !ruby/object:Gem::Requirement
65
71
  requirements:
66
- - - "~>"
72
+ - - ">="
67
73
  - !ruby/object:Gem::Version
68
- version: '2.7'
74
+ version: '0'
69
75
  type: :development
70
76
  prerelease: false
71
77
  version_requirements: !ruby/object:Gem::Requirement
72
78
  requirements:
73
- - - "~>"
79
+ - - ">="
74
80
  - !ruby/object:Gem::Version
75
- version: '2.7'
81
+ version: '0'
76
82
  - !ruby/object:Gem::Dependency
77
- name: coveralls
83
+ name: benchmark-ips
78
84
  requirement: !ruby/object:Gem::Requirement
79
85
  requirements:
80
86
  - - "~>"
81
87
  - !ruby/object:Gem::Version
82
- version: '0.8'
88
+ version: '2.7'
83
89
  type: :development
84
90
  prerelease: false
85
91
  version_requirements: !ruby/object:Gem::Requirement
86
92
  requirements:
87
93
  - - "~>"
88
94
  - !ruby/object:Gem::Version
89
- version: '0.8'
95
+ version: '2.7'
90
96
  - !ruby/object:Gem::Dependency
91
97
  name: kramdown
92
98
  requirement: !ruby/object:Gem::Requirement
@@ -135,42 +141,42 @@ dependencies:
135
141
  requirements:
136
142
  - - "~>"
137
143
  - !ruby/object:Gem::Version
138
- version: 1.17.0
144
+ version: 1.24.0
139
145
  type: :development
140
146
  prerelease: false
141
147
  version_requirements: !ruby/object:Gem::Requirement
142
148
  requirements:
143
149
  - - "~>"
144
150
  - !ruby/object:Gem::Version
145
- version: 1.17.0
151
+ version: 1.24.0
146
152
  - !ruby/object:Gem::Dependency
147
153
  name: rubocop-rake
148
154
  requirement: !ruby/object:Gem::Requirement
149
155
  requirements:
150
156
  - - "~>"
151
157
  - !ruby/object:Gem::Version
152
- version: 0.5.1
158
+ version: 0.6.0
153
159
  type: :development
154
160
  prerelease: false
155
161
  version_requirements: !ruby/object:Gem::Requirement
156
162
  requirements:
157
163
  - - "~>"
158
164
  - !ruby/object:Gem::Version
159
- version: 0.5.1
165
+ version: 0.6.0
160
166
  - !ruby/object:Gem::Dependency
161
167
  name: rubocop-rspec
162
168
  requirement: !ruby/object:Gem::Requirement
163
169
  requirements:
164
170
  - - "~>"
165
171
  - !ruby/object:Gem::Version
166
- version: '2.1'
172
+ version: 2.7.0
167
173
  type: :development
168
174
  prerelease: false
169
175
  version_requirements: !ruby/object:Gem::Requirement
170
176
  requirements:
171
177
  - - "~>"
172
178
  - !ruby/object:Gem::Version
173
- version: '2.1'
179
+ version: 2.7.0
174
180
  - !ruby/object:Gem::Dependency
175
181
  name: yard
176
182
  requirement: !ruby/object:Gem::Requirement
@@ -303,6 +309,7 @@ metadata:
303
309
  homepage_uri: https://github.com/AaronLasseigne/active_interaction
304
310
  source_code_uri: https://github.com/AaronLasseigne/active_interaction
305
311
  changelog_uri: https://github.com/AaronLasseigne/active_interaction/blob/master/CHANGELOG.md
312
+ rubygems_mfa_required: 'true'
306
313
  post_install_message:
307
314
  rdoc_options: []
308
315
  require_paths:
@@ -318,7 +325,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
318
325
  - !ruby/object:Gem::Version
319
326
  version: '0'
320
327
  requirements: []
321
- rubygems_version: 3.2.3
328
+ rubygems_version: 3.2.15
322
329
  signing_key:
323
330
  specification_version: 4
324
331
  summary: Manage application specific business logic.