rails_ops 1.2.3 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +2 -0
- data/CHANGELOG.md +9 -0
- data/README.md +26 -0
- data/VERSION +1 -1
- data/lib/rails_ops/model_mixins/marshalling.rb +2 -3
- data/lib/rails_ops/operation/model/destroy.rb +1 -0
- data/lib/rails_ops/operation/model/load.rb +54 -1
- data/lib/rails_ops/operation/model/update.rb +1 -0
- data/rails_ops.gemspec +4 -4
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 365397242478d0f5dd89c5eadf97871c2e5d9a6a2f5b59dbfdbdb5a060bf56e0
|
4
|
+
data.tar.gz: 45f57e7a2abfe574b2c7caeaa135fb4896c364bdc9e36c5adc673640e6be1351
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c58cba8d71ca052e676323d98a0dbdd58d39db4f3c1c9a15ed95d4f8714ae3377bbd4e7a45c5b83bccf74dba34ac573a690cd839174a3600ea03d0c3abab5514
|
7
|
+
data.tar.gz: f3eebf9294ec8a7a84be52329964b6ee5a717099d52b10dcf408d2a7eaf92d19072b3b85b84affe33348117ed113a2cfeb10beed412c371270920ecbe86370a4
|
data/.github/workflows/ruby.yml
CHANGED
@@ -29,6 +29,8 @@ jobs:
|
|
29
29
|
ruby-version: '3.0.1'
|
30
30
|
- rails-version: '7.0'
|
31
31
|
ruby-version: '3.1.0'
|
32
|
+
- rails-version: '7.0'
|
33
|
+
ruby-version: '3.2.0'
|
32
34
|
name: Test against Ruby ${{ matrix.ruby-version }} / Rails ${{ matrix.rails-version }}
|
33
35
|
env:
|
34
36
|
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/rails_${{ matrix.rails-version }}.gemfile
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.3.0 (2023-01-23)
|
4
|
+
|
5
|
+
* Add `lock_mode` DSL method
|
6
|
+
* Set `Load` operations to use shared locking, and `Update` and `Destroy`
|
7
|
+
operations to use exclusive locking. Please make sure your operations
|
8
|
+
inherit from the correct parent operation, and change the locking mode
|
9
|
+
if it is not the correct one for your operation. More info can be found
|
10
|
+
in the section "Locking" in the Readme
|
11
|
+
|
3
12
|
## 1.2.3 (2023-01-04)
|
4
13
|
|
5
14
|
* Fix marshalling of operation models. This is especially useful for use in
|
data/README.md
CHANGED
@@ -1133,6 +1133,32 @@ class Operations::User::Update < RailsOps::Operation::Model::Update
|
|
1133
1133
|
end
|
1134
1134
|
```
|
1135
1135
|
|
1136
|
+
Please note that for performance reasons, the `Load` operation (and any
|
1137
|
+
operations inheriting from it) use a shared lock, i.e. it issues
|
1138
|
+
an `LOCK IN SHARE MODE` / `FOR SHARE` statement. The `Update` and `Destroy`
|
1139
|
+
operations (as well as operations inheriting from it) however use the default
|
1140
|
+
`lock` method of ActiveRecord, which will issue an exclusive lock.
|
1141
|
+
|
1142
|
+
If you want to change the mode, you can use the `lock_mode` DSL method, which
|
1143
|
+
has two possible modes:
|
1144
|
+
|
1145
|
+
* `:shared` for the shared lock mode
|
1146
|
+
* `:exclusive` for the exclusive lock mode
|
1147
|
+
|
1148
|
+
For example, if you have an operation loading a record which you'd want to
|
1149
|
+
lock exclusively, you'd need to write the following:
|
1150
|
+
|
1151
|
+
```ruby
|
1152
|
+
class Operations::User::Update < RailsOps::Operation::Model::Load
|
1153
|
+
model ::User
|
1154
|
+
lock_mode :exclusive
|
1155
|
+
end
|
1156
|
+
```
|
1157
|
+
|
1158
|
+
One caveat is, that shared locking is only supported for MySQl (MariaDB),
|
1159
|
+
Postgresql and Oracle DB databases, any other database will always use an
|
1160
|
+
exlusive lock.
|
1161
|
+
|
1136
1162
|
### Creating models
|
1137
1163
|
|
1138
1164
|
For creating models, you can use the base class
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.3.0
|
@@ -5,14 +5,13 @@ module RailsOps
|
|
5
5
|
# with default procs which is not supported by `Marshal.dump`. This mixin
|
6
6
|
# therefore excludes this instance variable from being dumped and loaded.
|
7
7
|
module Marshalling
|
8
|
-
UNMARSHALED_VARIABLES = %i
|
8
|
+
UNMARSHALED_VARIABLES = %i(@parent_op).freeze
|
9
9
|
|
10
10
|
extend ActiveSupport::Concern
|
11
11
|
|
12
12
|
def marshal_dump
|
13
|
-
instance_variables.reject{|m| UNMARSHALED_VARIABLES.include? m}.
|
13
|
+
instance_variables.reject { |m| UNMARSHALED_VARIABLES.include? m }.each_with_object({}) do |attr, vars|
|
14
14
|
vars[attr] = instance_variable_get(attr)
|
15
|
-
vars
|
16
15
|
end
|
17
16
|
end
|
18
17
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
class RailsOps::Operation::Model::Load < RailsOps::Operation::Model
|
2
2
|
class_attribute :_lock_model_at_build
|
3
3
|
class_attribute :_load_model_authorization_action
|
4
|
+
class_attribute :_lock_mode
|
4
5
|
|
5
6
|
policy :on_init do
|
6
7
|
model_authorization
|
@@ -39,6 +40,24 @@ class RailsOps::Operation::Model::Load < RailsOps::Operation::Model
|
|
39
40
|
_lock_model_at_build.nil? ? RailsOps.config.lock_models_at_build? : _lock_model_at_build
|
40
41
|
end
|
41
42
|
|
43
|
+
# Method to set the lock mode, which can either be :exclusive to use
|
44
|
+
# an exclusive write lock, or :shared to use a shared lock. Please note
|
45
|
+
# that currently, :shared only works for MySql, Postgresql and Oracle DB,
|
46
|
+
# other adapters always use the exclusive lock.
|
47
|
+
def self.lock_mode(lock_mode)
|
48
|
+
fail "Unknown lock mode #{lock_mode}" unless %i(shared exclusive).include?(lock_mode)
|
49
|
+
|
50
|
+
self._lock_mode = lock_mode
|
51
|
+
end
|
52
|
+
|
53
|
+
# Get the lock_mode or the default of :exclusive
|
54
|
+
def self.lock_mode_or_default
|
55
|
+
_lock_mode.presence || :exclusive
|
56
|
+
end
|
57
|
+
|
58
|
+
# Set the lock mode for load operations (and it's children) to :shared
|
59
|
+
lock_mode :shared
|
60
|
+
|
42
61
|
def model_id_field
|
43
62
|
:id
|
44
63
|
end
|
@@ -52,7 +71,7 @@ class RailsOps::Operation::Model::Load < RailsOps::Operation::Model
|
|
52
71
|
relation = self.class.model
|
53
72
|
|
54
73
|
# Express intention to lock if required
|
55
|
-
relation = relation
|
74
|
+
relation = lock_relation(relation)
|
56
75
|
|
57
76
|
# Fetch (and possibly lock) model
|
58
77
|
return relation.find_by!(model_id_field => params[model_id_field])
|
@@ -69,4 +88,38 @@ class RailsOps::Operation::Model::Load < RailsOps::Operation::Model
|
|
69
88
|
def extract_id_from_params
|
70
89
|
params[model_id_field]
|
71
90
|
end
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
def lock_relation(relation)
|
95
|
+
# Directly return the relation if we don't want to lock the relation
|
96
|
+
return relation unless self.class.lock_model_at_build?
|
97
|
+
|
98
|
+
if self.class.lock_mode_or_default == :shared
|
99
|
+
# Lock the relation in shared mode
|
100
|
+
return relation.lock(shared_lock_statement)
|
101
|
+
else
|
102
|
+
# Lock the relation in exclusive mode
|
103
|
+
return relation.lock
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def shared_lock_statement
|
108
|
+
adapter_type = ActiveRecord::Base.connection.adapter_name.downcase.to_sym
|
109
|
+
|
110
|
+
case adapter_type
|
111
|
+
when :mysql, :mysql2
|
112
|
+
return 'LOCK IN SHARE MODE'
|
113
|
+
when :postgresql
|
114
|
+
return 'FOR SHARE'
|
115
|
+
when :oracleenhanced
|
116
|
+
return 'LOCK IN SHARE MODE'
|
117
|
+
end
|
118
|
+
|
119
|
+
# Don't return anything, which will make the `lock` statement
|
120
|
+
# use the normal, exclusive lock. This might be suboptimal for other
|
121
|
+
# database adapters, but we'd rather lock too restrictive, such that
|
122
|
+
# no race-conditions may occur.
|
123
|
+
return nil
|
124
|
+
end
|
72
125
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
class RailsOps::Operation::Model::Update < RailsOps::Operation::Model::Load
|
2
2
|
model_authorization_action :update
|
3
|
+
lock_mode :exclusive
|
3
4
|
|
4
5
|
# As this operation might extend the model class, we need to make sure that
|
5
6
|
# the operation works using an extended 'copy' of the given model class.
|
data/rails_ops.gemspec
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: rails_ops 1.
|
2
|
+
# stub: rails_ops 1.3.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "rails_ops".freeze
|
6
|
-
s.version = "1.
|
6
|
+
s.version = "1.3.0"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Sitrox".freeze]
|
11
|
-
s.date = "2023-01-
|
11
|
+
s.date = "2023-01-23"
|
12
12
|
s.files = [".github/workflows/rubocop.yml".freeze, ".github/workflows/ruby.yml".freeze, ".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, "Appraisals".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "gemfiles/rails_6.0.gemfile".freeze, "gemfiles/rails_6.1.gemfile".freeze, "gemfiles/rails_7.0.gemfile".freeze, "lib/generators/operation/USAGE".freeze, "lib/generators/operation/operation_generator.rb".freeze, "lib/generators/operation/templates/controller.erb".freeze, "lib/generators/operation/templates/create.erb".freeze, "lib/generators/operation/templates/destroy.erb".freeze, "lib/generators/operation/templates/load.erb".freeze, "lib/generators/operation/templates/update.erb".freeze, "lib/generators/operation/templates/view.erb".freeze, "lib/rails_ops.rb".freeze, "lib/rails_ops/authorization_backend/abstract.rb".freeze, "lib/rails_ops/authorization_backend/can_can_can.rb".freeze, "lib/rails_ops/configuration.rb".freeze, "lib/rails_ops/context.rb".freeze, "lib/rails_ops/controller_mixin.rb".freeze, "lib/rails_ops/exceptions.rb".freeze, "lib/rails_ops/hooked_job.rb".freeze, "lib/rails_ops/hookup.rb".freeze, "lib/rails_ops/hookup/dsl.rb".freeze, "lib/rails_ops/hookup/dsl_validator.rb".freeze, "lib/rails_ops/hookup/hook.rb".freeze, "lib/rails_ops/log_subscriber.rb".freeze, "lib/rails_ops/mixins.rb".freeze, "lib/rails_ops/mixins/authorization.rb".freeze, "lib/rails_ops/mixins/log_settings.rb".freeze, "lib/rails_ops/mixins/model.rb".freeze, "lib/rails_ops/mixins/model/authorization.rb".freeze, "lib/rails_ops/mixins/model/nesting.rb".freeze, "lib/rails_ops/mixins/param_authorization.rb".freeze, "lib/rails_ops/mixins/policies.rb".freeze, "lib/rails_ops/mixins/require_context.rb".freeze, "lib/rails_ops/mixins/routes.rb".freeze, "lib/rails_ops/mixins/schema_validation.rb".freeze, "lib/rails_ops/mixins/sub_ops.rb".freeze, "lib/rails_ops/model_mixins.rb".freeze, "lib/rails_ops/model_mixins/ar_extension.rb".freeze, "lib/rails_ops/model_mixins/marshalling.rb".freeze, "lib/rails_ops/model_mixins/parent_op.rb".freeze, "lib/rails_ops/model_mixins/sti_fixes.rb".freeze, "lib/rails_ops/model_mixins/virtual_attributes.rb".freeze, "lib/rails_ops/model_mixins/virtual_attributes/virtual_column_wrapper.rb".freeze, "lib/rails_ops/model_mixins/virtual_has_one.rb".freeze, "lib/rails_ops/model_mixins/virtual_model_name.rb".freeze, "lib/rails_ops/operation.rb".freeze, "lib/rails_ops/operation/model.rb".freeze, "lib/rails_ops/operation/model/create.rb".freeze, "lib/rails_ops/operation/model/destroy.rb".freeze, "lib/rails_ops/operation/model/load.rb".freeze, "lib/rails_ops/operation/model/update.rb".freeze, "lib/rails_ops/profiler.rb".freeze, "lib/rails_ops/profiler/node.rb".freeze, "lib/rails_ops/railtie.rb".freeze, "lib/rails_ops/scoped_env.rb".freeze, "lib/rails_ops/virtual_model.rb".freeze, "rails_ops.gemspec".freeze, "test/db/models.rb".freeze, "test/db/schema.rb".freeze, "test/dummy/Rakefile".freeze, "test/dummy/app/assets/config/manifest.js".freeze, "test/dummy/app/assets/images/.keep".freeze, "test/dummy/app/assets/javascripts/application.js".freeze, "test/dummy/app/assets/javascripts/cable.js".freeze, "test/dummy/app/assets/javascripts/channels/.keep".freeze, "test/dummy/app/assets/stylesheets/application.css".freeze, "test/dummy/app/channels/application_cable/channel.rb".freeze, "test/dummy/app/channels/application_cable/connection.rb".freeze, "test/dummy/app/controllers/application_controller.rb".freeze, "test/dummy/app/controllers/concerns/.keep".freeze, "test/dummy/app/helpers/application_helper.rb".freeze, "test/dummy/app/jobs/application_job.rb".freeze, "test/dummy/app/mailers/application_mailer.rb".freeze, "test/dummy/app/models/animal.rb".freeze, "test/dummy/app/models/application_record.rb".freeze, "test/dummy/app/models/bird.rb".freeze, "test/dummy/app/models/cat.rb".freeze, "test/dummy/app/models/concerns/.keep".freeze, "test/dummy/app/models/dog.rb".freeze, "test/dummy/app/models/flower.rb".freeze, "test/dummy/app/models/group.rb".freeze, "test/dummy/app/models/nightingale.rb".freeze, "test/dummy/app/models/phoenix.rb".freeze, "test/dummy/app/models/user.rb".freeze, "test/dummy/app/views/layouts/application.html.erb".freeze, "test/dummy/app/views/layouts/mailer.html.erb".freeze, "test/dummy/app/views/layouts/mailer.text.erb".freeze, "test/dummy/bin/bundle".freeze, "test/dummy/bin/rails".freeze, "test/dummy/bin/rake".freeze, "test/dummy/bin/setup".freeze, "test/dummy/bin/update".freeze, "test/dummy/bin/yarn".freeze, "test/dummy/config.ru".freeze, "test/dummy/config/application.rb".freeze, "test/dummy/config/boot.rb".freeze, "test/dummy/config/cable.yml".freeze, "test/dummy/config/database.yml".freeze, "test/dummy/config/environment.rb".freeze, "test/dummy/config/environments/development.rb".freeze, "test/dummy/config/environments/production.rb".freeze, "test/dummy/config/environments/test.rb".freeze, "test/dummy/config/initializers/application_controller_renderer.rb".freeze, "test/dummy/config/initializers/assets.rb".freeze, "test/dummy/config/initializers/backtrace_silencers.rb".freeze, "test/dummy/config/initializers/cookies_serializer.rb".freeze, "test/dummy/config/initializers/filter_parameter_logging.rb".freeze, "test/dummy/config/initializers/inflections.rb".freeze, "test/dummy/config/initializers/mime_types.rb".freeze, "test/dummy/config/initializers/rails_ops.rb".freeze, "test/dummy/config/initializers/wrap_parameters.rb".freeze, "test/dummy/config/locales/en.yml".freeze, "test/dummy/config/puma.rb".freeze, "test/dummy/config/routes.rb".freeze, "test/dummy/config/secrets.yml".freeze, "test/dummy/config/spring.rb".freeze, "test/dummy/db/schema.rb".freeze, "test/dummy/lib/assets/.keep".freeze, "test/dummy/log/.keep".freeze, "test/dummy/package.json".freeze, "test/dummy/public/404.html".freeze, "test/dummy/public/422.html".freeze, "test/dummy/public/500.html".freeze, "test/dummy/public/apple-touch-icon-precomposed.png".freeze, "test/dummy/public/apple-touch-icon.png".freeze, "test/dummy/public/favicon.ico".freeze, "test/dummy/tmp/.keep".freeze, "test/test_helper.rb".freeze, "test/unit/rails_ops/generators/operation_generator_test.rb".freeze, "test/unit/rails_ops/mixins/model/nesting.rb".freeze, "test/unit/rails_ops/mixins/param_authorization_test.rb".freeze, "test/unit/rails_ops/mixins/policies_test.rb".freeze, "test/unit/rails_ops/operation/model/create_test.rb".freeze, "test/unit/rails_ops/operation/model/load_test.rb".freeze, "test/unit/rails_ops/operation/model/sti_test.rb".freeze, "test/unit/rails_ops/operation/model/update_test.rb".freeze, "test/unit/rails_ops/operation/model_test.rb".freeze, "test/unit/rails_ops/operation/update_auth_test.rb".freeze, "test/unit/rails_ops/operation/update_lazy_auth_test.rb".freeze, "test/unit/rails_ops/operation_test.rb".freeze]
|
13
|
-
s.rubygems_version = "3.
|
13
|
+
s.rubygems_version = "3.2.15".freeze
|
14
14
|
s.summary = "An operations service layer for rails projects.".freeze
|
15
15
|
s.test_files = ["test/db/models.rb".freeze, "test/db/schema.rb".freeze, "test/dummy/Rakefile".freeze, "test/dummy/app/assets/config/manifest.js".freeze, "test/dummy/app/assets/images/.keep".freeze, "test/dummy/app/assets/javascripts/application.js".freeze, "test/dummy/app/assets/javascripts/cable.js".freeze, "test/dummy/app/assets/javascripts/channels/.keep".freeze, "test/dummy/app/assets/stylesheets/application.css".freeze, "test/dummy/app/channels/application_cable/channel.rb".freeze, "test/dummy/app/channels/application_cable/connection.rb".freeze, "test/dummy/app/controllers/application_controller.rb".freeze, "test/dummy/app/controllers/concerns/.keep".freeze, "test/dummy/app/helpers/application_helper.rb".freeze, "test/dummy/app/jobs/application_job.rb".freeze, "test/dummy/app/mailers/application_mailer.rb".freeze, "test/dummy/app/models/animal.rb".freeze, "test/dummy/app/models/application_record.rb".freeze, "test/dummy/app/models/bird.rb".freeze, "test/dummy/app/models/cat.rb".freeze, "test/dummy/app/models/concerns/.keep".freeze, "test/dummy/app/models/dog.rb".freeze, "test/dummy/app/models/flower.rb".freeze, "test/dummy/app/models/group.rb".freeze, "test/dummy/app/models/nightingale.rb".freeze, "test/dummy/app/models/phoenix.rb".freeze, "test/dummy/app/models/user.rb".freeze, "test/dummy/app/views/layouts/application.html.erb".freeze, "test/dummy/app/views/layouts/mailer.html.erb".freeze, "test/dummy/app/views/layouts/mailer.text.erb".freeze, "test/dummy/bin/bundle".freeze, "test/dummy/bin/rails".freeze, "test/dummy/bin/rake".freeze, "test/dummy/bin/setup".freeze, "test/dummy/bin/update".freeze, "test/dummy/bin/yarn".freeze, "test/dummy/config.ru".freeze, "test/dummy/config/application.rb".freeze, "test/dummy/config/boot.rb".freeze, "test/dummy/config/cable.yml".freeze, "test/dummy/config/database.yml".freeze, "test/dummy/config/environment.rb".freeze, "test/dummy/config/environments/development.rb".freeze, "test/dummy/config/environments/production.rb".freeze, "test/dummy/config/environments/test.rb".freeze, "test/dummy/config/initializers/application_controller_renderer.rb".freeze, "test/dummy/config/initializers/assets.rb".freeze, "test/dummy/config/initializers/backtrace_silencers.rb".freeze, "test/dummy/config/initializers/cookies_serializer.rb".freeze, "test/dummy/config/initializers/filter_parameter_logging.rb".freeze, "test/dummy/config/initializers/inflections.rb".freeze, "test/dummy/config/initializers/mime_types.rb".freeze, "test/dummy/config/initializers/rails_ops.rb".freeze, "test/dummy/config/initializers/wrap_parameters.rb".freeze, "test/dummy/config/locales/en.yml".freeze, "test/dummy/config/puma.rb".freeze, "test/dummy/config/routes.rb".freeze, "test/dummy/config/secrets.yml".freeze, "test/dummy/config/spring.rb".freeze, "test/dummy/db/schema.rb".freeze, "test/dummy/lib/assets/.keep".freeze, "test/dummy/log/.keep".freeze, "test/dummy/package.json".freeze, "test/dummy/public/404.html".freeze, "test/dummy/public/422.html".freeze, "test/dummy/public/500.html".freeze, "test/dummy/public/apple-touch-icon-precomposed.png".freeze, "test/dummy/public/apple-touch-icon.png".freeze, "test/dummy/public/favicon.ico".freeze, "test/dummy/tmp/.keep".freeze, "test/test_helper.rb".freeze, "test/unit/rails_ops/generators/operation_generator_test.rb".freeze, "test/unit/rails_ops/mixins/model/nesting.rb".freeze, "test/unit/rails_ops/mixins/param_authorization_test.rb".freeze, "test/unit/rails_ops/mixins/policies_test.rb".freeze, "test/unit/rails_ops/operation/model/create_test.rb".freeze, "test/unit/rails_ops/operation/model/load_test.rb".freeze, "test/unit/rails_ops/operation/model/sti_test.rb".freeze, "test/unit/rails_ops/operation/model/update_test.rb".freeze, "test/unit/rails_ops/operation/model_test.rb".freeze, "test/unit/rails_ops/operation/update_auth_test.rb".freeze, "test/unit/rails_ops/operation/update_lazy_auth_test.rb".freeze, "test/unit/rails_ops/operation_test.rb".freeze]
|
16
16
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_ops
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sitrox
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-01-
|
11
|
+
date: 2023-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: appraisal
|
@@ -212,8 +212,8 @@ dependencies:
|
|
212
212
|
- - "<="
|
213
213
|
- !ruby/object:Gem::Version
|
214
214
|
version: '3.1'
|
215
|
-
description:
|
216
|
-
email:
|
215
|
+
description:
|
216
|
+
email:
|
217
217
|
executables: []
|
218
218
|
extensions: []
|
219
219
|
extra_rdoc_files: []
|
@@ -370,10 +370,10 @@ files:
|
|
370
370
|
- test/unit/rails_ops/operation/update_auth_test.rb
|
371
371
|
- test/unit/rails_ops/operation/update_lazy_auth_test.rb
|
372
372
|
- test/unit/rails_ops/operation_test.rb
|
373
|
-
homepage:
|
373
|
+
homepage:
|
374
374
|
licenses: []
|
375
375
|
metadata: {}
|
376
|
-
post_install_message:
|
376
|
+
post_install_message:
|
377
377
|
rdoc_options: []
|
378
378
|
require_paths:
|
379
379
|
- lib
|
@@ -388,8 +388,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
388
388
|
- !ruby/object:Gem::Version
|
389
389
|
version: '0'
|
390
390
|
requirements: []
|
391
|
-
rubygems_version: 3.
|
392
|
-
signing_key:
|
391
|
+
rubygems_version: 3.2.15
|
392
|
+
signing_key:
|
393
393
|
specification_version: 4
|
394
394
|
summary: An operations service layer for rails projects.
|
395
395
|
test_files:
|