business_flow 0.19.6 → 0.21.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: e3d7a4e0a69860a84583948ad6d3b6189619629e2b6b8a3dac4bdc10c5467c8d
4
- data.tar.gz: b3ae0a3456b06ad06826cd55f1c0a7b0c1f5d2789d5d4514b8a155603fb28388
3
+ metadata.gz: d9d5e39246745984117d29b635e976b219dd98849fa878925c740b9abdd0f499
4
+ data.tar.gz: bc30bd5baf31d6ed5305b830506bbf6ae777ccd4f001c74faa0971498af31ec8
5
5
  SHA512:
6
- metadata.gz: '08d17ede87236b175510b8e08d9f09815e77f24dd922d3abd5bbd22f447a6a6abbde9f7a3ab36158b70a9dbde879c0ab7949524c39da2162dd66cf16149c87cd'
7
- data.tar.gz: e738a183b1fc48a0632eb4db0f6c3212b1e270d1e36f3fcdee7bbe1b1c2e0c6655de48036f66f25e7aa289f7b46cbe561e7f9b524534a05e1b9c836719a7e937
6
+ metadata.gz: efc19e3d43bdb141d74450bcb303b668fd8a6b50077cd7174f2ad71fa76a6218c22a015295f8e95639e1752342b16633ab3e84c793c8417d6ada013f52cfeee0
7
+ data.tar.gz: 2c231d90e0b1e32f8ff1eb15f844f1d563065c5ed34d533b2be3852d007d677bfaf22b395b98a696e2415599e78c463470735f4bb83a60955cc78cb08644c3dd
@@ -0,0 +1,81 @@
1
+ version: 2.1
2
+
3
+ orbs:
4
+ ruby: circleci/ruby@2.5.3
5
+
6
+ references:
7
+ RUBY_IMAGE: &RUBY_IMAGE
8
+ cimg/ruby:3.3.9
9
+ RUBY_DEPS: &RUBY_DEPS
10
+ include-branch-in-cache-key: false
11
+ clean-bundle: true
12
+ key: gems-v2
13
+
14
+ jobs:
15
+ refresh_ruby_deps:
16
+ docker:
17
+ - image: *RUBY_IMAGE
18
+ environment:
19
+ BUNDLE_JOBS: '2'
20
+ MALLOC_ARENA_MAX: '2'
21
+ BUNDLE_RETRY: '3'
22
+ steps:
23
+ - checkout
24
+ - run: 'rm .ruby-*'
25
+ - ruby/install-deps:
26
+ <<: *RUBY_DEPS
27
+ rubocop:
28
+ docker:
29
+ - image: *RUBY_IMAGE
30
+ steps:
31
+ - checkout
32
+ - run: 'rm .ruby-*'
33
+ - ruby/install-deps:
34
+ <<: *RUBY_DEPS
35
+ - run: bundle exec rubocop
36
+ reek:
37
+ docker:
38
+ - image: *RUBY_IMAGE
39
+ steps:
40
+ - checkout
41
+ - run: 'rm .ruby-*'
42
+ - ruby/install-deps:
43
+ <<: *RUBY_DEPS
44
+ - run: bundle exec reek
45
+ rspec:
46
+ parameters:
47
+ ruby-version:
48
+ type: string
49
+ docker:
50
+ - image: cimg/ruby:<< parameters.ruby-version >>
51
+ steps:
52
+ - checkout
53
+ - restore_cache:
54
+ key: v3-business_flow-<< parameters.ruby-version >>-{{ checksum "Gemfile.lock" }}-{{ checksum "Appraisals" }}
55
+ - run: bundle config set --local path 'vendor/bundle'
56
+ - run: bundle install
57
+ - run: bundle exec appraisal install --path 'vendor/bundle'
58
+ - save_cache:
59
+ key: v3-business_flow-<< parameters.ruby-version >>-{{ checksum "Gemfile.lock" }}-{{ checksum "Appraisals" }}
60
+ paths:
61
+ - ~/project/vendor/bundle
62
+ - run: bundle exec appraisal rspec --format p
63
+
64
+ workflows:
65
+ full:
66
+ jobs:
67
+ - refresh_ruby_deps
68
+ - rubocop:
69
+ requires:
70
+ - refresh_ruby_deps
71
+ - reek:
72
+ requires:
73
+ - refresh_ruby_deps
74
+ - rspec:
75
+ matrix:
76
+ parameters:
77
+ ruby-version:
78
+ - "3.1.6"
79
+ - "3.2.9"
80
+ - "3.3.9"
81
+ - "3.4.6"
data/.reek.yml CHANGED
@@ -1,6 +1,9 @@
1
1
  # Auto generated by Reeks --todo flag
2
2
  ---
3
3
  detectors:
4
+ ControlParameter:
5
+ exclude:
6
+ - BusinessFlow::ClusterLock#read_attribute_for_validation
4
7
  FeatureEnvy:
5
8
  exclude:
6
9
  - BusinessFlow::ClusterLock::ClassMethods::LockFailure#add_to
@@ -11,3 +14,5 @@ detectors:
11
14
  # N.B. If we want to enable this, we need to tweak the RuboCop config. In particular, RuboCop
12
15
  # prefers `e` for exceptions.
13
16
  enabled: false
17
+ exclude_paths:
18
+ - vendor # For CircleCI.
data/.rubocop.yml CHANGED
@@ -1,11 +1,15 @@
1
- require:
1
+ plugins:
2
2
  - rubocop-rspec
3
+ - rubocop-rspec_rails
4
+ - rubocop-rake
3
5
 
4
6
  AllCops:
5
- TargetRubyVersion: 2.7
7
+ TargetRubyVersion: 3.1
6
8
  NewCops: enable
7
9
  Exclude:
8
10
  - coverage/**/*
11
+ - gemfiles/**/*
12
+ - vendor/bundle/**/* # For CircleCI. Siiiiigh.
9
13
 
10
14
  # Excluding specs here because of RSpec's tendency to look at the line-number info on a backtrace to
11
15
  # decide what to show you when a matcher fails. I.E. a very long line may be needed to ensure you
@@ -18,6 +22,9 @@ Layout/LineLength:
18
22
  RSpec/MultipleMemoizedHelpers:
19
23
  Enabled: false
20
24
 
25
+ RSpec/IncludeExamples:
26
+ Enabled: false
27
+
21
28
  RSpec/IndexedLet:
22
29
  # We have specs that are describing process steps, so... numbers are kinda the best way to describe that.
23
30
  Enabled: false
@@ -48,10 +55,6 @@ Style/RescueModifier:
48
55
  Style/DocumentDynamicEvalDefinition:
49
56
  Enabled: false
50
57
 
51
- # Explicit is bettr than implicit.
52
- FactoryBot/SyntaxMethods:
53
- Enabled: false
54
-
55
58
  # For `match(hash_including(...))`, in specs, this rule would make things pretty unreadable.
56
59
  Layout/ClosingParenthesisIndentation:
57
60
  Exclude:
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.7.4
1
+ ruby-3.3.9
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ ## 0.21.0
2
+
3
+ BUG FIXES:
4
+
5
+ * Resolved issue that could result in ClusterLock continuing to hold lock in the event of a Zookeeper error during the unlock process.
data/README.md CHANGED
@@ -30,9 +30,23 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
30
30
 
31
31
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
32
 
33
+ ### Running Tests
34
+
35
+ ```bash
36
+ # To test against all supported ActiveModel versions:
37
+ appraisal rspec
38
+
39
+ # To test against a specific ActiveModel version:
40
+ appraisal activemodel-5.2 rspec
41
+
42
+ # Validate code quality:
43
+ rubocop
44
+ reek # N.B. RSpec runs _some_ reek tests, but not _all_!
45
+ ```
46
+
33
47
  ## Contributing
34
48
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/business_flow.
49
+ Bug reports and pull requests are welcome on GitHub at <https://github.com/GoCarrot/business_flow>.
36
50
 
37
51
  ## License
38
52
 
data/bin/setup CHANGED
@@ -5,4 +5,10 @@ set -vx
5
5
 
6
6
  bundle install
7
7
 
8
+ if which rbenv >/dev/null; then
9
+ rbenv rehash
10
+ fi
11
+
12
+ appraisal install
13
+
8
14
  # Do any other automated setup that you need to do here
@@ -15,16 +15,16 @@ Gem::Specification.new do |spec|
15
15
  spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
- f.match(%r{^(test|spec|features)/})
18
+ f.match(%r{^(test|spec|features|gemfiles)/|(Appraisals|Gemfile)})
19
19
  end
20
20
  spec.bindir = 'exe'
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ['lib']
23
23
 
24
- spec.add_dependency 'activemodel', '>= 4.2', '< 8'
25
- spec.add_dependency 'activesupport', '>= 4.2', '< 8'
24
+ spec.add_dependency 'activemodel', '>= 4.2', '< 8.1'
25
+ spec.add_dependency 'activesupport', '>= 4.2', '< 8.1'
26
26
 
27
27
  spec.metadata['rubygems_mfa_required'] = 'true'
28
28
 
29
- spec.required_ruby_version = '>= 2.7.0'
29
+ spec.required_ruby_version = '>= 3.1.0'
30
30
  end
@@ -108,7 +108,7 @@ module BusinessFlow
108
108
  instrument(:cache, flow) do |payload|
109
109
  payload[:cache_hit] = true if payload
110
110
  cache_store.fetch(flow.cache_key,
111
- cache_options.to_store_options(flow)) do
111
+ cache_options.to_store_options(flow)) do # rubocop:disable Lint/UselessDefaultValueArgument
112
112
  payload[:cache_hit] = false if payload
113
113
  yield
114
114
  end
@@ -55,7 +55,7 @@ module BusinessFlow
55
55
  instance_eval %{
56
56
  def call(instance, inputs)
57
57
  instance.instance_exec(
58
- #{@callable.arity.zero? ? '' : 'inputs, '}&@callable
58
+ #{'inputs, ' unless @callable.arity.zero?}&@callable
59
59
  )
60
60
  end
61
61
  }, __FILE__, __LINE__ - 6
@@ -45,7 +45,7 @@ module BusinessFlow
45
45
  if key == :cluster_lock
46
46
  ClassMethods.lock_name(self)
47
47
  else
48
- super(key)
48
+ super
49
49
  end
50
50
  end
51
51
 
@@ -107,7 +107,7 @@ module BusinessFlow
107
107
 
108
108
  def build(parameter_object)
109
109
  add_cluster_luck_info_to_result_class
110
- super(parameter_object)
110
+ super
111
111
  end
112
112
 
113
113
  def execute(flow)
@@ -186,11 +186,10 @@ module BusinessFlow
186
186
  end
187
187
 
188
188
  def self.cleanup(lock, zk_connection)
189
- begin
190
- lock&.unlock
191
- rescue ZK::Exceptions::OperationTimeOut
192
- # Just let the connection close handle this.
193
- end
189
+ lock&.unlock
190
+ rescue ZK::Exceptions::OperationTimeOut
191
+ # Just let the connection close handle this.
192
+ ensure
194
193
  zk_connection&.close!
195
194
  end
196
195
 
@@ -208,7 +207,7 @@ module BusinessFlow
208
207
  end
209
208
  end
210
209
 
211
- def self.with_lock(flow, lock_info, &_blk)
210
+ def self.with_lock(flow, lock_info, &)
212
211
  unless BusinessFlow::ClusterLock.disabled?
213
212
  zk_connection, lock =
214
213
  instrumented_acquire_lock(flow, lock_info)
@@ -65,10 +65,10 @@ module BusinessFlow
65
65
  end
66
66
 
67
67
  # Allows a field to be retrieved from the initialiaztion parameters
68
- def wants(field, default = nil, opts = {}, &blk)
68
+ def wants(field, default = nil, opts = {}, &)
69
69
  internal_name = :"wants_#{field}"
70
70
  default = proc {} unless default || block_given?
71
- uses(internal_name, default, opts, &blk)
71
+ uses(internal_name, default, opts, &)
72
72
  inputs.add_wants(ParameterField.new(field, internal_name))
73
73
  end
74
74
 
@@ -238,7 +238,7 @@ module BusinessFlow
238
238
  key
239
239
  end
240
240
 
241
- # Provides the miniimum necessary instance methods to support the use of
241
+ # Provides the minimum necessary instance methods to support the use of
242
242
  # ActiveMode::Errors, outside of what's provided by ActiveModel::Naming
243
243
  module InstanceMethods
244
244
  def read_attribute_for_validation(key)
@@ -270,11 +270,33 @@ module BusinessFlow
270
270
  klass.step_executor.new(klass.step_queue, self).call
271
271
  end
272
272
 
273
+ def errors
274
+ @errors ||= ActiveModel::Errors.new(self)
275
+ end
276
+
277
+ def errors?
278
+ # We're explicitly using the instance variable here so that if no
279
+ # errors have been created, we don't initialize the error object.
280
+ @errors&.present?
281
+ end
282
+
283
+ def valid?(_context = nil)
284
+ # We're explicitly using the instance variable here so that if no
285
+ # errors have been created, we don't initialize the error object.
286
+ @errors.blank?
287
+ end
288
+
289
+ def invalid?(context = nil)
290
+ !valid?(context)
291
+ end
292
+
293
+ private
294
+
273
295
  # Responsible for setting the parameter object and validating inputs.
274
296
  # This is a method directly on the object instead of something we
275
297
  # handle through instance_eval/exec for performance reasons.
276
298
  # :reek:NilCheck This is where we ensure that our needs are non-nil.
277
- private def _business_flow_dsl_initialize(parameter_object, needs)
299
+ def _business_flow_dsl_initialize(parameter_object, needs)
278
300
  @parameter_object = parameter_object
279
301
  needs.each do |need|
280
302
  if send(need).nil?
@@ -286,7 +308,7 @@ module BusinessFlow
286
308
  end
287
309
 
288
310
  # :reek:NilCheck
289
- private def _business_flow_parameter_fetch(key)
311
+ def _business_flow_parameter_fetch(key)
290
312
  value = _business_flow_parameter_inner_fetch(key)
291
313
  # We only want to fall back to a default if we were
292
314
  # given nil. Other falsy vlues should be directly used.
@@ -295,7 +317,7 @@ module BusinessFlow
295
317
  value
296
318
  end
297
319
 
298
- private def _business_flow_parameter_inner_fetch(key)
320
+ def _business_flow_parameter_inner_fetch(key)
299
321
  if @parameter_object.is_a?(Hash) && @parameter_object.key?(key)
300
322
  @parameter_object[key]
301
323
  else
@@ -305,31 +327,11 @@ module BusinessFlow
305
327
  nil
306
328
  end
307
329
 
308
- private def _business_flow_dsl_parameters
330
+ def _business_flow_dsl_parameters
309
331
  @_business_flow_dsl_parameters ||=
310
332
  self.class.inputs.all.to_h { |input| [input, _business_flow_parameter_inner_fetch(input)] }
311
333
  end
312
334
 
313
- def errors
314
- @errors ||= ActiveModel::Errors.new(self)
315
- end
316
-
317
- def errors?
318
- # We're explicitly using the instance variable here so that if no
319
- # errors have been created, we don't initialize the error object.
320
- @errors&.present?
321
- end
322
-
323
- def valid?(_context = nil)
324
- # We're explicitly using the instance variable here so that if no
325
- # errors have been created, we don't initialize the error object.
326
- @errors.blank?
327
- end
328
-
329
- def invalid?(context = nil)
330
- !valid?(context)
331
- end
332
-
333
335
  # Responsible for creating fields on one or more classes and noting the of
334
336
  # field
335
337
  class FieldList
@@ -17,7 +17,8 @@ module BusinessFlow
17
17
  if payload.is_a?(Hash)
18
18
  @payload = Step.new(Callable.new(proc { payload }), {})
19
19
  elsif payload || blk
20
- @payload = Step.new(Callable.new(payload || blk), { default_output: :instrument_payload}.merge(opts))
20
+ @payload = Step.new(Callable.new(payload || blk),
21
+ { default_output: :instrument_payload }.merge(opts))
21
22
  else
22
23
  @payload ||= Step.new(Callable.new(proc { {} }), opts)
23
24
  end
@@ -7,7 +7,10 @@ module BusinessFlow
7
7
 
8
8
  def execute_step(step)
9
9
  i_name = event_name(step)
10
- i_payload = { flow: flow, step: step }.merge(::BusinessFlow::Instrument::ClassMethods.instrument_payload(flow))
10
+ i_payload = { flow: flow,
11
+ step: step }.merge(
12
+ ::BusinessFlow::Instrument::ClassMethods.instrument_payload(flow)
13
+ )
11
14
  ActiveSupport::Notifications.instrument(i_name, i_payload) do |payload|
12
15
  payload[:step_result] = super
13
16
  end
@@ -22,8 +25,6 @@ module BusinessFlow
22
25
  "business_flow.step.#{step_event_name(step)}"
23
26
  end
24
27
 
25
- protected
26
-
27
28
  def flow_name
28
29
  @flow_name ||= flow.class.instrumentation_name
29
30
  end
@@ -229,8 +229,6 @@ module BusinessFlow
229
229
  @callable.to_s
230
230
  end
231
231
 
232
- private
233
-
234
232
  PARAMETERS_NO_INPUT = 'parameter_source'
235
233
  PARAMETERS_WITH_INPUT =
236
234
  '@input_object.parameters_from_source(parameter_source)'
@@ -244,7 +242,9 @@ module BusinessFlow
244
242
  else
245
243
  CONDITION_FAILED
246
244
  end
247
- )
245
+ ).freeze
246
+
247
+ private
248
248
 
249
249
  def update_call_method
250
250
  params = @input_object ? PARAMETERS_WITH_INPUT : PARAMETERS_NO_INPUT
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BusinessFlow
4
- VERSION = '0.19.6'
4
+ VERSION = '0.21.0'
5
5
  end
data/lib/business_flow.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'logger'
3
4
  require 'active_model'
4
5
  require 'active_support/core_ext'
5
6
  require 'business_flow/compat'
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: business_flow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.6
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Scarborough
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-09-17 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activemodel
@@ -19,7 +18,7 @@ dependencies:
19
18
  version: '4.2'
20
19
  - - "<"
21
20
  - !ruby/object:Gem::Version
22
- version: '8'
21
+ version: '8.1'
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +28,7 @@ dependencies:
29
28
  version: '4.2'
30
29
  - - "<"
31
30
  - !ruby/object:Gem::Version
32
- version: '8'
31
+ version: '8.1'
33
32
  - !ruby/object:Gem::Dependency
34
33
  name: activesupport
35
34
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +38,7 @@ dependencies:
39
38
  version: '4.2'
40
39
  - - "<"
41
40
  - !ruby/object:Gem::Version
42
- version: '8'
41
+ version: '8.1'
43
42
  type: :runtime
44
43
  prerelease: false
45
44
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,14 +48,14 @@ dependencies:
49
48
  version: '4.2'
50
49
  - - "<"
51
50
  - !ruby/object:Gem::Version
52
- version: '8'
53
- description:
51
+ version: '8.1'
54
52
  email:
55
53
  - alex@teak.io
56
54
  executables: []
57
55
  extensions: []
58
56
  extra_rdoc_files: []
59
57
  files:
58
+ - ".circleci/config.yml"
60
59
  - ".gitignore"
61
60
  - ".reek.yml"
62
61
  - ".rspec"
@@ -64,8 +63,7 @@ files:
64
63
  - ".ruby-gemset"
65
64
  - ".ruby-version"
66
65
  - ".travis.yml"
67
- - Gemfile
68
- - Gemfile.lock
66
+ - CHANGELOG.md
69
67
  - LICENSE.txt
70
68
  - README.md
71
69
  - Rakefile
@@ -93,7 +91,6 @@ licenses:
93
91
  - MIT
94
92
  metadata:
95
93
  rubygems_mfa_required: 'true'
96
- post_install_message:
97
94
  rdoc_options: []
98
95
  require_paths:
99
96
  - lib
@@ -101,15 +98,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
98
  requirements:
102
99
  - - ">="
103
100
  - !ruby/object:Gem::Version
104
- version: 2.7.0
101
+ version: 3.1.0
105
102
  required_rubygems_version: !ruby/object:Gem::Requirement
106
103
  requirements:
107
104
  - - ">="
108
105
  - !ruby/object:Gem::Version
109
106
  version: '0'
110
107
  requirements: []
111
- rubygems_version: 3.1.6
112
- signing_key:
108
+ rubygems_version: 3.7.2
113
109
  specification_version: 4
114
110
  summary: General purpose management of service object flows
115
111
  test_files: []
data/Gemfile DELETED
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
-
7
- # Specify your gem's dependencies in business_flow.gemspec
8
- gemspec
9
-
10
- gem 'pry', '~> 0.14.2'
11
- gem 'rake', '~> 13.0'
12
- gem 'reek', '~> 6.1'
13
- gem 'retryable', '~> 3.0.4'
14
- gem 'rspec', '~> 3.0'
15
- gem 'rubocop', '~> 1.59.0'
16
- gem 'rubocop-rspec', '~> 2.29.1'
17
- gem 'simplecov', '~> 0.22.0'
18
- gem 'timecop', '~> 0.9.1'
data/Gemfile.lock DELETED
@@ -1,122 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- business_flow (0.19.6)
5
- activemodel (>= 4.2, < 8)
6
- activesupport (>= 4.2, < 8)
7
-
8
- GEM
9
- remote: https://rubygems.org/
10
- specs:
11
- activemodel (7.1.4)
12
- activesupport (= 7.1.4)
13
- activesupport (7.1.4)
14
- base64
15
- bigdecimal
16
- concurrent-ruby (~> 1.0, >= 1.0.2)
17
- connection_pool (>= 2.2.5)
18
- drb
19
- i18n (>= 1.6, < 2)
20
- minitest (>= 5.1)
21
- mutex_m
22
- tzinfo (~> 2.0)
23
- ast (2.4.2)
24
- base64 (0.2.0)
25
- bigdecimal (3.1.8)
26
- coderay (1.1.3)
27
- concurrent-ruby (1.3.4)
28
- connection_pool (2.4.1)
29
- diff-lcs (1.5.1)
30
- docile (1.4.1)
31
- drb (2.2.1)
32
- i18n (1.14.6)
33
- concurrent-ruby (~> 1.0)
34
- json (2.7.2)
35
- kwalify (0.7.2)
36
- language_server-protocol (3.17.0.3)
37
- method_source (1.1.0)
38
- minitest (5.25.1)
39
- mutex_m (0.2.0)
40
- parallel (1.26.3)
41
- parser (3.2.2.4)
42
- ast (~> 2.4.1)
43
- racc
44
- pry (0.14.2)
45
- coderay (~> 1.1)
46
- method_source (~> 1.0)
47
- racc (1.8.1)
48
- rainbow (3.1.1)
49
- rake (13.2.1)
50
- reek (6.1.4)
51
- kwalify (~> 0.7.0)
52
- parser (~> 3.2.0)
53
- rainbow (>= 2.0, < 4.0)
54
- regexp_parser (2.9.2)
55
- retryable (3.0.5)
56
- rexml (3.3.7)
57
- rspec (3.13.0)
58
- rspec-core (~> 3.13.0)
59
- rspec-expectations (~> 3.13.0)
60
- rspec-mocks (~> 3.13.0)
61
- rspec-core (3.13.1)
62
- rspec-support (~> 3.13.0)
63
- rspec-expectations (3.13.3)
64
- diff-lcs (>= 1.2.0, < 2.0)
65
- rspec-support (~> 3.13.0)
66
- rspec-mocks (3.13.1)
67
- diff-lcs (>= 1.2.0, < 2.0)
68
- rspec-support (~> 3.13.0)
69
- rspec-support (3.13.1)
70
- rubocop (1.59.0)
71
- json (~> 2.3)
72
- language_server-protocol (>= 3.17.0)
73
- parallel (~> 1.10)
74
- parser (>= 3.2.2.4)
75
- rainbow (>= 2.2.2, < 4.0)
76
- regexp_parser (>= 1.8, < 3.0)
77
- rexml (>= 3.2.5, < 4.0)
78
- rubocop-ast (>= 1.30.0, < 2.0)
79
- ruby-progressbar (~> 1.7)
80
- unicode-display_width (>= 2.4.0, < 3.0)
81
- rubocop-ast (1.30.0)
82
- parser (>= 3.2.1.0)
83
- rubocop-capybara (2.21.0)
84
- rubocop (~> 1.41)
85
- rubocop-factory_bot (2.26.0)
86
- rubocop (~> 1.41)
87
- rubocop-rspec (2.29.2)
88
- rubocop (~> 1.40)
89
- rubocop-capybara (~> 2.17)
90
- rubocop-factory_bot (~> 2.22)
91
- rubocop-rspec_rails (~> 2.28)
92
- rubocop-rspec_rails (2.29.0)
93
- rubocop (~> 1.40)
94
- ruby-progressbar (1.13.0)
95
- simplecov (0.22.0)
96
- docile (~> 1.1)
97
- simplecov-html (~> 0.11)
98
- simplecov_json_formatter (~> 0.1)
99
- simplecov-html (0.13.1)
100
- simplecov_json_formatter (0.1.4)
101
- timecop (0.9.10)
102
- tzinfo (2.0.6)
103
- concurrent-ruby (~> 1.0)
104
- unicode-display_width (2.6.0)
105
-
106
- PLATFORMS
107
- ruby
108
-
109
- DEPENDENCIES
110
- business_flow!
111
- pry (~> 0.14.2)
112
- rake (~> 13.0)
113
- reek (~> 6.1)
114
- retryable (~> 3.0.4)
115
- rspec (~> 3.0)
116
- rubocop (~> 1.59.0)
117
- rubocop-rspec (~> 2.29.1)
118
- simplecov (~> 0.22.0)
119
- timecop (~> 0.9.1)
120
-
121
- BUNDLED WITH
122
- 2.3.6