rails_ops 1.0.19 → 1.0.20
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 +4 -0
- data/README.md +53 -0
- data/VERSION +1 -1
- data/lib/rails_ops/authorization_backend/abstract.rb +7 -0
- data/lib/rails_ops/authorization_backend/can_can_can.rb +6 -1
- data/lib/rails_ops/mixins/model/authorization.rb +22 -0
- data/lib/rails_ops/mixins/param_authorization.rb +64 -0
- data/lib/rails_ops/operation.rb +1 -0
- data/lib/rails_ops.rb +1 -0
- data/rails_ops.gemspec +5 -5
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0926954940928d36670c2390e05b6304e604d720b4a23fafa38b15d0dd32ed1a'
|
4
|
+
data.tar.gz: 589ff18749fb09feb6b2e396374bf710fb6d76c531f8e67fe1a6ad836ece0f60
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1638ef069a9827415f529d890fa4e91f0348b59f2c3f02312bb38825250c25160e6d83800d18db770c6abdfdcb5d1f244478de8d2b551f36f6a9c329c63ba6ef
|
7
|
+
data.tar.gz: 72c282d6acd1f3151844daa01843f80610200be564e7ae8a251ee1e8fd3bf91ae1c12e448a78f3a37ad4af2fc514625f5f25f207ad0a00a4cdf707c2d70638fa
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -769,6 +769,59 @@ end
|
|
769
769
|
This method otherwise does exactly the same as `authorize!` (in fact, it's the
|
770
770
|
underlying method used by it).
|
771
771
|
|
772
|
+
### Param authorization
|
773
|
+
|
774
|
+
Using the static operation method `authorize_param`, you can perform additional
|
775
|
+
authorization checks when specific params are passed to the operation. This
|
776
|
+
allows you to disallow certain params, i.e. when updating a model and wanting to
|
777
|
+
restrict the user to certain fields.
|
778
|
+
|
779
|
+
When using non-model operations (operations not inheriting from
|
780
|
+
`RailsOps::Operation::Model` or one of its subclasses), `authorize_param`
|
781
|
+
requires you to specify an `action` and optional, additional args or a block
|
782
|
+
that performs custom authorization:
|
783
|
+
|
784
|
+
```ruby
|
785
|
+
class Operations::User::DoSomething < RailsOps::Operation
|
786
|
+
schema do
|
787
|
+
opt :user do
|
788
|
+
opt :name
|
789
|
+
opt :group_id
|
790
|
+
end
|
791
|
+
end
|
792
|
+
|
793
|
+
# Example with passing an action and additional args
|
794
|
+
authorize_param %i(user group_id), :update_group_id, :some_subject
|
795
|
+
|
796
|
+
# Example with passing a block
|
797
|
+
authorize_param %i(user group_id) do
|
798
|
+
# This is executed in the context of the op instance
|
799
|
+
fail 'Some message' unless user_has_permission?
|
800
|
+
end
|
801
|
+
```
|
802
|
+
|
803
|
+
The first param always provides the path to the param to be checked for
|
804
|
+
existence. Note that this only works with nested hash structures, but not with
|
805
|
+
arrays and other objects. The first level of the `params` hash is always using
|
806
|
+
indifferent access, so it does not matter whether you pass a symbol or a string
|
807
|
+
as the first path segment. For additional path segments, it needs to match the
|
808
|
+
actual type that is used as hash key. For example: `[:user, 'group_id']`.
|
809
|
+
|
810
|
+
For model operations, you only need to pass a `path` and an `action` if you want
|
811
|
+
to perform authorization on your model:
|
812
|
+
|
813
|
+
```ruby
|
814
|
+
class Operations::User::Create < RailsOps::Operation::Model::Create
|
815
|
+
schema do
|
816
|
+
opt :user do
|
817
|
+
opt :name
|
818
|
+
opt :group_id
|
819
|
+
end
|
820
|
+
end
|
821
|
+
|
822
|
+
authorize_param %i(user group_id), :assign_group_id
|
823
|
+
```
|
824
|
+
|
772
825
|
### Disabling authorization
|
773
826
|
|
774
827
|
Sometimes you don't want a specific operation to perform authorization, or you
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.20
|
@@ -3,5 +3,12 @@ module RailsOps::AuthorizationBackend
|
|
3
3
|
def authorize!(_operation, *_args)
|
4
4
|
fail NotImplementedError
|
5
5
|
end
|
6
|
+
|
7
|
+
def exception_class
|
8
|
+
@exception_class ||= self.class::EXCEPTION_CLASS.constantize
|
9
|
+
rescue NameError
|
10
|
+
fail "Unable to constantize exception class #{self.class::EXCEPTION_CLASS.inspect} "\
|
11
|
+
"for authorization backend #{self.class.name}. Is the library loaded?"
|
12
|
+
end
|
6
13
|
end
|
7
14
|
end
|
@@ -1,8 +1,13 @@
|
|
1
|
+
require 'cancan'
|
2
|
+
|
1
3
|
module RailsOps::AuthorizationBackend
|
2
4
|
class CanCanCan < Abstract
|
5
|
+
EXCEPTION_CLASS = 'CanCan::AccessDenied'
|
6
|
+
|
3
7
|
def initialize
|
4
8
|
unless defined?(CanCanCan)
|
5
|
-
fail
|
9
|
+
fail 'RailsOps is configured to use CanCanCan authorization'\
|
10
|
+
"backend, but the Gem 'cancancan' does not appear to be installed."
|
6
11
|
end
|
7
12
|
end
|
8
13
|
|
@@ -19,6 +19,28 @@ module RailsOps::Mixins::Model::Authorization
|
|
19
19
|
|
20
20
|
return _model_authorization_action
|
21
21
|
end
|
22
|
+
|
23
|
+
# This wraps the original method
|
24
|
+
# {RailsOps::Mixins::ParamAuthorization::ClassClassMethods.authorize_param}
|
25
|
+
# to automatically use `authorize_model_with_authorize_only` and pass the
|
26
|
+
# operations `model` to it (besides the given `action` and optional,
|
27
|
+
# additional `*args`.
|
28
|
+
#
|
29
|
+
# If a block or no action is given, the original method will be called. See
|
30
|
+
# the original method documentation for more information.
|
31
|
+
def authorize_param(path, action = nil, *args, &block)
|
32
|
+
if block_given? || action.blank?
|
33
|
+
super
|
34
|
+
else
|
35
|
+
super(path) do
|
36
|
+
authorize_model_with_authorize_only!(
|
37
|
+
action,
|
38
|
+
model,
|
39
|
+
*args
|
40
|
+
)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
22
44
|
end
|
23
45
|
|
24
46
|
def model_authorization_action
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module RailsOps::Mixins::ParamAuthorization
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
class_attribute :_param_authorizations
|
6
|
+
|
7
|
+
self._param_authorizations = [].freeze
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
# Call this method to perform authorization if a specific parameter is
|
12
|
+
# passed in the operations `params` hash.
|
13
|
+
#
|
14
|
+
# Note that this does not work for params contained in other structures than
|
15
|
+
# nested hashes. I.e. params within arrays can not be extracted.
|
16
|
+
#
|
17
|
+
# @param path [Array] An array, usually of symbols or strings, which can be
|
18
|
+
# used to dig for the respective parameter you want to authorize.
|
19
|
+
#
|
20
|
+
# @param action [Object] The `action` passed to the authorization backend.
|
21
|
+
#
|
22
|
+
# @param *args [Array<Object>] Additional arguments passed to the
|
23
|
+
# authorization backend.
|
24
|
+
#
|
25
|
+
# @yield A block used for custom authorization. The block is only called if
|
26
|
+
# the specified parameter is contained in the `params` hash and is supposed
|
27
|
+
# to throw an authorization exception if the authorization failed. The
|
28
|
+
# exception must be of the exception class specified in your configured
|
29
|
+
# authorization backend. The block receives no arguments and is executed
|
30
|
+
# in context of the operation instance.
|
31
|
+
def authorize_param(path, action = nil, *args, &block)
|
32
|
+
# Validate parameters
|
33
|
+
if block_given? && (action || args.any?)
|
34
|
+
fail ArgumentError,
|
35
|
+
'If you pass an authorization block, no action and additional args are supported.'
|
36
|
+
elsif !block_given? && !action
|
37
|
+
fail ArgumentError,
|
38
|
+
'You need to supply an action and additional args if no authorization block is provided.'
|
39
|
+
end
|
40
|
+
|
41
|
+
policy do
|
42
|
+
# Abort unless param is given
|
43
|
+
if path.size > 1
|
44
|
+
next unless params.dig(*path[0..-2])&.include?(path.last)
|
45
|
+
else
|
46
|
+
next unless params.include?(path.first)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Check authorization
|
50
|
+
exception_class = RailsOps.authorization_backend.exception_class
|
51
|
+
|
52
|
+
begin
|
53
|
+
if block_given?
|
54
|
+
instance_exec(&block)
|
55
|
+
else
|
56
|
+
authorize_only!(action, *args)
|
57
|
+
end
|
58
|
+
rescue exception_class
|
59
|
+
fail exception_class, "Got unauthorized param #{path.join('.').inspect}."
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/rails_ops/operation.rb
CHANGED
@@ -3,6 +3,7 @@ class RailsOps::Operation
|
|
3
3
|
include RailsOps::Mixins::SubOps
|
4
4
|
include RailsOps::Mixins::SchemaValidation
|
5
5
|
include RailsOps::Mixins::Authorization
|
6
|
+
include RailsOps::Mixins::ParamAuthorization
|
6
7
|
include RailsOps::Mixins::RequireContext
|
7
8
|
include RailsOps::Mixins::LogSettings
|
8
9
|
|
data/lib/rails_ops.rb
CHANGED
@@ -75,6 +75,7 @@ require 'rails_ops/hookup/hook.rb'
|
|
75
75
|
require 'rails_ops/log_subscriber.rb'
|
76
76
|
require 'rails_ops/mixins.rb'
|
77
77
|
require 'rails_ops/mixins/authorization.rb'
|
78
|
+
require 'rails_ops/mixins/param_authorization.rb'
|
78
79
|
require 'rails_ops/mixins/log_settings.rb'
|
79
80
|
require 'rails_ops/mixins/model.rb'
|
80
81
|
require 'rails_ops/mixins/model/authorization.rb'
|
data/rails_ops.gemspec
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: rails_ops 1.0.
|
2
|
+
# stub: rails_ops 1.0.20 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.20"
|
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 = "2020-02-
|
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, "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/mixins/model/nesting.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/update_test.rb".freeze, "test/unit/rails_ops/operation/model_test.rb".freeze, "test/unit/rails_ops/operation_test.rb".freeze]
|
13
|
-
s.rubygems_version = "3.0.
|
11
|
+
s.date = "2020-02-13"
|
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, "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/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_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/mixins/model/nesting.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/update_test.rb".freeze, "test/unit/rails_ops/operation/model_test.rb".freeze, "test/unit/rails_ops/operation_test.rb".freeze]
|
13
|
+
s.rubygems_version = "3.0.6".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/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/mixins/model/nesting.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/update_test.rb".freeze, "test/unit/rails_ops/operation/model_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.0.
|
4
|
+
version: 1.0.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sitrox
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-02-
|
11
|
+
date: 2020-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -171,6 +171,7 @@ files:
|
|
171
171
|
- lib/rails_ops/mixins/model.rb
|
172
172
|
- lib/rails_ops/mixins/model/authorization.rb
|
173
173
|
- lib/rails_ops/mixins/model/nesting.rb
|
174
|
+
- lib/rails_ops/mixins/param_authorization.rb
|
174
175
|
- lib/rails_ops/mixins/policies.rb
|
175
176
|
- lib/rails_ops/mixins/require_context.rb
|
176
177
|
- lib/rails_ops/mixins/routes.rb
|