stator 0.8.0 → 0.9.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: 3a5f5716fec773ccafe1308d20a5db86c1efc0ba71467cbc82c208e97782ad07
4
- data.tar.gz: '09a4cb4b225d8897ec737da39be2c571e59ad005fd3a771a7afa7f19b56f8ac6'
3
+ metadata.gz: 69cde7f0870cc5691869d9e3dbc94c886a74472ec0c858ded58d7f4fde0b5ac1
4
+ data.tar.gz: 9d72a8142353d239883d4c0d244ca1ef9d46e9dde2bf602e19a7c28e53951e3a
5
5
  SHA512:
6
- metadata.gz: 52e7539f9a6933b0c9badbd8dd276be7cc8518a4bd3f62b98d5095ee5c92aff165fba2e9dd6614c80f93251ba599750dfd7ba1e12f445e3b2339effe46d17d02
7
- data.tar.gz: 1a338be123d40ef09c21a1e986a768e9156de07ea02b911439dd9ce5887d5db528b266d01e1812be610f06d1d0fc8b495d659f5e0d3dd61ae72247a99fec46b0
6
+ metadata.gz: 29bcc2f18487e5d081e8270646b6a5b612f04aae32c7d0341dda09bf1d90440e6f0788215553ea0d3f86528d8a5593df61d9cb62790fe586af49202bc34db7f1
7
+ data.tar.gz: 354327de6f695f02c8dffd2b9ed1a6a717c49cb88628a1b1edd7120e152348c6c2aa39f010018d05cb9f0638b3917afd811c3dce49a840996d1881a003ec985f
@@ -158,7 +158,7 @@ module Stator
158
158
  return unless @record.respond_to?(field_name)
159
159
  return unless @record.respond_to?("#{field_name}=")
160
160
  return unless @record.send(field_name.to_s).nil? || state_changed?
161
- return if @record.will_save_change_to_attribute?(field_name)
161
+ return if @record.will_save_change_to_attribute?(field_name) && !@record.send(field_name.to_s).nil?
162
162
 
163
163
  @record.send("#{field_name}=", (Time.zone || Time).now)
164
164
  end
@@ -3,7 +3,7 @@
3
3
  module Stator
4
4
 
5
5
  MAJOR = 0
6
- MINOR = 8
6
+ MINOR = 9
7
7
  PATCH = 0
8
8
  PRERELEASE = nil
9
9
 
data/stator.gemspec CHANGED
@@ -13,11 +13,15 @@ Gem::Specification.new do |gem|
13
13
  gem.homepage = "https://github.com/guideline-tech/stator"
14
14
  gem.license = "MIT"
15
15
 
16
- gem.files = `git ls-files`.split($/)
16
+ # Specify which files should be added to the gem when it is released.
17
+ gem.files = Dir["lib/**/*"] + Dir["*.gemspec"]
18
+
17
19
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
18
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
20
  gem.require_paths = ["lib"]
20
21
 
22
+ gem.metadata["allowed_push_host"] = "https://rubygems.org"
23
+ gem.metadata["rubygems_mfa_required"] = "true"
24
+
21
25
  gem.add_dependency 'base64'
22
26
  gem.add_dependency 'benchmark'
23
27
  gem.add_dependency 'bigdecimal'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Nelson
@@ -101,30 +101,6 @@ executables: []
101
101
  extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
- - ".github/CODEOWNERS"
105
- - ".github/dependabot.yml"
106
- - ".github/workflows/build.yml"
107
- - ".gitignore"
108
- - ".rspec"
109
- - ".ruby-gemset"
110
- - ".ruby-version"
111
- - Appraisals
112
- - Gemfile
113
- - LICENSE.txt
114
- - README.md
115
- - Rakefile
116
- - gemfiles/activerecord_6.0.gemfile
117
- - gemfiles/activerecord_6.0.gemfile.lock
118
- - gemfiles/activerecord_6.1.gemfile
119
- - gemfiles/activerecord_6.1.gemfile.lock
120
- - gemfiles/activerecord_7.0.gemfile
121
- - gemfiles/activerecord_7.0.gemfile.lock
122
- - gemfiles/activerecord_7.1.gemfile
123
- - gemfiles/activerecord_7.1.gemfile.lock
124
- - gemfiles/activerecord_7.2.gemfile
125
- - gemfiles/activerecord_7.2.gemfile.lock
126
- - gemfiles/activerecord_8.0.gemfile
127
- - gemfiles/activerecord_8.0.gemfile.lock
128
104
  - lib/stator.rb
129
105
  - lib/stator/alias.rb
130
106
  - lib/stator/integration.rb
@@ -132,15 +108,13 @@ files:
132
108
  - lib/stator/model.rb
133
109
  - lib/stator/transition.rb
134
110
  - lib/stator/version.rb
135
- - spec/model_spec.rb
136
- - spec/spec_helper.rb
137
- - spec/support/models.rb
138
- - spec/support/schema.rb
139
111
  - stator.gemspec
140
112
  homepage: https://github.com/guideline-tech/stator
141
113
  licenses:
142
114
  - MIT
143
- metadata: {}
115
+ metadata:
116
+ allowed_push_host: https://rubygems.org
117
+ rubygems_mfa_required: 'true'
144
118
  rdoc_options: []
145
119
  require_paths:
146
120
  - lib
@@ -155,11 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
129
  - !ruby/object:Gem::Version
156
130
  version: '0'
157
131
  requirements: []
158
- rubygems_version: 3.6.7
132
+ rubygems_version: 3.6.8
159
133
  specification_version: 4
160
134
  summary: The simplest of ActiveRecord state machines
161
- test_files:
162
- - spec/model_spec.rb
163
- - spec/spec_helper.rb
164
- - spec/support/models.rb
165
- - spec/support/schema.rb
135
+ test_files: []
data/.github/CODEOWNERS DELETED
@@ -1 +0,0 @@
1
- .github/workflows @guideline-tech/engineering
@@ -1,24 +0,0 @@
1
- version: 2
2
- updates:
3
- - package-ecosystem: "github-actions"
4
- directory: "/"
5
- open-pull-requests-limit: 20
6
- schedule:
7
- interval: "daily"
8
- time: "09:00"
9
- timezone: "America/New_York"
10
- commit-message:
11
- prefix: "[github-actions] "
12
- - package-ecosystem: "bundler"
13
- directory: "/"
14
- schedule:
15
- interval: "daily"
16
- time: "08:30"
17
- timezone: "America/New_York"
18
- allow:
19
- - dependency-type: "all"
20
- versioning-strategy: increase
21
- open-pull-requests-limit: 20
22
- insecure-external-code-execution: deny
23
- commit-message:
24
- prefix: "[bundler] "
@@ -1,23 +0,0 @@
1
- name: build
2
- on:
3
- pull_request:
4
- push:
5
- branches:
6
- - main
7
- jobs:
8
- build:
9
- runs-on: ubuntu-latest
10
- strategy:
11
- fail-fast: false
12
- matrix:
13
- ruby-version: [3.2, 3.3, 3.4]
14
- steps:
15
- - uses: actions/checkout@v4
16
- with:
17
- show-progress: 'false'
18
- - uses: ruby/setup-ruby@v1
19
- with:
20
- ruby-version: ${{ matrix.ruby-version }}
21
- bundler-cache: true # runs `bundle install` and caches installed gems automatically
22
- - run: bundle exec appraisal install
23
- - run: bundle exec appraisal rspec
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --color
2
- --format documentation
data/.ruby-gemset DELETED
@@ -1 +0,0 @@
1
- stator
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 3.4.2
data/Appraisals DELETED
@@ -1,26 +0,0 @@
1
- appraise "activerecord-6.0" do
2
- gem "activerecord", "~> 6.0.0"
3
- gem "concurrent-ruby", "1.3.4"
4
- end
5
-
6
- appraise "activerecord-6.1" do
7
- gem "activerecord", "~> 6.1.0"
8
- gem "concurrent-ruby", "1.3.4"
9
- end
10
-
11
- appraise "activerecord-7.0" do
12
- gem "activerecord", "~> 7.0.0"
13
- gem "concurrent-ruby", "1.3.4"
14
- end
15
-
16
- appraise "activerecord-7.1" do
17
- gem "activerecord", "~> 7.1.0"
18
- end
19
-
20
- appraise "activerecord-7.2" do
21
- gem "activerecord", "~> 7.2.0"
22
- end
23
-
24
- appraise "activerecord-8.0" do
25
- gem "activerecord", "~> 8.0.0"
26
- end
data/Gemfile DELETED
@@ -1,10 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in stator.gemspec
4
- gemspec
5
-
6
- gem "appraisal"
7
-
8
- gem "activerecord-nulldb-adapter"
9
- gem "rake"
10
- gem "rspec"
data/LICENSE.txt DELETED
@@ -1,22 +0,0 @@
1
- Copyright (c) 2013 Mike Nelson
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md DELETED
@@ -1,230 +0,0 @@
1
- # Stator
2
-
3
- Stator is a minimalist's state machine. It's a simple dsl that uses existing ActiveRecord functionality to accomplish common state machine functionality. This is not a full-featured computer-science driven gem, it's a gem that covers the 98% of use cases that I've run into.
4
-
5
- ```ruby
6
- gem 'stator', '~> x.y.z'
7
- ```
8
-
9
- ## Usage
10
-
11
- If you've used the state_machine gem it's a pretty similar dsl. You define your state machine, transitions, states, and your callbacks (if any). One difference is that stator assumes you've set your db column's default value to the initial state.
12
-
13
- ```ruby
14
- class User < ActiveRecord::Base
15
- extend Stator::Model
16
-
17
- # initial state (column default) is "unactivated"
18
- stator do
19
-
20
- transition :semiactivate do
21
- from :unactivated
22
- to :semiactivated
23
- end
24
-
25
- transition :activate do
26
- from :unactivated, :semiactivated
27
- to :activated
28
- end
29
-
30
- transition :deactivate do
31
- from any
32
- to :deactivate
33
- end
34
-
35
- end
36
- end
37
- ```
38
-
39
- Then you use like this:
40
-
41
- ```ruby
42
- u = User.new
43
- u.state
44
- # => 'unactivated'
45
- u.persisted?
46
- # => false
47
- u.semiactivate
48
- # => true
49
- u.state
50
- # => 'semiactivated'
51
- u.persisted?
52
- # => true
53
- ```
54
-
55
- ## Advanced Usage
56
-
57
- The intention of stator was to avoid hijacking ActiveRecord or reinvent the wheel. You can conditionally validate, invoke callbacks, etc. via a conditional block - no magic:
58
-
59
- ```ruby
60
- class User < ActiveRecord::Base
61
- extend Stator::Model
62
-
63
- stator field: :status, track: true do
64
-
65
- transition :activate do
66
- from :unactivated
67
- to :activated
68
-
69
- # conditions is a string condition which will ensure the state
70
- # was one of the `from` states and is one of the `to` states.
71
- conditional do |conditions|
72
- validate :validate_user_ip_not_blacklisted, if: conditions
73
- end
74
-
75
- end
76
-
77
- # conditions is a string condition which will ensure the state
78
- # is one of the ones provided.
79
- conditional :unactivated do |conditions|
80
- validates :email, presence: true, unless: conditions
81
- end
82
-
83
- end
84
- end
85
- ```
86
-
87
- Within a transition, the `conditional` block accepts a `use_previous` option which tells the state checks to use the record's previous_changes rather than the current changes. This is especially useful for after_commit scenarios where the record's changes hash is cleared before the execution begins.
88
-
89
- ```ruby
90
- transition :activate do
91
- from :unactivated
92
- to :activated
93
-
94
- conditional(use_previous: true) do |conditions|
95
- after_commit :send_things, if: conditions
96
- end
97
- ```
98
-
99
- The instance has some convenience methods which are generated by the state machine:
100
-
101
- ```ruby
102
- u = User.new
103
- u.activated?
104
- # => false
105
- u.can_activate?
106
- # => true
107
- ```
108
-
109
- Note that asking if a transition can take place via `can_[transition_name]?` does not invoke validations. It simply determines whether the record is in a state which the transition can take place from.
110
-
111
- The `track: true` option enables timekeeping of the state transition. It will try to set a field in the format of "state_field_at" before saving the record. For example, in the previous state machine the following would occur:
112
-
113
- ```ruby
114
- u = User.new
115
- u.activate
116
-
117
- u.activated_status_at
118
- # => (now)
119
- ```
120
-
121
- `track: true` will also look for a "state_changed_at" field and will update that if it's present.
122
-
123
- You can have multiple state machines for your model:
124
-
125
- ```ruby
126
-
127
- class User < ActiveRecord::Base
128
- extend Stator::Model
129
-
130
- # initial state = asleep
131
- stator do
132
- # wake up
133
- end
134
-
135
- # initial state = incomplete
136
- stator namespace: 'homework', field: 'homework_state' do
137
- # get it done
138
- end
139
- end
140
- ```
141
-
142
- If you need to access the state machine directly, you can do so via the class:
143
-
144
- ```ruby
145
- User._stator(namespace)
146
- ```
147
-
148
- You can opt out of state transition validation by using the `without_state_transition_validations` method:
149
-
150
- ```ruby
151
- user.without_state_transition_validations do
152
- user.activate!
153
- end
154
- ```
155
-
156
- #### Aliasing
157
-
158
- It's a really common case to have a set of states evaluated as a single concept. For example, many apps have a concept of "active" users. You generally see something like this:
159
-
160
- ```ruby
161
- class User < ActiveRecord::Base
162
- ACTIVE_STATES = %w(semiactivated activated)
163
-
164
- scope :active, -> { where(state: ACTIVE_STATES) }
165
-
166
- def active?
167
- self.state.in?(ACTIVE_STATES)
168
- end
169
- end
170
- ```
171
-
172
- To this point, we're doing ok. But how about defining inactive as well? At this point things start getting a little dirtier since a change to ACTIVE_STATES should impact INACTIVE_STATES. For this reason, stator allows you to define state aliases:
173
-
174
- ```ruby
175
- class User < ActiveRecord::Base
176
- extend Stator::Model
177
-
178
- stator do
179
- # forgoing state definitions...
180
-
181
- state_alias :active do
182
- is :semiactivated, :activated
183
- opposite :inactive
184
- end
185
- end
186
- end
187
- ```
188
-
189
- The provided example will define an `active?` and `inactive?` method. If you want to create the constant and/or the scope, just pass them as options to the state_alias method:
190
-
191
- ```ruby
192
- # will generate a User::ACTIVE_STATES constant, User.active scope, and User#active? instance method
193
- state_alias :active, scope: true, constant: true do
194
- # ...
195
- end
196
- ```
197
-
198
- Passing `true` for the scope or constant will result in default naming conventions. You can pass your own names if you'd rather:
199
-
200
- ```ruby
201
- # will generate a User::THE_ACTIVE_STATES constant, User.the_active_ones scope, and User#active? instance method
202
- state_alias :active, scope: :the_active_ones, constant: :the_active_states do
203
- # ...
204
- end
205
- ```
206
-
207
- The `opposite` method also accepts the scope and constant options, but does not yield to a block since the state definitions are inheritenly tied to the ones described in the parent state_alias block.
208
-
209
- ## Development
210
-
211
- Run test suite against current Rails version:
212
-
213
- ```
214
- bundle exec rake spec
215
- ```
216
-
217
- Run test suite against all supported Rails versions using `appraisal`:
218
-
219
- ```
220
- bundle exec appraisal rake spec
221
- ```
222
-
223
- For help updating the `Gemfile` or changing supported Rails versions, see the `appraisal` gem [README](https://github.com/thoughtbot/appraisal#usage).
224
-
225
- Note that the gemfiles in `gemfiles/*` are auto-generated by `appraisal` and should not be modified directly.
226
-
227
- #### TODO
228
-
229
- - Allow for multiple variations of a transition (shift_down style - :third_gear => :second_gear, :second_gear => :first_gear)
230
- - Create adapters for different backends (not just ActiveRecord)
data/Rakefile DELETED
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env rake
2
- require 'rake'
3
- require "bundler/gem_tasks"
4
- require 'rspec/core/rake_task'
5
-
6
- RSpec::Core::RakeTask.new(:spec) do |spec|
7
- spec.pattern = 'spec/*_spec.rb'
8
- end
9
- task :default => :spec
@@ -1,12 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "activerecord-nulldb-adapter"
7
- gem "rake"
8
- gem "rspec"
9
- gem "activerecord", "~> 6.0.0"
10
- gem "concurrent-ruby", "1.3.4"
11
-
12
- gemspec path: "../"
@@ -1,102 +0,0 @@
1
- PATH
2
- remote: ..
3
- specs:
4
- stator (0.8.0)
5
- activerecord (>= 6.0)
6
- base64
7
- benchmark
8
- bigdecimal
9
- logger
10
- mutex_m
11
-
12
- GEM
13
- remote: https://rubygems.org/
14
- specs:
15
- activemodel (6.0.6.1)
16
- activesupport (= 6.0.6.1)
17
- activerecord (6.0.6.1)
18
- activemodel (= 6.0.6.1)
19
- activesupport (= 6.0.6.1)
20
- activerecord-nulldb-adapter (1.1.1)
21
- activerecord (>= 6.0, < 8.1)
22
- activesupport (6.0.6.1)
23
- concurrent-ruby (~> 1.0, >= 1.0.2)
24
- i18n (>= 0.7, < 2)
25
- minitest (~> 5.1)
26
- tzinfo (~> 1.1)
27
- zeitwerk (~> 2.2, >= 2.2.2)
28
- appraisal (2.5.0)
29
- bundler
30
- rake
31
- thor (>= 0.14.0)
32
- base64 (0.2.0)
33
- benchmark (0.4.0)
34
- bigdecimal (3.1.9)
35
- concurrent-ruby (1.3.4)
36
- diff-lcs (1.6.1)
37
- i18n (1.14.7)
38
- concurrent-ruby (~> 1.0)
39
- logger (1.7.0)
40
- minitest (5.25.5)
41
- mutex_m (0.3.0)
42
- rake (13.2.1)
43
- rspec (3.13.0)
44
- rspec-core (~> 3.13.0)
45
- rspec-expectations (~> 3.13.0)
46
- rspec-mocks (~> 3.13.0)
47
- rspec-core (3.13.3)
48
- rspec-support (~> 3.13.0)
49
- rspec-expectations (3.13.3)
50
- diff-lcs (>= 1.2.0, < 2.0)
51
- rspec-support (~> 3.13.0)
52
- rspec-mocks (3.13.2)
53
- diff-lcs (>= 1.2.0, < 2.0)
54
- rspec-support (~> 3.13.0)
55
- rspec-support (3.13.2)
56
- thor (1.3.2)
57
- thread_safe (0.3.6)
58
- tzinfo (1.2.11)
59
- thread_safe (~> 0.1)
60
- zeitwerk (2.7.2)
61
-
62
- PLATFORMS
63
- ruby
64
-
65
- DEPENDENCIES
66
- activerecord (~> 6.0.0)
67
- activerecord-nulldb-adapter
68
- appraisal
69
- concurrent-ruby (= 1.3.4)
70
- rake
71
- rspec
72
- stator!
73
-
74
- CHECKSUMS
75
- activemodel (6.0.6.1) sha256=8856126e35d604084e5531dc6d29095bee431b93e7899687dfec59da929b6f5f
76
- activerecord (6.0.6.1) sha256=be387b7c8997ea5373d42bf56d2789914a742b67357701677d769ce8a31ba139
77
- activerecord-nulldb-adapter (1.1.1) sha256=034c91106183b954b072fba14c2786adf1a2b9e852ce04f85f823afaf03e9820
78
- activesupport (6.0.6.1) sha256=6f01805552bb9b123db05b506ddc64af8285ccfc835a3169c9ec6c8a1d8c43ac
79
- appraisal (2.5.0) sha256=36989221be127913b0dba8d114da2001e6b2dceea7bd4951200eaba764eed3ce
80
- base64 (0.2.0) sha256=0f25e9b21a02a0cc0cea8ef92b2041035d39350946e8789c562b2d1a3da01507
81
- benchmark (0.4.0) sha256=0f12f8c495545e3710c3e4f0480f63f06b4c842cc94cec7f33a956f5180e874a
82
- bigdecimal (3.1.9) sha256=2ffc742031521ad69c2dfc815a98e426a230a3d22aeac1995826a75dabfad8cc
83
- concurrent-ruby (1.3.4) sha256=d4aa926339b0a86b5b5054a0a8c580163e6f5dcbdfd0f4bb916b1a2570731c32
84
- diff-lcs (1.6.1) sha256=12a5a83f3e37a8e2f4427268e305914d5f1879f22b4e73bb1a09f76a3dd86cd4
85
- i18n (1.14.7) sha256=ceba573f8138ff2c0915427f1fc5bdf4aa3ab8ae88c8ce255eb3ecf0a11a5d0f
86
- logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
87
- minitest (5.25.5) sha256=391b6c6cb43a4802bfb7c93af1ebe2ac66a210293f4a3fb7db36f2fc7dc2c756
88
- mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
89
- rake (13.2.1) sha256=46cb38dae65d7d74b6020a4ac9d48afed8eb8149c040eccf0523bec91907059d
90
- rspec (3.13.0) sha256=d490914ac1d5a5a64a0e1400c1d54ddd2a501324d703b8cfe83f458337bab993
91
- rspec-core (3.13.3) sha256=25136507f4f9cf2e8977a2851e64e438b4331646054e345998714108745cdfe4
92
- rspec-expectations (3.13.3) sha256=0e6b5af59b900147698ea0ff80456c4f2e69cac4394fbd392fbd1ca561f66c58
93
- rspec-mocks (3.13.2) sha256=2327335def0e1665325a9b617e3af9ae20272741d80ac550336309a7c59abdef
94
- rspec-support (3.13.2) sha256=cea3a2463fd9b84b9dcc9685efd80ea701aa8f7b3decb3b3ce795ed67737dbec
95
- stator (0.8.0)
96
- thor (1.3.2) sha256=eef0293b9e24158ccad7ab383ae83534b7ad4ed99c09f96f1a6b036550abbeda
97
- thread_safe (0.3.6) sha256=9ed7072821b51c57e8d6b7011a8e282e25aeea3a4065eab326e43f66f063b05a
98
- tzinfo (1.2.11) sha256=6501f6a12175ca0243118b83f7c7c2b7978aaec7a0980550a124d007ad6361b6
99
- zeitwerk (2.7.2) sha256=842e067cb11eb923d747249badfb5fcdc9652d6f20a1f06453317920fdcd4673
100
-
101
- BUNDLED WITH
102
- 2.6.7
@@ -1,12 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal"
6
- gem "activerecord-nulldb-adapter"
7
- gem "rake"
8
- gem "rspec"
9
- gem "activerecord", "~> 6.1.0"
10
- gem "concurrent-ruby", "1.3.4"
11
-
12
- gemspec path: "../"