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