rails_ops 1.8.0 → 1.8.1
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 +10 -0
- data/Gemfile.lock +4 -4
- data/VERSION +1 -1
- data/lib/rails_ops/mixins/schema_validation.rb +24 -7
- data/rails_ops.gemspec +3 -3
- data/test/unit/rails_ops/operation_test.rb +73 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8559933ff507cb992933a71e6966461cad346d4351046cf3d213e35813d8fe64
|
|
4
|
+
data.tar.gz: 81821f4b58e5503e150c18f60cc55172108d173d2d4abfe5cb094781b9cdf4e2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 86cc9b385e8a43be9ea7e23abddc320f772cacffe00ab3671c8ade66fee62df0e4db28bf70d200d220178ffb46720291897ddbe63841e5b6c8bf46065b9439b8
|
|
7
|
+
data.tar.gz: 828c27f4c316fdbaac2f48749a39caef6ea21dd2010be0adeb5ee4cc3f8933da35409b26699805d29aa20a388fb53ce26374159bf1320b5e8cf78a93594c6607
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.8.1 (2026-05-27)
|
|
4
|
+
|
|
5
|
+
* Add explicit `**kwargs` forwarding to `schema2` and `schema`. These
|
|
6
|
+
methods never properly supported keyword arguments — it only appeared
|
|
7
|
+
to work under Ruby 2 due to its implicit hash-to-kwargs conversion.
|
|
8
|
+
Calls like `schema2 policy_chain: :on_init do ... end` now work
|
|
9
|
+
correctly on all supported Ruby versions.
|
|
10
|
+
|
|
11
|
+
Internal reference: `#149499`.
|
|
12
|
+
|
|
3
13
|
## 1.8.0 (2026-05-07)
|
|
4
14
|
|
|
5
15
|
* `Operation#run` (non-bang) now wraps the call to `run!` in a
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
rails_ops (1.8.
|
|
4
|
+
rails_ops (1.8.1)
|
|
5
5
|
active_type (>= 1.3.0)
|
|
6
6
|
minitest
|
|
7
7
|
rails (> 4)
|
|
@@ -142,11 +142,11 @@ GEM
|
|
|
142
142
|
net-smtp (0.4.0.1)
|
|
143
143
|
net-protocol
|
|
144
144
|
nio4r (2.7.0)
|
|
145
|
-
nokogiri (1.19.
|
|
145
|
+
nokogiri (1.19.3-arm64-darwin)
|
|
146
146
|
racc (~> 1.4)
|
|
147
|
-
nokogiri (1.19.
|
|
147
|
+
nokogiri (1.19.3-x86_64-darwin)
|
|
148
148
|
racc (~> 1.4)
|
|
149
|
-
nokogiri (1.19.
|
|
149
|
+
nokogiri (1.19.3-x86_64-linux-gnu)
|
|
150
150
|
racc (~> 1.4)
|
|
151
151
|
parallel (1.26.3)
|
|
152
152
|
parser (3.3.7.0)
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.8.
|
|
1
|
+
1.8.1
|
|
@@ -22,27 +22,44 @@ module RailsOps::Mixins::SchemaValidation
|
|
|
22
22
|
# Only one schema can be active at a time. Defining multiple schemata or
|
|
23
23
|
# defining schemas in a subclass always override previously defined schemas.
|
|
24
24
|
#
|
|
25
|
-
# @param *args [Array]
|
|
25
|
+
# @param *args [Array] Positional parameters to pass at schema
|
|
26
|
+
# initialization
|
|
27
|
+
# @param **kwargs [Hash] Keyword arguments to pass at schema
|
|
28
|
+
# initialization
|
|
26
29
|
# @yield Block to pass at schema initialization
|
|
27
|
-
def schema2(*args, &block)
|
|
28
|
-
if args.any? || block_given?
|
|
29
|
-
self._op_schema = Schemacop::Schema.new(*args, &block)
|
|
30
|
+
def schema2(*args, **kwargs, &block)
|
|
31
|
+
if args.any? || kwargs.any? || block_given?
|
|
32
|
+
self._op_schema = Schemacop::Schema.new(*args, **kwargs, &block)
|
|
30
33
|
else
|
|
31
34
|
# Define empty schema (not possible with V2 schema).
|
|
32
35
|
schema3
|
|
33
36
|
end
|
|
34
37
|
end
|
|
35
38
|
|
|
39
|
+
# @param type [Symbol] Root node type (default: `:hash`)
|
|
40
|
+
# @param *args [Array] Positional parameters to pass at schema
|
|
41
|
+
# initialization
|
|
42
|
+
# @param **kwargs [Hash] Keyword arguments to pass at schema
|
|
43
|
+
# initialization
|
|
44
|
+
# @yield Block to pass at schema initialization
|
|
36
45
|
def schema3(type = :hash, *args, **kwargs, &block)
|
|
37
46
|
self._op_schema = Schemacop::Schema3.new(type, *args, **kwargs, &block)
|
|
38
47
|
end
|
|
39
48
|
|
|
40
|
-
|
|
49
|
+
# Delegates to {#schema2} or {#schema3} based on
|
|
50
|
+
# {RailsOps.config.default_schemacop_version}.
|
|
51
|
+
#
|
|
52
|
+
# @param *args [Array] Positional parameters to pass at schema
|
|
53
|
+
# initialization
|
|
54
|
+
# @param **kwargs [Hash] Keyword arguments to pass at schema
|
|
55
|
+
# initialization
|
|
56
|
+
# @yield Block to pass at schema initialization
|
|
57
|
+
def schema(*args, **kwargs, &block)
|
|
41
58
|
case RailsOps.config.default_schemacop_version
|
|
42
59
|
when 2
|
|
43
|
-
schema2(*args, &block)
|
|
60
|
+
schema2(*args, **kwargs, &block)
|
|
44
61
|
when 3
|
|
45
|
-
schema3(*args, &block)
|
|
62
|
+
schema3(*args, **kwargs, &block)
|
|
46
63
|
else
|
|
47
64
|
fail 'Schemacop schema versions supported are 2 and 3.'
|
|
48
65
|
end
|
data/rails_ops.gemspec
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
|
-
# stub: rails_ops 1.8.
|
|
2
|
+
# stub: rails_ops 1.8.1 ruby lib
|
|
3
3
|
|
|
4
4
|
Gem::Specification.new do |s|
|
|
5
5
|
s.name = "rails_ops".freeze
|
|
6
|
-
s.version = "1.8.
|
|
6
|
+
s.version = "1.8.1"
|
|
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 = "2026-05-
|
|
11
|
+
s.date = "2026-05-27"
|
|
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, "CLAUDE.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, "test/unit/rails_ops/railtie_test.rb".freeze]
|
|
13
13
|
s.homepage = "https://github.com/sitrox/rails_ops".freeze
|
|
14
14
|
s.licenses = ["MIT".freeze]
|
|
@@ -450,6 +450,79 @@ class RailsOps::OperationTest < ActiveSupport::TestCase
|
|
|
450
450
|
end
|
|
451
451
|
end
|
|
452
452
|
|
|
453
|
+
def test_schema2_with_kwargs
|
|
454
|
+
op = Class.new(RailsOps::Operation) do
|
|
455
|
+
schema2 policy_chain: :on_init do
|
|
456
|
+
req :id, :integer
|
|
457
|
+
end
|
|
458
|
+
def perform; end
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
op.run!(id: 1)
|
|
462
|
+
assert_raises Schemacop::Exceptions::ValidationError do
|
|
463
|
+
op.run!(id: 'not_an_integer')
|
|
464
|
+
end
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
def test_schema2_with_kwargs_only
|
|
468
|
+
op = Class.new(RailsOps::Operation) do
|
|
469
|
+
schema2 policy_chain: :on_init
|
|
470
|
+
def perform; end
|
|
471
|
+
end
|
|
472
|
+
|
|
473
|
+
assert op._op_schema.is_a?(Schemacop::Schema2)
|
|
474
|
+
end
|
|
475
|
+
|
|
476
|
+
def test_schema3_with_kwargs
|
|
477
|
+
op = Class.new(RailsOps::Operation) do
|
|
478
|
+
schema3 :hash, title: 'test' do
|
|
479
|
+
int! :id
|
|
480
|
+
end
|
|
481
|
+
def perform; end
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
op.run!(id: 1)
|
|
485
|
+
assert_raises Schemacop::Exceptions::ValidationError do
|
|
486
|
+
op.run!(id: 'not_an_integer')
|
|
487
|
+
end
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
def test_schema_default_v2_with_kwargs
|
|
491
|
+
original = RailsOps.config.default_schemacop_version
|
|
492
|
+
RailsOps.config.default_schemacop_version = 2
|
|
493
|
+
op = Class.new(RailsOps::Operation) do
|
|
494
|
+
schema policy_chain: :on_init do
|
|
495
|
+
req :id, :integer
|
|
496
|
+
end
|
|
497
|
+
def perform; end
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
op.run!(id: 1)
|
|
501
|
+
assert_raises Schemacop::Exceptions::ValidationError do
|
|
502
|
+
op.run!(id: 'not_an_integer')
|
|
503
|
+
end
|
|
504
|
+
ensure
|
|
505
|
+
RailsOps.config.default_schemacop_version = original
|
|
506
|
+
end
|
|
507
|
+
|
|
508
|
+
def test_schema_default_v3_with_kwargs
|
|
509
|
+
original = RailsOps.config.default_schemacop_version
|
|
510
|
+
RailsOps.config.default_schemacop_version = 3
|
|
511
|
+
op = Class.new(RailsOps::Operation) do
|
|
512
|
+
schema title: 'test' do
|
|
513
|
+
int! :id
|
|
514
|
+
end
|
|
515
|
+
def perform; end
|
|
516
|
+
end
|
|
517
|
+
|
|
518
|
+
op.run!(id: 1)
|
|
519
|
+
assert_raises Schemacop::Exceptions::ValidationError do
|
|
520
|
+
op.run!(id: 'not_an_integer')
|
|
521
|
+
end
|
|
522
|
+
ensure
|
|
523
|
+
RailsOps.config.default_schemacop_version = original
|
|
524
|
+
end
|
|
525
|
+
|
|
453
526
|
def test_op_with_schema_default
|
|
454
527
|
RailsOps.config.default_schemacop_version = 3
|
|
455
528
|
test_op_with_schema3(use_default: true)
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rails_ops
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.8.
|
|
4
|
+
version: 1.8.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sitrox
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 2026-05-
|
|
10
|
+
date: 2026-05-27 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: active_type
|