rails_ops 1.7.1 → 1.7.3
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 +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +5 -1
- data/README.md +18 -0
- data/VERSION +1 -1
- data/lib/rails_ops/mixins/schema_validation.rb +6 -1
- data/lib/rails_ops/operation/model/create.rb +2 -0
- data/lib/rails_ops/operation/model/destroy.rb +2 -0
- data/lib/rails_ops/operation/model/load.rb +2 -0
- data/lib/rails_ops/operation/model/update.rb +2 -0
- data/lib/rails_ops/operation/model.rb +2 -0
- data/lib/rails_ops/operation.rb +2 -0
- data/rails_ops.gemspec +3 -3
- data/test/unit/rails_ops/operation_test.rb +43 -0
- metadata +3 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f8fad9d5d7f381145283c6eb2b4e5cc346d54bd8a70b8e58df3fcc6c37d93eb
|
4
|
+
data.tar.gz: 95996ab8e6bec11c73871b1a33b6b291ce7c1da61c24b783a4c709f5298a5fa3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 686dcd7afb8913c3d2d8faa47207004245fa5dad81fd4660c0183cfa31a28da0f5030be047cbbeec2e44fefaba56339a4058cfcf4a63666d95378ae80fd0ba4a
|
7
|
+
data.tar.gz: ee0d9887438ff5c244ebd8b9b0b9186c7ac98f04886c7c58b0153195cddf05b8c4a5a45e902b7b2d093f631b2b2ce5c28ca3ae5edb0992ae4952d04868121db1
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.7.3 (2025-05-21)
|
4
|
+
|
5
|
+
* Allow defining empty schemas via `schema2` method
|
6
|
+
|
7
|
+
## 1.7.2 (2025-04-14)
|
8
|
+
|
9
|
+
* Add lazy load hooks
|
10
|
+
|
3
11
|
## 1.7.1 (2025-01-31)
|
4
12
|
|
5
13
|
* Raise exception when using `model_authorization_action` in operations inheriting
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rails_ops (1.7.
|
4
|
+
rails_ops (1.7.3)
|
5
5
|
active_type (>= 1.3.0)
|
6
6
|
minitest
|
7
7
|
rails (> 4)
|
@@ -137,6 +137,8 @@ GEM
|
|
137
137
|
net-smtp (0.4.0.1)
|
138
138
|
net-protocol
|
139
139
|
nio4r (2.7.0)
|
140
|
+
nokogiri (1.16.5-arm64-darwin)
|
141
|
+
racc (~> 1.4)
|
140
142
|
nokogiri (1.16.5-x86_64-darwin)
|
141
143
|
racc (~> 1.4)
|
142
144
|
nokogiri (1.16.5-x86_64-linux)
|
@@ -227,6 +229,7 @@ GEM
|
|
227
229
|
actionpack (>= 5.2)
|
228
230
|
activesupport (>= 5.2)
|
229
231
|
sprockets (>= 3.0.0)
|
232
|
+
sqlite3 (1.6.2-arm64-darwin)
|
230
233
|
sqlite3 (1.6.2-x86_64-darwin)
|
231
234
|
sqlite3 (1.6.2-x86_64-linux)
|
232
235
|
stringio (3.1.0)
|
@@ -244,6 +247,7 @@ GEM
|
|
244
247
|
zeitwerk (2.6.13)
|
245
248
|
|
246
249
|
PLATFORMS
|
250
|
+
arm64-darwin-24
|
247
251
|
x86_64-darwin-20
|
248
252
|
x86_64-darwin-21
|
249
253
|
x86_64-darwin-22
|
data/README.md
CHANGED
@@ -1833,6 +1833,24 @@ Of course, at this point, the operations will need some adaptions, especially th
|
|
1833
1833
|
[parameter schemas](#validating-params), and the controllers need the logic for the
|
1834
1834
|
success and failure cases, as this depends on your application.
|
1835
1835
|
|
1836
|
+
Lazy Load Hooks
|
1837
|
+
---------------
|
1838
|
+
|
1839
|
+
RailsOps provides the following [Rails Lazy Load
|
1840
|
+
Hooks](https://api.rubyonrails.org/v7.1.3.4/classes/ActiveSupport/LazyLoadHooks.html):
|
1841
|
+
|
1842
|
+
- `rails_ops_op_model_create` for `RailsOps::Operation::Model::Create`
|
1843
|
+
- `rails_ops_op_model_destroy` for `RailsOps::Operation::Model::Destroy`
|
1844
|
+
- `rails_ops_op_model_load` for `RailsOps::Operation::Model::Load`
|
1845
|
+
- `rails_ops_op_model_update` for `RailsOps::Operation::Model::Update`
|
1846
|
+
- `rails_ops_op` for `RailsOps::Operation`
|
1847
|
+
|
1848
|
+
Example usage:
|
1849
|
+
|
1850
|
+
```ruby
|
1851
|
+
ActiveSupport.on_load(:rails_ops_op_model_create) { include MyMixin }
|
1852
|
+
```
|
1853
|
+
|
1836
1854
|
Caveats
|
1837
1855
|
-------
|
1838
1856
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.7.
|
1
|
+
1.7.3
|
@@ -25,7 +25,12 @@ module RailsOps::Mixins::SchemaValidation
|
|
25
25
|
# @param *args [Array] Parameters to pass at schema initialization
|
26
26
|
# @yield Block to pass at schema initialization
|
27
27
|
def schema2(*args, &block)
|
28
|
-
|
28
|
+
if args.any? || block_given?
|
29
|
+
self._op_schema = Schemacop::Schema.new(*args, &block)
|
30
|
+
else
|
31
|
+
# Define empty schema (not possible with V2 schema).
|
32
|
+
schema3
|
33
|
+
end
|
29
34
|
end
|
30
35
|
|
31
36
|
def schema3(type = :hash, *args, **kwargs, &block)
|
data/lib/rails_ops/operation.rb
CHANGED
data/rails_ops.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: rails_ops 1.7.
|
2
|
+
# stub: rails_ops 1.7.3 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "rails_ops".freeze
|
6
|
-
s.version = "1.7.
|
6
|
+
s.version = "1.7.3"
|
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 = "2025-
|
11
|
+
s.date = "2025-05-22"
|
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, "Gemfile.lock".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, "gemfiles/rails_7.1.gemfile".freeze, "gemfiles/rails_7.2.gemfile".freeze, "gemfiles/rails_8.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/controller_wrapper.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/controllers/group_controller.rb".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/ability.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/computer.rb".freeze, "test/dummy/app/models/concerns/.keep".freeze, "test/dummy/app/models/cpu.rb".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/mainboard.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/hookup.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/hookup_test.rb".freeze, "test/unit/rails_ops/mixins/controller_test.rb".freeze, "test/unit/rails_ops/mixins/model/deep_nesting_test.rb".freeze, "test/unit/rails_ops/mixins/model/marshalling_test.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/auth_test.rb".freeze, "test/unit/rails_ops/operation/model/create_test.rb".freeze, "test/unit/rails_ops/operation/model/destroy_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_lazy_auth_test.rb".freeze, "test/unit/rails_ops/operation_test.rb".freeze, "test/unit/rails_ops/profiler_test.rb".freeze]
|
13
13
|
s.licenses = ["MIT".freeze]
|
14
14
|
s.rubygems_version = "3.4.6".freeze
|
@@ -198,6 +198,49 @@ class RailsOps::OperationTest < ActiveSupport::TestCase
|
|
198
198
|
end
|
199
199
|
end
|
200
200
|
|
201
|
+
def test_no_schema
|
202
|
+
op = Class.new(RailsOps::Operation) do
|
203
|
+
def perform; end
|
204
|
+
end
|
205
|
+
|
206
|
+
assert_nothing_raised do
|
207
|
+
op.run!(foo: :bar)
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_empty_schema
|
212
|
+
op = Class.new(RailsOps::Operation) do
|
213
|
+
schema
|
214
|
+
def perform; end
|
215
|
+
end
|
216
|
+
|
217
|
+
assert_raises Schemacop::Exceptions::ValidationError do
|
218
|
+
op.run!(foo: :bar)
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
def test_empty_schema2
|
223
|
+
op = Class.new(RailsOps::Operation) do
|
224
|
+
schema2
|
225
|
+
def perform; end
|
226
|
+
end
|
227
|
+
|
228
|
+
assert_raises Schemacop::Exceptions::ValidationError do
|
229
|
+
op.run!(foo: :bar)
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
def test_empty_schema3
|
234
|
+
op = Class.new(RailsOps::Operation) do
|
235
|
+
schema3
|
236
|
+
def perform; end
|
237
|
+
end
|
238
|
+
|
239
|
+
assert_raises Schemacop::Exceptions::ValidationError do
|
240
|
+
op.run!(foo: :bar)
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
201
244
|
def test_op_with_schema3(use_default: false)
|
202
245
|
op = Class.new(RailsOps::Operation) do
|
203
246
|
schema_block = proc do
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_ops
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sitrox
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date: 2025-
|
10
|
+
date: 2025-05-22 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: active_type
|
@@ -86,8 +85,6 @@ dependencies:
|
|
86
85
|
- - "<="
|
87
86
|
- !ruby/object:Gem::Version
|
88
87
|
version: '3.1'
|
89
|
-
description:
|
90
|
-
email:
|
91
88
|
executables: []
|
92
89
|
extensions: []
|
93
90
|
extra_rdoc_files: []
|
@@ -260,11 +257,9 @@ files:
|
|
260
257
|
- test/unit/rails_ops/operation/update_lazy_auth_test.rb
|
261
258
|
- test/unit/rails_ops/operation_test.rb
|
262
259
|
- test/unit/rails_ops/profiler_test.rb
|
263
|
-
homepage:
|
264
260
|
licenses:
|
265
261
|
- MIT
|
266
262
|
metadata: {}
|
267
|
-
post_install_message:
|
268
263
|
rdoc_options: []
|
269
264
|
require_paths:
|
270
265
|
- lib
|
@@ -279,8 +274,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
279
274
|
- !ruby/object:Gem::Version
|
280
275
|
version: '0'
|
281
276
|
requirements: []
|
282
|
-
rubygems_version: 3.
|
283
|
-
signing_key:
|
277
|
+
rubygems_version: 3.6.8
|
284
278
|
specification_version: 4
|
285
279
|
summary: An operations service layer for rails projects.
|
286
280
|
test_files:
|