rails_ops 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|