interactify 0.3.0.pre.alpha.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -0
  3. data/.ruby-version +1 -0
  4. data/Appraisals +23 -0
  5. data/CHANGELOG.md +14 -0
  6. data/README.md +33 -44
  7. data/gemfiles/.bundle/config +2 -0
  8. data/gemfiles/no_railties_no_sidekiq.gemfile +18 -0
  9. data/gemfiles/no_railties_no_sidekiq.gemfile.lock +127 -0
  10. data/gemfiles/railties_6.gemfile +14 -0
  11. data/gemfiles/railties_6.gemfile.lock +253 -0
  12. data/gemfiles/railties_6_no_sidekiq.gemfile +19 -0
  13. data/gemfiles/railties_6_no_sidekiq.gemfile.lock +159 -0
  14. data/gemfiles/railties_6_sidekiq.gemfile +20 -0
  15. data/gemfiles/railties_6_sidekiq.gemfile.lock +168 -0
  16. data/gemfiles/railties_7_no_sidekiq.gemfile +19 -0
  17. data/gemfiles/railties_7_no_sidekiq.gemfile.lock +158 -0
  18. data/gemfiles/railties_7_sidekiq.gemfile +20 -0
  19. data/gemfiles/railties_7_sidekiq.gemfile.lock +167 -0
  20. data/lib/interactify/async/job_klass.rb +63 -0
  21. data/lib/interactify/async/job_maker.rb +58 -0
  22. data/lib/interactify/async/jobable.rb +96 -0
  23. data/lib/interactify/async/null_job.rb +23 -0
  24. data/lib/interactify/configuration.rb +15 -0
  25. data/lib/interactify/contracts/call_wrapper.rb +19 -0
  26. data/lib/interactify/contracts/failure.rb +8 -0
  27. data/lib/interactify/contracts/helpers.rb +81 -0
  28. data/lib/interactify/contracts/mismatching_promise_error.rb +19 -0
  29. data/lib/interactify/contracts/promising.rb +36 -0
  30. data/lib/interactify/contracts/setup.rb +39 -0
  31. data/lib/interactify/dsl/each_chain.rb +90 -0
  32. data/lib/interactify/dsl/if_interactor.rb +81 -0
  33. data/lib/interactify/dsl/if_klass.rb +82 -0
  34. data/lib/interactify/dsl/organizer.rb +32 -0
  35. data/lib/interactify/dsl/unique_klass_name.rb +23 -0
  36. data/lib/interactify/dsl/wrapper.rb +74 -0
  37. data/lib/interactify/dsl.rb +12 -6
  38. data/lib/interactify/rspec_matchers/matchers.rb +68 -0
  39. data/lib/interactify/version.rb +1 -1
  40. data/lib/interactify/{interactor_wiring → wiring}/callable_representation.rb +2 -2
  41. data/lib/interactify/{interactor_wiring → wiring}/constants.rb +4 -4
  42. data/lib/interactify/{interactor_wiring → wiring}/error_context.rb +1 -1
  43. data/lib/interactify/{interactor_wiring → wiring}/files.rb +1 -1
  44. data/lib/interactify/{interactor_wiring.rb → wiring.rb} +5 -5
  45. data/lib/interactify.rb +58 -38
  46. metadata +48 -71
  47. data/lib/interactify/async_job_klass.rb +0 -61
  48. data/lib/interactify/call_wrapper.rb +0 -17
  49. data/lib/interactify/contract_failure.rb +0 -6
  50. data/lib/interactify/contract_helpers.rb +0 -71
  51. data/lib/interactify/each_chain.rb +0 -88
  52. data/lib/interactify/if_interactor.rb +0 -70
  53. data/lib/interactify/interactor_wrapper.rb +0 -72
  54. data/lib/interactify/job_maker.rb +0 -56
  55. data/lib/interactify/jobable.rb +0 -92
  56. data/lib/interactify/mismatching_promise_error.rb +0 -17
  57. data/lib/interactify/organizer.rb +0 -30
  58. data/lib/interactify/promising.rb +0 -34
  59. data/lib/interactify/rspec/matchers.rb +0 -67
  60. data/lib/interactify/unique_klass_name.rb +0 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 918f4f6ae335bb5b8a748603af6a2e9d91dc11ad3d887803bbb2c7b2ba41730e
4
- data.tar.gz: fe6506fe246a82d48f5a614d5c576cf74e49f38953c1d4ae98d52f1649f03aaf
3
+ metadata.gz: 0ec61ad4a3a73d2c36430e29d01ae754b670ebdaab812f3d946b61adff9bf8ae
4
+ data.tar.gz: b4441070a5178d6933f97adf465bce313e638fef6dc42901d4e6d84c7a8e73d2
5
5
  SHA512:
6
- metadata.gz: ce377154a79b527f6eaebe3258d76aadd327521abbe86847b8c9d87b5710e1782bdb02b20b3ef3661ac6dc4ee1d0c6843fdd819ccf6dda8f701e9d95063d5a9c
7
- data.tar.gz: 553271645575873bc2a95968c2ff7f01a556dd24527974b6a7bb958a8eeb9f8bb66504bdace2c3736e6faac82c1a438f07d27afa85c3fdc8ac5b051cac4e20c5
6
+ metadata.gz: b0552ea7eabc4a818888a255bb674c430babf57504b921e0cfd48949e9c0cee8bd3eb722b584e28c2a1aed7643f1b277f335b827a3af1cc6d2e121feb7c0856c
7
+ data.tar.gz: 73995415964151caf4f4b1977cecd558791ff14e4d475a26dda813b4403c29e2c4c59d06daf63e67800e29e44cbca558e26c970acdbef635d1a781fbfbdffada
data/.rubocop.yml CHANGED
@@ -1,6 +1,7 @@
1
1
  AllCops:
2
2
  NewCops: enable
3
3
  Exclude:
4
+ - 'gemfiles/**/*'
4
5
  - 'spec/fixtures/**/*'
5
6
  - 'tmp/**/*'
6
7
  - '.git/**/*'
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.1.4
data/Appraisals ADDED
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ appraise "railties-7-sidekiq" do
4
+ gem "railties", "7"
5
+ gem "sidekiq", "7"
6
+ end
7
+
8
+ appraise "railties-7-no-sidekiq" do
9
+ gem "railties", "7"
10
+ end
11
+
12
+ appraise "railties-6-sidekiq" do
13
+ gem "railties", "6"
14
+ gem "sidekiq", "7"
15
+ end
16
+
17
+ appraise "railties-6-no-sidekiq" do
18
+ gem "railties", "6"
19
+ end
20
+
21
+ appraise "no-railties-no-sidekiq" do
22
+ # nothing extra
23
+ end
data/CHANGELOG.md CHANGED
@@ -11,3 +11,17 @@
11
11
  ## [0.3.0-alpha.1] - 2023-12-29
12
12
 
13
13
  - Added support for `{if: :condition, then: A, else: B}` in organizers
14
+
15
+ ## [0.3.0-alpha.2] - 2023-12-29
16
+
17
+ - Remove deep_matching development dependency
18
+
19
+ ## [0.3.0-RC1] - 2023-12-29
20
+
21
+ - Fixed to work with and make optional dependencies for sidekiq and railties. Confirmed as working with ruby >= 3.1.4
22
+
23
+ ## [0.4.0] - 2023-12-29
24
+
25
+ - All internal restructuring/refactoring into domains.
26
+ - Add support for organize `self.if(:condition, then: A, else: B)` syntax
27
+ - change location of matchers to `require 'interactify/rspec_matchers/matchers'`
data/README.md CHANGED
@@ -1,6 +1,17 @@
1
1
  # Interactify
2
2
 
3
- Interactify enhances Rails applications by simplifying complex interactor chains. This gem builds on [interactors](https://github.com/collectiveidea/interactor) and [interactor-contracts](https://github.com/michaelherold/interactor-contracts) to improve readability and maintainability of business logic. It's optimized for Rails projects using Sidekiq, offering advanced features for chain management and debugging. Interactify is about making interactor usage in Rails more efficient and less error-prone, reducing the overhead of traditional interactor orchestration.
3
+ [![Gem Version](https://badge.fury.io/rb/interactify.svg)](https://badge.fury.io/rb/interactify)
4
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
5
+ ![Ruby 3.3.0](https://img.shields.io/badge/ruby-3.3.0-green.svg)
6
+ ![Ruby 3.2.2](https://img.shields.io/badge/ruby-3.2.2-green.svg)
7
+ ![Ruby 3.1.4](https://img.shields.io/badge/ruby-3.1.4-green.svg)
8
+ [![Code Climate](https://codeclimate.com/github/markburns/interactify/badges/gpa.svg)](https://codeclimate.com/github/markburns/interactify)
9
+
10
+ Interactify enhances Rails applications by simplifying complex interactor chains.
11
+ This gem builds on [interactors](https://github.com/collectiveidea/interactor) and [interactor-contracts](https://github.com/michaelherold/interactor-contracts) to improve readability and maintainability of business logic.
12
+ We depend on activesupport, and optionally on railties and sidekiq. So it's a good fit for Rails projects using Sidekiq, offering advanced features for chain management and debugging.
13
+ Interactify is about making interactor usage in Rails more efficient and less error-prone, reducing the overhead of traditional interactor orchestration.
14
+
4
15
  ## Installation
5
16
 
6
17
  ```ruby
@@ -10,6 +21,7 @@ gem 'interactify'
10
21
  ## Usage
11
22
 
12
23
  ### Initializer
24
+
13
25
  ```ruby
14
26
  # in config/initializers/interactify.rb
15
27
  Interactify.configure do |config|
@@ -28,9 +40,10 @@ end
28
40
 
29
41
  ### Using the RSpec matchers
30
42
  ```ruby
31
- # e.g. in spec/supoort/interactify.rb
32
- require 'interactify/rspec/matchers'
43
+ # e.g. in spec/support/interactify.rb
44
+ require 'interactify/rspec_matchers/matchers'
33
45
 
46
+ # in specs
34
47
  expect(described_class).to expect_inputs(:foo, :bar, :baz)
35
48
  expect(described_class).to promise_outputs(:fee, :fi, :fo, :fum)
36
49
  ```
@@ -211,26 +224,22 @@ class OuterThing
211
224
  # ... boilerplate ...
212
225
  organize \
213
226
  SetupStep,
227
+
228
+ # lambda conditional
214
229
  self.if(->(c){ c.thing == 'a' }, DoThingA, DoThingB),
215
- end
216
230
 
217
- # or hash syntax
218
- class OuterThing
219
- # ... boilerplate ...
220
- organize \
231
+ # context conditional
232
+ self.if(:some_key_on_context, DoThingA, DoThingB),
233
+
234
+ # alternative hash syntax
221
235
  {if: :key_set_on_context, then: DoThingA, else: DoThingB},
222
- AfterBothCases
223
- end
224
- ```
225
236
 
226
- ### Conditionals with a key from the context
237
+ # method call with hash syntax, plus implicit chaining
238
+ self.if(:key_set_on_context, then: [A, B, C], else: [B, C, D]),
227
239
 
228
- ```ruby
229
- class OuterThing
230
- # ... boilerplate ...
231
- organize \
232
- self.if(:key_set_on_context, DoThingA, DoThingB),
233
- AfterBothCases
240
+ # method call with lambda, hash syntax, and implicit chaining
241
+ self.if(->(ctx) { ctx.this }, then: [A, B, C], else: [B, C, D]),
242
+ AfterDoThis
234
243
  end
235
244
  ```
236
245
 
@@ -250,6 +259,7 @@ class SomeOrganizer
250
259
  end
251
260
 
252
261
  ```
262
+
253
263
  ### Contract validation failures
254
264
  Sometimes contract validation fails at runtime as an exception. It's something unexpected and you'll have an `Interactor::Failure` sent to rollbar/sentry/honeybadger.
255
265
  If the context is large it's often hard to spot what the actual problem is or where it occurred.
@@ -298,7 +308,6 @@ Actual promises are:
298
308
  step1
299
309
  ```
300
310
 
301
-
302
311
  ### Interactor wiring specs
303
312
  Sometimes you have an interactor chain that fails because something is expected deeper down the chain and not provided further up the chain.
304
313
  The existing way to solve this is with enough integration specs to catch them, hunting and sticking a `byebug`, `debugger` or `binding.pry` in at suspected locations and inferring where in the chain the wiring went awry.
@@ -310,7 +319,7 @@ In order to detect these wiring issues, stick a spec in your test suite like thi
310
319
  ```ruby
311
320
  RSpec.describe 'InteractorWiring' do
312
321
  it 'validates the interactors in the whole app', :aggregate_failures do
313
- errors = Interactify.validate_app(ignore: [/Priam/])
322
+ errors = Interactify.validate_app(ignore: [/SomeClassName/, AnotherClass, 'SomeClassNameString'])
314
323
 
315
324
  expect(errors).to eq ''
316
325
  end
@@ -338,17 +347,7 @@ expect(described_class).to promise_outputs(:order)
338
347
  ### Sidekiq Jobs
339
348
  Sometimes you want to asyncify an interactor.
340
349
 
341
- ```ruby
342
- # before
343
- class SomeInteractor
344
- include Interactify
345
-
346
- def call
347
- # ...
348
- end
349
- end
350
- ```
351
-
350
+ #### before
352
351
  ```diff
353
352
  - SomeInteractor.call(*args)
354
353
  + class SomeInteractorJob
@@ -362,24 +361,14 @@ end
362
361
  + SomeInteractorJob.perform_async(*args)
363
362
  ```
364
363
 
365
- ```ruby
366
- # after
367
- class SomeInteractor
368
- include Interactify
369
-
370
- def call
371
- # ...
372
- end
373
- end
374
- ```
375
-
376
- No need to manually create a job class or handle the perform/call impedance mismatch
377
-
364
+ #### after
378
365
  ```diff
379
366
  - SomeInteractor.call!(*args)
380
367
  + SomeInteractor::Async.call!(*args)
381
368
  ```
382
369
 
370
+ No need to manually create a job class or handle the perform/call impedance mismatch
371
+
383
372
  This also makes it easy to add cron jobs to run interactors. As any interactor can be asyncified.
384
373
  By using it's internal Async class.
385
374
 
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_RETRY: "1"
@@ -0,0 +1,18 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rake", "~> 13.0"
6
+
7
+ group :development do
8
+ gem "appraisal"
9
+ gem "bundler", "~> 2.0"
10
+ end
11
+
12
+ group :test do
13
+ gem "debug"
14
+ gem "rspec", "~> 3.0"
15
+ gem "simplecov", require: false
16
+ end
17
+
18
+ gemspec path: "../"
@@ -0,0 +1,127 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ interactify (0.4.0)
5
+ activesupport (>= 6.0.0)
6
+ interactor
7
+ interactor-contracts
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ activesupport (7.1.2)
13
+ base64
14
+ bigdecimal
15
+ concurrent-ruby (~> 1.0, >= 1.0.2)
16
+ connection_pool (>= 2.2.5)
17
+ drb
18
+ i18n (>= 1.6, < 2)
19
+ minitest (>= 5.1)
20
+ mutex_m
21
+ tzinfo (~> 2.0)
22
+ appraisal (2.5.0)
23
+ bundler
24
+ rake
25
+ thor (>= 0.14.0)
26
+ base64 (0.2.0)
27
+ bigdecimal (3.1.5)
28
+ concurrent-ruby (1.2.2)
29
+ connection_pool (2.4.1)
30
+ debug (1.9.1)
31
+ irb (~> 1.10)
32
+ reline (>= 0.3.8)
33
+ diff-lcs (1.5.0)
34
+ docile (1.4.0)
35
+ drb (2.2.0)
36
+ ruby2_keywords
37
+ dry-configurable (1.0.1)
38
+ dry-core (~> 1.0, < 2)
39
+ zeitwerk (~> 2.6)
40
+ dry-core (1.0.0)
41
+ concurrent-ruby (~> 1.0)
42
+ zeitwerk (~> 2.6)
43
+ dry-inflector (1.0.0)
44
+ dry-initializer (3.1.1)
45
+ dry-logic (1.5.0)
46
+ concurrent-ruby (~> 1.0)
47
+ dry-core (~> 1.0, < 2)
48
+ zeitwerk (~> 2.6)
49
+ dry-schema (1.13.3)
50
+ concurrent-ruby (~> 1.0)
51
+ dry-configurable (~> 1.0, >= 1.0.1)
52
+ dry-core (~> 1.0, < 2)
53
+ dry-initializer (~> 3.0)
54
+ dry-logic (>= 1.4, < 2)
55
+ dry-types (>= 1.7, < 2)
56
+ zeitwerk (~> 2.6)
57
+ dry-types (1.7.1)
58
+ concurrent-ruby (~> 1.0)
59
+ dry-core (~> 1.0)
60
+ dry-inflector (~> 1.0)
61
+ dry-logic (~> 1.4)
62
+ zeitwerk (~> 2.6)
63
+ dry-validation (1.10.0)
64
+ concurrent-ruby (~> 1.0)
65
+ dry-core (~> 1.0, < 2)
66
+ dry-initializer (~> 3.0)
67
+ dry-schema (>= 1.12, < 2)
68
+ zeitwerk (~> 2.6)
69
+ i18n (1.14.1)
70
+ concurrent-ruby (~> 1.0)
71
+ interactor (3.1.2)
72
+ interactor-contracts (0.3.0)
73
+ dry-validation (~> 1.0)
74
+ interactor (~> 3)
75
+ io-console (0.7.1)
76
+ irb (1.11.0)
77
+ rdoc
78
+ reline (>= 0.3.8)
79
+ minitest (5.20.0)
80
+ mutex_m (0.2.0)
81
+ psych (5.1.2)
82
+ stringio
83
+ rake (13.1.0)
84
+ rdoc (6.6.2)
85
+ psych (>= 4.0.0)
86
+ reline (0.4.1)
87
+ io-console (~> 0.5)
88
+ rspec (3.12.0)
89
+ rspec-core (~> 3.12.0)
90
+ rspec-expectations (~> 3.12.0)
91
+ rspec-mocks (~> 3.12.0)
92
+ rspec-core (3.12.2)
93
+ rspec-support (~> 3.12.0)
94
+ rspec-expectations (3.12.3)
95
+ diff-lcs (>= 1.2.0, < 2.0)
96
+ rspec-support (~> 3.12.0)
97
+ rspec-mocks (3.12.6)
98
+ diff-lcs (>= 1.2.0, < 2.0)
99
+ rspec-support (~> 3.12.0)
100
+ rspec-support (3.12.1)
101
+ ruby2_keywords (0.0.5)
102
+ simplecov (0.22.0)
103
+ docile (~> 1.1)
104
+ simplecov-html (~> 0.11)
105
+ simplecov_json_formatter (~> 0.1)
106
+ simplecov-html (0.12.3)
107
+ simplecov_json_formatter (0.1.4)
108
+ stringio (3.1.0)
109
+ thor (1.3.0)
110
+ tzinfo (2.0.6)
111
+ concurrent-ruby (~> 1.0)
112
+ zeitwerk (2.6.12)
113
+
114
+ PLATFORMS
115
+ ruby
116
+
117
+ DEPENDENCIES
118
+ appraisal
119
+ bundler (~> 2.0)
120
+ debug
121
+ interactify!
122
+ rake (~> 13.0)
123
+ rspec (~> 3.0)
124
+ simplecov
125
+
126
+ BUNDLED WITH
127
+ 2.4.22
@@ -0,0 +1,14 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "simplecov", require: false
6
+ gem "rake", "~> 13.0"
7
+ gem "railties", "6"
8
+ gem "sidekiq", "7"
9
+
10
+ group :test do
11
+ gem "rspec", "~> 3.0"
12
+ end
13
+
14
+ gemspec path: "../"
@@ -0,0 +1,253 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ interactify (0.3.0.pre.alpha.2)
5
+ interactor
6
+ interactor-contracts
7
+ rails (>= 6.0.0)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ actioncable (6.0.0)
13
+ actionpack (= 6.0.0)
14
+ nio4r (~> 2.0)
15
+ websocket-driver (>= 0.6.1)
16
+ actionmailbox (6.0.0)
17
+ actionpack (= 6.0.0)
18
+ activejob (= 6.0.0)
19
+ activerecord (= 6.0.0)
20
+ activestorage (= 6.0.0)
21
+ activesupport (= 6.0.0)
22
+ mail (>= 2.7.1)
23
+ actionmailer (6.0.0)
24
+ actionpack (= 6.0.0)
25
+ actionview (= 6.0.0)
26
+ activejob (= 6.0.0)
27
+ mail (~> 2.5, >= 2.5.4)
28
+ rails-dom-testing (~> 2.0)
29
+ actionpack (6.0.0)
30
+ actionview (= 6.0.0)
31
+ activesupport (= 6.0.0)
32
+ rack (~> 2.0)
33
+ rack-test (>= 0.6.3)
34
+ rails-dom-testing (~> 2.0)
35
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
36
+ actiontext (6.0.0)
37
+ actionpack (= 6.0.0)
38
+ activerecord (= 6.0.0)
39
+ activestorage (= 6.0.0)
40
+ activesupport (= 6.0.0)
41
+ nokogiri (>= 1.8.5)
42
+ actionview (6.0.0)
43
+ activesupport (= 6.0.0)
44
+ builder (~> 3.1)
45
+ erubi (~> 1.4)
46
+ rails-dom-testing (~> 2.0)
47
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
48
+ activejob (6.0.0)
49
+ activesupport (= 6.0.0)
50
+ globalid (>= 0.3.6)
51
+ activemodel (6.0.0)
52
+ activesupport (= 6.0.0)
53
+ activerecord (6.0.0)
54
+ activemodel (= 6.0.0)
55
+ activesupport (= 6.0.0)
56
+ activestorage (6.0.0)
57
+ actionpack (= 6.0.0)
58
+ activejob (= 6.0.0)
59
+ activerecord (= 6.0.0)
60
+ marcel (~> 0.3.1)
61
+ activesupport (6.0.0)
62
+ concurrent-ruby (~> 1.0, >= 1.0.2)
63
+ i18n (>= 0.7, < 2)
64
+ minitest (~> 5.1)
65
+ tzinfo (~> 1.1)
66
+ zeitwerk (~> 2.1, >= 2.1.8)
67
+ appraisal (2.5.0)
68
+ bundler
69
+ rake
70
+ thor (>= 0.14.0)
71
+ builder (3.2.4)
72
+ concurrent-ruby (1.2.2)
73
+ connection_pool (2.4.1)
74
+ crass (1.0.6)
75
+ date (3.3.4)
76
+ debug (1.9.1)
77
+ irb (~> 1.10)
78
+ reline (>= 0.3.8)
79
+ diff-lcs (1.5.0)
80
+ docile (1.4.0)
81
+ dry-configurable (1.1.0)
82
+ dry-core (~> 1.0, < 2)
83
+ zeitwerk (~> 2.6)
84
+ dry-core (1.0.1)
85
+ concurrent-ruby (~> 1.0)
86
+ zeitwerk (~> 2.6)
87
+ dry-inflector (1.0.0)
88
+ dry-initializer (3.1.1)
89
+ dry-logic (1.5.0)
90
+ concurrent-ruby (~> 1.0)
91
+ dry-core (~> 1.0, < 2)
92
+ zeitwerk (~> 2.6)
93
+ dry-schema (1.13.3)
94
+ concurrent-ruby (~> 1.0)
95
+ dry-configurable (~> 1.0, >= 1.0.1)
96
+ dry-core (~> 1.0, < 2)
97
+ dry-initializer (~> 3.0)
98
+ dry-logic (>= 1.4, < 2)
99
+ dry-types (>= 1.7, < 2)
100
+ zeitwerk (~> 2.6)
101
+ dry-types (1.7.1)
102
+ concurrent-ruby (~> 1.0)
103
+ dry-core (~> 1.0)
104
+ dry-inflector (~> 1.0)
105
+ dry-logic (~> 1.4)
106
+ zeitwerk (~> 2.6)
107
+ dry-validation (1.10.0)
108
+ concurrent-ruby (~> 1.0)
109
+ dry-core (~> 1.0, < 2)
110
+ dry-initializer (~> 3.0)
111
+ dry-schema (>= 1.12, < 2)
112
+ zeitwerk (~> 2.6)
113
+ erubi (1.12.0)
114
+ globalid (1.1.0)
115
+ activesupport (>= 5.0)
116
+ i18n (1.14.1)
117
+ concurrent-ruby (~> 1.0)
118
+ interactor (3.1.2)
119
+ interactor-contracts (0.3.0)
120
+ dry-validation (~> 1.0)
121
+ interactor (~> 3)
122
+ io-console (0.7.1)
123
+ irb (1.11.0)
124
+ rdoc
125
+ reline (>= 0.3.8)
126
+ loofah (2.22.0)
127
+ crass (~> 1.0.2)
128
+ nokogiri (>= 1.12.0)
129
+ mail (2.8.1)
130
+ mini_mime (>= 0.1.1)
131
+ net-imap
132
+ net-pop
133
+ net-smtp
134
+ marcel (0.3.3)
135
+ mimemagic (~> 0.3.2)
136
+ method_source (1.0.0)
137
+ mimemagic (0.3.10)
138
+ nokogiri (~> 1)
139
+ rake
140
+ mini_mime (1.1.5)
141
+ mini_portile2 (2.8.5)
142
+ minitest (5.20.0)
143
+ net-imap (0.4.9)
144
+ date
145
+ net-protocol
146
+ net-pop (0.1.2)
147
+ net-protocol
148
+ net-protocol (0.2.2)
149
+ timeout
150
+ net-smtp (0.4.0)
151
+ net-protocol
152
+ nio4r (2.7.0)
153
+ nokogiri (1.16.0)
154
+ mini_portile2 (~> 2.8.2)
155
+ racc (~> 1.4)
156
+ psych (5.1.2)
157
+ stringio
158
+ racc (1.7.3)
159
+ rack (2.2.8)
160
+ rack-test (2.1.0)
161
+ rack (>= 1.3)
162
+ rails (6.0.0)
163
+ actioncable (= 6.0.0)
164
+ actionmailbox (= 6.0.0)
165
+ actionmailer (= 6.0.0)
166
+ actionpack (= 6.0.0)
167
+ actiontext (= 6.0.0)
168
+ actionview (= 6.0.0)
169
+ activejob (= 6.0.0)
170
+ activemodel (= 6.0.0)
171
+ activerecord (= 6.0.0)
172
+ activestorage (= 6.0.0)
173
+ activesupport (= 6.0.0)
174
+ bundler (>= 1.3.0)
175
+ railties (= 6.0.0)
176
+ sprockets-rails (>= 2.0.0)
177
+ rails-dom-testing (2.2.0)
178
+ activesupport (>= 5.0.0)
179
+ minitest
180
+ nokogiri (>= 1.6)
181
+ rails-html-sanitizer (1.6.0)
182
+ loofah (~> 2.21)
183
+ nokogiri (~> 1.14)
184
+ railties (6.0.0)
185
+ actionpack (= 6.0.0)
186
+ activesupport (= 6.0.0)
187
+ method_source
188
+ rake (>= 0.8.7)
189
+ thor (>= 0.20.3, < 2.0)
190
+ rake (13.1.0)
191
+ rdoc (6.6.2)
192
+ psych (>= 4.0.0)
193
+ redis-client (0.19.1)
194
+ connection_pool
195
+ reline (0.4.1)
196
+ io-console (~> 0.5)
197
+ rspec (3.12.0)
198
+ rspec-core (~> 3.12.0)
199
+ rspec-expectations (~> 3.12.0)
200
+ rspec-mocks (~> 3.12.0)
201
+ rspec-core (3.12.2)
202
+ rspec-support (~> 3.12.0)
203
+ rspec-expectations (3.12.3)
204
+ diff-lcs (>= 1.2.0, < 2.0)
205
+ rspec-support (~> 3.12.0)
206
+ rspec-mocks (3.12.6)
207
+ diff-lcs (>= 1.2.0, < 2.0)
208
+ rspec-support (~> 3.12.0)
209
+ rspec-support (3.12.1)
210
+ sidekiq (7.0.0)
211
+ concurrent-ruby (< 2)
212
+ connection_pool (>= 2.3.0)
213
+ rack (>= 2.2.4)
214
+ redis-client (>= 0.9.0)
215
+ simplecov (0.22.0)
216
+ docile (~> 1.1)
217
+ simplecov-html (~> 0.11)
218
+ simplecov_json_formatter (~> 0.1)
219
+ simplecov-html (0.12.3)
220
+ simplecov_json_formatter (0.1.4)
221
+ sprockets (4.2.1)
222
+ concurrent-ruby (~> 1.0)
223
+ rack (>= 2.2.4, < 4)
224
+ sprockets-rails (3.4.2)
225
+ actionpack (>= 5.2)
226
+ activesupport (>= 5.2)
227
+ sprockets (>= 3.0.0)
228
+ stringio (3.1.0)
229
+ thor (1.3.0)
230
+ thread_safe (0.3.6)
231
+ timeout (0.4.1)
232
+ tzinfo (1.2.11)
233
+ thread_safe (~> 0.1)
234
+ websocket-driver (0.7.6)
235
+ websocket-extensions (>= 0.1.0)
236
+ websocket-extensions (0.1.5)
237
+ zeitwerk (2.6.12)
238
+
239
+ PLATFORMS
240
+ ruby
241
+
242
+ DEPENDENCIES
243
+ appraisal
244
+ debug
245
+ interactify!
246
+ railties (= 6)
247
+ rake (~> 13.0)
248
+ rspec (~> 3.0)
249
+ sidekiq (= 7)
250
+ simplecov
251
+
252
+ BUNDLED WITH
253
+ 2.4.19
@@ -0,0 +1,19 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rake", "~> 13.0"
6
+ gem "railties", "6"
7
+
8
+ group :development do
9
+ gem "appraisal"
10
+ gem "bundler", "~> 2.0"
11
+ end
12
+
13
+ group :test do
14
+ gem "debug"
15
+ gem "rspec", "~> 3.0"
16
+ gem "simplecov", require: false
17
+ end
18
+
19
+ gemspec path: "../"