rails_ops 1.0.2 → 1.0.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 +5 -5
- data/CHANGELOG.md +21 -0
- data/README.md +20 -2
- data/VERSION +1 -1
- data/lib/rails_ops.rb +3 -0
- data/lib/rails_ops/context.rb +4 -1
- data/lib/rails_ops/controller_mixin.rb +2 -0
- data/lib/rails_ops/mixins/model/nesting.rb +1 -1
- data/lib/rails_ops/mixins/policies.rb +7 -1
- data/lib/rails_ops/mixins/sub_ops.rb +1 -1
- data/lib/rails_ops/operation.rb +9 -1
- data/lib/rails_ops/operation/model.rb +2 -0
- data/rails_ops.gemspec +3 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: '065973dd5cb31471910f1febb0abcf52d654cfba'
|
4
|
+
data.tar.gz: 533500fe5913bbb75f1629409268cd736c455ae7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4fe791a2df0e6f23971661839e66c149940a8008e123c51bf42ce1810802944a6ccf63cc090719aaeeca842e5a8154dabdfedc9ab707c601901111c27d1a62c
|
7
|
+
data.tar.gz: b790df6bb1dcb2b74347d6e519dbac82b241d51c10e35bc72150706cb319ff4df51560bdbbd95576ca34b0f53090e5d0a5814e54e98821e8b7d19403a40cba75
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
+
## 1.0.3 (2019-03-18)
|
4
|
+
|
5
|
+
* Add missing imports of required third-party gems
|
6
|
+
|
7
|
+
* Add policy chain `before_model_save` for model operations
|
8
|
+
|
9
|
+
* Add policy chain `before_nested_model_ops` for model operations
|
10
|
+
|
11
|
+
* If existing, use `ActiveSupport::ParameterFilter` over
|
12
|
+
`ActionDispatch::Http::ParameterFilter` which is deprecated in Rails 6
|
13
|
+
|
14
|
+
* Fix error catching of nested model operations
|
15
|
+
|
16
|
+
* Fix error handling of sub operations
|
17
|
+
|
18
|
+
* Add `view` to operation contexts that contains the `view_context`. Only use
|
19
|
+
this for frontend operations that are always called from within a controller.
|
20
|
+
|
21
|
+
* Expose `op_context` as a view helper method. This is useful for instantiating
|
22
|
+
new (view) operations from within views and helpers.
|
23
|
+
|
3
24
|
## 1.0.2 (2019-01-29)
|
4
25
|
|
5
26
|
* Fix mass assignment protection errors under Rails 3
|
data/README.md
CHANGED
@@ -338,8 +338,8 @@ an appropriate exception.
|
|
338
338
|
|
339
339
|
### Policy chains
|
340
340
|
|
341
|
-
As mentioned above, policies can be executed at
|
342
|
-
lifecycle. This is possible using *policy chains*:
|
341
|
+
As mentioned above, policies can be executed at various points in your
|
342
|
+
operation's lifecycle. This is possible using *policy chains*:
|
343
343
|
|
344
344
|
- `:on_init`
|
345
345
|
|
@@ -351,6 +351,18 @@ lifecycle. This is possible using *policy chains*:
|
|
351
351
|
Obviously this is never called if the operation is just instantiated and never
|
352
352
|
run. This is the default chain.
|
353
353
|
|
354
|
+
- `:before_model_save`
|
355
|
+
|
356
|
+
This only applies to operations deriving from `RailsOps::Operation::Model` and
|
357
|
+
its descendants. Policies in this chain run after nested model operations are
|
358
|
+
performed immediately before the "main" model is saved.
|
359
|
+
|
360
|
+
- `:before_nested_model_ops`
|
361
|
+
|
362
|
+
This only applies to operations deriving from `RailsOps::Operation::Model` and
|
363
|
+
its descendants. Policies in this chain run after nested model operations are
|
364
|
+
performed before performing any nested model operations.
|
365
|
+
|
354
366
|
- `:after_perform`
|
355
367
|
|
356
368
|
Policies in this chain run immediately after the `perform` method is called.
|
@@ -464,6 +476,12 @@ operations. Contexts can include the following data:
|
|
464
476
|
the operation context when calling an operation from a controller. This hash
|
465
477
|
is used by {RailsOps::Mixins::Routes}.
|
466
478
|
|
479
|
+
- View context
|
480
|
+
|
481
|
+
If the operation has been created from within a controller, the property
|
482
|
+
`view` includes the current view context. Only use this for frontend
|
483
|
+
operations that will always be called from a controller.
|
484
|
+
|
467
485
|
- Called via hook
|
468
486
|
|
469
487
|
`called_via_hook` is a boolean indicating whether or not this operation was
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.3
|
data/lib/rails_ops.rb
CHANGED
data/lib/rails_ops/context.rb
CHANGED
@@ -6,6 +6,7 @@ module RailsOps
|
|
6
6
|
attribute :session
|
7
7
|
attribute :called_via_hook
|
8
8
|
attribute :url_options
|
9
|
+
attribute :view
|
9
10
|
|
10
11
|
# For compatibility with rails < 4
|
11
12
|
if defined?(attr_accessible)
|
@@ -15,6 +16,7 @@ module RailsOps
|
|
15
16
|
attr_accessible :session
|
16
17
|
attr_accessible :called_via_hook
|
17
18
|
attr_accessible :url_options
|
19
|
+
attr_accessible :view
|
18
20
|
end
|
19
21
|
|
20
22
|
# Returns a copy of the context with the given operation added to the
|
@@ -26,7 +28,8 @@ module RailsOps
|
|
26
28
|
session: session,
|
27
29
|
op_chain: op_chain + [op],
|
28
30
|
called_via_hook: false,
|
29
|
-
url_options: url_options
|
31
|
+
url_options: url_options,
|
32
|
+
view: view
|
30
33
|
)
|
31
34
|
end
|
32
35
|
|
@@ -22,6 +22,7 @@ module RailsOps
|
|
22
22
|
helper_method :model
|
23
23
|
helper_method :op
|
24
24
|
helper_method :op?
|
25
|
+
helper_method :op_context
|
25
26
|
|
26
27
|
after_action :ensure_operation_authorize_called!
|
27
28
|
end
|
@@ -99,6 +100,7 @@ module RailsOps
|
|
99
100
|
context.ability = current_ability if defined?(:current_ability)
|
100
101
|
context.session = session
|
101
102
|
context.url_options = url_options
|
103
|
+
context.view = view_context
|
102
104
|
context
|
103
105
|
end
|
104
106
|
end
|
@@ -5,7 +5,13 @@
|
|
5
5
|
module RailsOps::Mixins::Policies
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
|
-
POLICY_CHAIN_KEYS = [
|
8
|
+
POLICY_CHAIN_KEYS = [
|
9
|
+
:on_init,
|
10
|
+
:before_perform,
|
11
|
+
:after_perform,
|
12
|
+
:before_nested_model_ops,
|
13
|
+
:before_model_save
|
14
|
+
].freeze
|
9
15
|
|
10
16
|
included do
|
11
17
|
class_attribute :_policy_chains
|
data/lib/rails_ops/operation.rb
CHANGED
@@ -75,7 +75,15 @@ class RailsOps::Operation
|
|
75
75
|
|
76
76
|
# Return a hash of parameters with all sensitive data replaced.
|
77
77
|
def filtered_params
|
78
|
-
|
78
|
+
if defined?(ActiveSupport::ParameterFilter)
|
79
|
+
# Rails >= 6
|
80
|
+
cls = ActiveSupport::ParameterFilter
|
81
|
+
else
|
82
|
+
# Rails < 6
|
83
|
+
cls = ActionDispatch::Http::ParameterFilter
|
84
|
+
end
|
85
|
+
|
86
|
+
f = cls.new(Rails.application.config.filter_parameters)
|
79
87
|
return f.filter(params)
|
80
88
|
end
|
81
89
|
|
@@ -148,7 +148,9 @@ class RailsOps::Operation::Model < RailsOps::Operation
|
|
148
148
|
# nested model operations, you should call this method instead of calling
|
149
149
|
# `model.save!` directly.
|
150
150
|
def save!
|
151
|
+
run_policies :before_nested_model_ops
|
151
152
|
perform_nested_model_ops!
|
153
|
+
run_policies :before_model_save
|
152
154
|
model.save!
|
153
155
|
end
|
154
156
|
|
data/rails_ops.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: rails_ops 1.0.
|
2
|
+
# stub: rails_ops 1.0.3 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "rails_ops".freeze
|
6
|
-
s.version = "1.0.
|
6
|
+
s.version = "1.0.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 = "2019-
|
11
|
+
s.date = "2019-03-18"
|
12
12
|
s.files = [".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "LICENSE.txt".freeze, "README.md".freeze, "RUBY_VERSION".freeze, "Rakefile".freeze, "VERSION".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/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_casting.rb".freeze, "lib/rails_ops/model_mixins.rb".freeze, "lib/rails_ops/model_mixins/ar_extension.rb".freeze, "lib/rails_ops/model_mixins/parent_op.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/patches/active_type_patch.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/application_record.rb".freeze, "test/dummy/app/models/concerns/.keep".freeze, "test/dummy/app/models/group.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/operation/model/create_test.rb".freeze, "test/unit/rails_ops/operation/model/load_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_test.rb".freeze]
|
13
13
|
s.rubygems_version = "2.6.6".freeze
|
14
14
|
s.summary = "An operations service layer for rails projects.".freeze
|
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.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sitrox
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -285,7 +285,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
285
285
|
version: '0'
|
286
286
|
requirements: []
|
287
287
|
rubyforge_project:
|
288
|
-
rubygems_version: 2.
|
288
|
+
rubygems_version: 2.5.2.3
|
289
289
|
signing_key:
|
290
290
|
specification_version: 4
|
291
291
|
summary: An operations service layer for rails projects.
|