rails_ops 1.4.1 → 1.4.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 +4 -4
- data/.rubocop.yml +102 -11
- data/Appraisals +11 -11
- data/CHANGELOG.md +18 -0
- data/README.md +12 -2
- data/Rakefile +3 -5
- data/VERSION +1 -1
- data/gemfiles/rails_6.0.gemfile +3 -3
- data/gemfiles/rails_6.1.gemfile +3 -3
- data/gemfiles/rails_7.0.gemfile +3 -3
- data/lib/generators/operation/operation_generator.rb +56 -9
- data/lib/generators/operation/templates/controller.erb +34 -23
- data/lib/generators/operation/templates/controller_wrapper.erb +14 -0
- data/lib/rails_ops/authorization_backend/abstract.rb +1 -1
- data/lib/rails_ops/authorization_backend/can_can_can.rb +3 -1
- data/lib/rails_ops/controller_mixin.rb +1 -1
- data/lib/rails_ops/hookup/dsl_validator.rb +2 -1
- data/lib/rails_ops/hookup.rb +1 -1
- data/lib/rails_ops/mixins/authorization.rb +2 -2
- data/lib/rails_ops/mixins/model/nesting.rb +22 -23
- data/lib/rails_ops/mixins/policies.rb +7 -7
- data/lib/rails_ops/mixins/routes.rb +1 -1
- data/lib/rails_ops/model_mixins/marshalling.rb +1 -1
- data/lib/rails_ops/operation/model/load.rb +2 -4
- data/lib/rails_ops/operation/model/update.rb +2 -2
- data/lib/rails_ops/operation/model.rb +1 -1
- data/lib/rails_ops/operation.rb +7 -4
- data/lib/rails_ops/profiler/node.rb +1 -1
- data/lib/rails_ops/profiler.rb +1 -1
- data/lib/rails_ops.rb +43 -43
- data/rails_ops.gemspec +5 -5
- data/test/dummy/bin/bundle +1 -1
- data/test/dummy/bin/setup +1 -1
- data/test/dummy/bin/update +1 -1
- data/test/dummy/bin/yarn +5 -7
- data/test/dummy/config/environments/production.rb +1 -1
- data/test/dummy/config/spring.rb +2 -2
- data/test/test_helper.rb +5 -5
- data/test/unit/rails_ops/generators/operation_generator_test.rb +108 -12
- data/test/unit/rails_ops/mixins/model/deep_nesting_test.rb +69 -10
- data/test/unit/rails_ops/mixins/param_authorization_test.rb +3 -3
- data/test/unit/rails_ops/mixins/policies_test.rb +2 -2
- data/test/unit/rails_ops/operation/update_auth_test.rb +2 -0
- data/test/unit/rails_ops/operation/update_lazy_auth_test.rb +1 -0
- data/test/unit/rails_ops/operation_test.rb +1 -1
- metadata +12 -11
@@ -31,15 +31,15 @@ module RailsOps::Mixins::Model::Nesting
|
|
31
31
|
if reflection.nil?
|
32
32
|
fail "Association #{attribute} could not be found for #{model.model_name}."
|
33
33
|
elsif !reflection.belongs_to?
|
34
|
-
fail 'Method nest_model_op only supports :belongs_to associations, '\
|
35
|
-
"but association #{attribute} of model #{model.model_name} is a "\
|
34
|
+
fail 'Method nest_model_op only supports :belongs_to associations, ' \
|
35
|
+
"but association #{attribute} of model #{model.model_name} is a " \
|
36
36
|
"#{reflection.macro} association."
|
37
37
|
elsif reflection.options[:autosave] != false
|
38
|
-
fail "Association #{attribute} of #{model.model_name} has :autosave turned on. "\
|
38
|
+
fail "Association #{attribute} of #{model.model_name} has :autosave turned on. " \
|
39
39
|
'This is not supported by nest_model_op.'
|
40
40
|
elsif !reflection.options[:validate]
|
41
|
-
fail "Association #{attribute} of #{model.model_name} has :validate turned off. "\
|
42
|
-
|
41
|
+
fail "Association #{attribute} of #{model.model_name} has :validate turned off. " \
|
42
|
+
'This is not supported by nest_model_op.'
|
43
43
|
end
|
44
44
|
|
45
45
|
# ---------------------------------------------------------------
|
@@ -61,11 +61,9 @@ module RailsOps::Mixins::Model::Nesting
|
|
61
61
|
# ---------------------------------------------------------------
|
62
62
|
# Validate inverse association reflection if given
|
63
63
|
# ---------------------------------------------------------------
|
64
|
-
if (inverse_reflection = reflection.inverse_of)
|
65
|
-
|
66
|
-
|
67
|
-
'This is not supported by nest_model_op.'
|
68
|
-
end
|
64
|
+
if (inverse_reflection = reflection.inverse_of) && (inverse_reflection.options[:autosave] != false)
|
65
|
+
fail "Association #{inverse_reflection.name} of #{inverse_reflection.active_record} has :autosave turned on. " \
|
66
|
+
'This is not supported by nest_model_op.'
|
69
67
|
end
|
70
68
|
|
71
69
|
# ---------------------------------------------------------------
|
@@ -73,12 +71,12 @@ module RailsOps::Mixins::Model::Nesting
|
|
73
71
|
# ---------------------------------------------------------------
|
74
72
|
self._nested_model_ops = _nested_model_ops.merge(
|
75
73
|
attribute => {
|
76
|
-
klass:
|
77
|
-
param_key:
|
78
|
-
attribute_name:
|
79
|
-
params_proc:
|
74
|
+
klass: klass,
|
75
|
+
param_key: param_key,
|
76
|
+
attribute_name: reflection.class_name.underscore,
|
77
|
+
params_proc: params_block,
|
80
78
|
lookup_via_id_on_update: lookup_via_id_on_update,
|
81
|
-
allow_id:
|
79
|
+
allow_id: allow_id
|
82
80
|
}
|
83
81
|
)
|
84
82
|
end
|
@@ -104,7 +102,7 @@ module RailsOps::Mixins::Model::Nesting
|
|
104
102
|
|
105
103
|
def build_nested_model_ops(action)
|
106
104
|
# Validate action
|
107
|
-
fail 'Unsupported action.' unless %i
|
105
|
+
fail 'Unsupported action.' unless %i[create update].include?(action)
|
108
106
|
|
109
107
|
# Make sure that this method can only be run once per operation
|
110
108
|
fail 'Nested model operations can only be built once.' if @nested_model_ops
|
@@ -126,11 +124,12 @@ module RailsOps::Mixins::Model::Nesting
|
|
126
124
|
# Wrap parameters for nested model operation
|
127
125
|
param_key = config[:param_key] || config[:klass].model.model_name.param_key
|
128
126
|
|
129
|
-
|
127
|
+
case action
|
128
|
+
when :create
|
130
129
|
wrapped_params = {
|
131
130
|
param_key => op_params
|
132
131
|
}
|
133
|
-
|
132
|
+
when :update
|
134
133
|
if config[:lookup_via_id_on_update]
|
135
134
|
foreign_key = model.class.reflect_on_association(attribute).foreign_key
|
136
135
|
id = model.send(foreign_key)
|
@@ -139,7 +138,7 @@ module RailsOps::Mixins::Model::Nesting
|
|
139
138
|
end
|
140
139
|
|
141
140
|
wrapped_params = {
|
142
|
-
:id
|
141
|
+
:id => id,
|
143
142
|
param_key => op_params
|
144
143
|
}
|
145
144
|
else
|
@@ -173,15 +172,15 @@ module RailsOps::Mixins::Model::Nesting
|
|
173
172
|
# line also makes sure a model is built.
|
174
173
|
model.validate!
|
175
174
|
|
175
|
+
# Make sure nested model operations are built
|
176
|
+
fail 'Nested model operations are not built yet. Make sure the model is built.' unless @nested_model_ops
|
177
|
+
|
176
178
|
# Validate all unchanged nested models as the above call to "validate!" only validates
|
177
179
|
# associations that are changed.
|
178
|
-
@nested_model_ops.
|
180
|
+
@nested_model_ops.each_key do |attribute|
|
179
181
|
model.send(attribute).validate!
|
180
182
|
end
|
181
183
|
|
182
|
-
# Make sure nested model operations are build
|
183
|
-
fail 'Nested model operations are not built yet. Make sure the model is built.' unless @nested_model_ops
|
184
|
-
|
185
184
|
@nested_model_ops.each do |attribute, op|
|
186
185
|
# Run the nested model operation and fail hard if a validation error
|
187
186
|
# arises. This should generally not happen as the whole hierarchy has been
|
@@ -5,17 +5,17 @@
|
|
5
5
|
module RailsOps::Mixins::Policies
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
|
-
POLICY_CHAIN_KEYS = [
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
POLICY_CHAIN_KEYS = %i[
|
9
|
+
on_init
|
10
|
+
before_perform
|
11
|
+
after_perform
|
12
|
+
before_nested_model_ops
|
13
|
+
before_model_save
|
14
14
|
].freeze
|
15
15
|
|
16
16
|
included do
|
17
17
|
class_attribute :_policy_chains
|
18
|
-
self._policy_chains =
|
18
|
+
self._policy_chains = POLICY_CHAIN_KEYS.map { |key| [key, [].freeze] }.to_h
|
19
19
|
end
|
20
20
|
|
21
21
|
module ClassMethods
|
@@ -6,7 +6,7 @@ module RailsOps::Mixins::Routes
|
|
6
6
|
# this class on the first call. This is not thread-safe, but the worst case is
|
7
7
|
# that this is performed more than once.
|
8
8
|
def self.container_class
|
9
|
-
@
|
9
|
+
@container_class ||= Class.new do
|
10
10
|
include Rails.application.routes.url_helpers
|
11
11
|
|
12
12
|
attr_reader :url_options
|
@@ -5,7 +5,7 @@ module RailsOps
|
|
5
5
|
# with default procs which is not supported by `Marshal.dump`. This mixin
|
6
6
|
# therefore excludes this instance variable from being dumped and loaded.
|
7
7
|
module Marshalling
|
8
|
-
UNMARSHALED_VARIABLES = %i
|
8
|
+
UNMARSHALED_VARIABLES = %i[@parent_op].freeze
|
9
9
|
|
10
10
|
extend ActiveSupport::Concern
|
11
11
|
|
@@ -45,7 +45,7 @@ class RailsOps::Operation::Model::Load < RailsOps::Operation::Model
|
|
45
45
|
# that currently, :shared only works for MySql, Postgresql and Oracle DB,
|
46
46
|
# other adapters always use the exclusive lock.
|
47
47
|
def self.lock_mode(lock_mode)
|
48
|
-
fail "Unknown lock mode #{lock_mode}" unless %i
|
48
|
+
fail "Unknown lock mode #{lock_mode}" unless %i[shared exclusive].include?(lock_mode)
|
49
49
|
|
50
50
|
self._lock_mode = lock_mode
|
51
51
|
end
|
@@ -108,12 +108,10 @@ class RailsOps::Operation::Model::Load < RailsOps::Operation::Model
|
|
108
108
|
adapter_type = ActiveRecord::Base.connection.adapter_name.downcase.to_sym
|
109
109
|
|
110
110
|
case adapter_type
|
111
|
-
when :mysql, :mysql2
|
111
|
+
when :mysql, :mysql2, :oracleenhanced
|
112
112
|
return 'LOCK IN SHARE MODE'
|
113
113
|
when :postgresql
|
114
114
|
return 'FOR SHARE'
|
115
|
-
when :oracleenhanced
|
116
|
-
return 'LOCK IN SHARE MODE'
|
117
115
|
end
|
118
116
|
|
119
117
|
# Don't return anything, which will make the `lock` statement
|
@@ -20,8 +20,8 @@ class RailsOps::Operation::Model::Update < RailsOps::Operation::Model::Load
|
|
20
20
|
if self.class._model_authorization_lazy
|
21
21
|
if load_model_authorization_action.nil?
|
22
22
|
fail RailsOps::Exceptions::NoAuthorizationPerformed,
|
23
|
-
"Operation #{self.class.name} must specify a "\
|
24
|
-
'load_model_authorization_action because model '\
|
23
|
+
"Operation #{self.class.name} must specify a " \
|
24
|
+
'load_model_authorization_action because model ' \
|
25
25
|
'authorization is configured to be lazy.'
|
26
26
|
else
|
27
27
|
authorize_model! load_model_authorization_action, model
|
data/lib/rails_ops/operation.rb
CHANGED
@@ -39,9 +39,10 @@ class RailsOps::Operation
|
|
39
39
|
# @param params [Hash] Optional parameters hash
|
40
40
|
def initialize(context_or_params = {}, params = {})
|
41
41
|
# Handle parameter signature
|
42
|
-
|
42
|
+
case context_or_params
|
43
|
+
when RailsOps::Context
|
43
44
|
context = context_or_params
|
44
|
-
|
45
|
+
when Hash, ActionController::Parameters
|
45
46
|
context = nil
|
46
47
|
params = context_or_params
|
47
48
|
end
|
@@ -80,7 +81,9 @@ class RailsOps::Operation
|
|
80
81
|
|
81
82
|
# Returns a copy of the operation's params, wrapped in an OpenStruct object.
|
82
83
|
def osparams
|
84
|
+
# rubocop: disable Style/OpenStructUse
|
83
85
|
@osparams ||= OpenStruct.new(params)
|
86
|
+
# rubocop: enable Style/OpenStructUse
|
84
87
|
end
|
85
88
|
|
86
89
|
# Return a hash of parameters with all sensitive data replaced.
|
@@ -131,7 +134,7 @@ class RailsOps::Operation
|
|
131
134
|
if params
|
132
135
|
begin
|
133
136
|
inspected_params = inspect_params(filtered_params)
|
134
|
-
rescue
|
137
|
+
rescue StandardError
|
135
138
|
inspected_params = '<could not inspect params>'
|
136
139
|
end
|
137
140
|
inspection += " (#{inspected_params})"
|
@@ -222,7 +225,7 @@ class RailsOps::Operation
|
|
222
225
|
# elegant and transparent approach as explained in the issue.
|
223
226
|
def with_rollback_on_exception(&_block)
|
224
227
|
yield
|
225
|
-
rescue => e
|
228
|
+
rescue StandardError => e
|
226
229
|
fail RailsOps::Exceptions::RollbackRequired, e, e.backtrace
|
227
230
|
end
|
228
231
|
|
data/lib/rails_ops/profiler.rb
CHANGED
data/lib/rails_ops.rb
CHANGED
@@ -50,46 +50,46 @@ end
|
|
50
50
|
# ---------------------------------------------------------------
|
51
51
|
# Require RailsOps
|
52
52
|
# ---------------------------------------------------------------
|
53
|
-
require 'rails_ops/authorization_backend/abstract
|
54
|
-
require 'rails_ops/configuration
|
55
|
-
require 'rails_ops/context
|
56
|
-
require 'rails_ops/controller_mixin
|
57
|
-
require 'rails_ops/exceptions
|
58
|
-
require 'rails_ops/hooked_job
|
59
|
-
require 'rails_ops/hookup
|
60
|
-
require 'rails_ops/hookup/dsl
|
61
|
-
require 'rails_ops/hookup/dsl_validator
|
62
|
-
require 'rails_ops/hookup/hook
|
63
|
-
require 'rails_ops/log_subscriber
|
64
|
-
require 'rails_ops/mixins
|
65
|
-
require 'rails_ops/mixins/authorization
|
66
|
-
require 'rails_ops/mixins/param_authorization
|
67
|
-
require 'rails_ops/mixins/log_settings
|
68
|
-
require 'rails_ops/mixins/model
|
69
|
-
require 'rails_ops/mixins/model/authorization
|
70
|
-
require 'rails_ops/mixins/model/nesting
|
71
|
-
require 'rails_ops/mixins/policies
|
72
|
-
require 'rails_ops/mixins/require_context
|
73
|
-
require 'rails_ops/mixins/routes
|
74
|
-
require 'rails_ops/mixins/schema_validation
|
75
|
-
require 'rails_ops/mixins/sub_ops
|
76
|
-
require 'rails_ops/model_mixins
|
77
|
-
require 'rails_ops/model_mixins/ar_extension
|
78
|
-
require 'rails_ops/model_mixins/parent_op
|
79
|
-
require 'rails_ops/model_mixins/sti_fixes
|
80
|
-
require 'rails_ops/model_mixins/marshalling
|
81
|
-
require 'rails_ops/model_mixins/virtual_attributes
|
82
|
-
require 'rails_ops/model_mixins/virtual_attributes/virtual_column_wrapper
|
83
|
-
require 'rails_ops/model_mixins/virtual_has_one
|
84
|
-
require 'rails_ops/model_mixins/virtual_model_name
|
85
|
-
require 'rails_ops/operation
|
86
|
-
require 'rails_ops/operation/model
|
87
|
-
require 'rails_ops/operation/model/load
|
88
|
-
require 'rails_ops/operation/model/create
|
89
|
-
require 'rails_ops/operation/model/destroy
|
90
|
-
require 'rails_ops/operation/model/update
|
91
|
-
require 'rails_ops/profiler
|
92
|
-
require 'rails_ops/profiler/node
|
93
|
-
require 'rails_ops/railtie
|
94
|
-
require 'rails_ops/scoped_env
|
95
|
-
require 'rails_ops/virtual_model
|
53
|
+
require 'rails_ops/authorization_backend/abstract'
|
54
|
+
require 'rails_ops/configuration'
|
55
|
+
require 'rails_ops/context'
|
56
|
+
require 'rails_ops/controller_mixin'
|
57
|
+
require 'rails_ops/exceptions'
|
58
|
+
require 'rails_ops/hooked_job' if defined?(ActiveJob)
|
59
|
+
require 'rails_ops/hookup'
|
60
|
+
require 'rails_ops/hookup/dsl'
|
61
|
+
require 'rails_ops/hookup/dsl_validator'
|
62
|
+
require 'rails_ops/hookup/hook'
|
63
|
+
require 'rails_ops/log_subscriber'
|
64
|
+
require 'rails_ops/mixins'
|
65
|
+
require 'rails_ops/mixins/authorization'
|
66
|
+
require 'rails_ops/mixins/param_authorization'
|
67
|
+
require 'rails_ops/mixins/log_settings'
|
68
|
+
require 'rails_ops/mixins/model'
|
69
|
+
require 'rails_ops/mixins/model/authorization'
|
70
|
+
require 'rails_ops/mixins/model/nesting'
|
71
|
+
require 'rails_ops/mixins/policies'
|
72
|
+
require 'rails_ops/mixins/require_context'
|
73
|
+
require 'rails_ops/mixins/routes'
|
74
|
+
require 'rails_ops/mixins/schema_validation'
|
75
|
+
require 'rails_ops/mixins/sub_ops'
|
76
|
+
require 'rails_ops/model_mixins'
|
77
|
+
require 'rails_ops/model_mixins/ar_extension'
|
78
|
+
require 'rails_ops/model_mixins/parent_op'
|
79
|
+
require 'rails_ops/model_mixins/sti_fixes'
|
80
|
+
require 'rails_ops/model_mixins/marshalling'
|
81
|
+
require 'rails_ops/model_mixins/virtual_attributes'
|
82
|
+
require 'rails_ops/model_mixins/virtual_attributes/virtual_column_wrapper'
|
83
|
+
require 'rails_ops/model_mixins/virtual_has_one'
|
84
|
+
require 'rails_ops/model_mixins/virtual_model_name'
|
85
|
+
require 'rails_ops/operation'
|
86
|
+
require 'rails_ops/operation/model'
|
87
|
+
require 'rails_ops/operation/model/load'
|
88
|
+
require 'rails_ops/operation/model/create'
|
89
|
+
require 'rails_ops/operation/model/destroy'
|
90
|
+
require 'rails_ops/operation/model/update'
|
91
|
+
require 'rails_ops/profiler'
|
92
|
+
require 'rails_ops/profiler/node'
|
93
|
+
require 'rails_ops/railtie' if defined?(Rails)
|
94
|
+
require 'rails_ops/scoped_env'
|
95
|
+
require 'rails_ops/virtual_model'
|
data/rails_ops.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: rails_ops 1.4.
|
2
|
+
# stub: rails_ops 1.4.3 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "rails_ops".freeze
|
6
|
-
s.version = "1.4.
|
6
|
+
s.version = "1.4.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 = "2023-
|
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, "Gemfile".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, "lib/generators/operation/USAGE".freeze, "lib/generators/operation/operation_generator.rb".freeze, "lib/generators/operation/templates/controller.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/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/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/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/mixins/model/deep_nesting_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/model/create_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_auth_test.rb".freeze, "test/unit/rails_ops/operation/update_lazy_auth_test.rb".freeze, "test/unit/rails_ops/operation_test.rb".freeze]
|
11
|
+
s.date = "2023-03-27"
|
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, "Gemfile".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, "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/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/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/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/mixins/model/deep_nesting_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/model/create_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_auth_test.rb".freeze, "test/unit/rails_ops/operation/update_lazy_auth_test.rb".freeze, "test/unit/rails_ops/operation_test.rb".freeze]
|
13
13
|
s.rubygems_version = "3.4.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/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/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/mixins/model/deep_nesting_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/model/create_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_auth_test.rb".freeze, "test/unit/rails_ops/operation/update_lazy_auth_test.rb".freeze, "test/unit/rails_ops/operation_test.rb".freeze]
|
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_development_dependency(%q<cancancan>.freeze, [">= 0"])
|
24
24
|
s.add_development_dependency(%q<pry>.freeze, [">= 0"])
|
25
25
|
s.add_development_dependency(%q<colorize>.freeze, [">= 0"])
|
26
|
-
s.add_development_dependency(%q<rubocop>.freeze, ["=
|
26
|
+
s.add_development_dependency(%q<rubocop>.freeze, ["= 1.45.1"])
|
27
27
|
s.add_development_dependency(%q<sprockets-rails>.freeze, [">= 0"])
|
28
28
|
s.add_runtime_dependency(%q<active_type>.freeze, [">= 1.3.0"])
|
29
29
|
s.add_runtime_dependency(%q<minitest>.freeze, [">= 0"])
|
data/test/dummy/bin/bundle
CHANGED
data/test/dummy/bin/setup
CHANGED
@@ -4,7 +4,7 @@ require 'fileutils'
|
|
4
4
|
include FileUtils
|
5
5
|
|
6
6
|
# path to your application root.
|
7
|
-
APP_ROOT = Pathname.new File.expand_path('
|
7
|
+
APP_ROOT = Pathname.new File.expand_path('..', __dir__)
|
8
8
|
|
9
9
|
def system!(*args)
|
10
10
|
system(*args) || abort("\n== Command #{args} failed ==")
|
data/test/dummy/bin/update
CHANGED
@@ -4,7 +4,7 @@ require 'fileutils'
|
|
4
4
|
include FileUtils
|
5
5
|
|
6
6
|
# path to your application root.
|
7
|
-
APP_ROOT = Pathname.new File.expand_path('
|
7
|
+
APP_ROOT = Pathname.new File.expand_path('..', __dir__)
|
8
8
|
|
9
9
|
def system!(*args)
|
10
10
|
system(*args) || abort("\n== Command #{args} failed ==")
|
data/test/dummy/bin/yarn
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
VENDOR_PATH = File.expand_path('..', __dir__)
|
3
3
|
Dir.chdir(VENDOR_PATH) do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
exit 1
|
10
|
-
end
|
4
|
+
exec "yarnpkg #{ARGV.join(' ')}"
|
5
|
+
rescue Errno::ENOENT
|
6
|
+
warn 'Yarn executable was not detected in the system.'
|
7
|
+
warn 'Download Yarn at https://yarnpkg.com/en/docs/install'
|
8
|
+
exit 1
|
11
9
|
end
|
@@ -74,7 +74,7 @@ Rails.application.configure do
|
|
74
74
|
config.active_support.deprecation = :notify
|
75
75
|
|
76
76
|
# Use default logging formatter so that PID and timestamp are not suppressed.
|
77
|
-
config.log_formatter =
|
77
|
+
config.log_formatter = Logger::Formatter.new
|
78
78
|
|
79
79
|
# Use a different logger for distributed setups.
|
80
80
|
# require 'syslog/logger'
|
data/test/dummy/config/spring.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path('
|
1
|
+
require File.expand_path('../test/dummy/config/environment.rb', __dir__)
|
2
2
|
# ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)]
|
3
3
|
require 'rails/test_help'
|
4
4
|
require 'pry'
|
@@ -14,13 +14,13 @@ Rails::TestUnitReporter.executable = 'bin/test'
|
|
14
14
|
|
15
15
|
# Load fixtures from the engine
|
16
16
|
if ActiveSupport::TestCase.respond_to?(:fixture_path=)
|
17
|
-
ActiveSupport::TestCase.fixture_path = File.expand_path('
|
17
|
+
ActiveSupport::TestCase.fixture_path = File.expand_path('fixtures', __dir__)
|
18
18
|
ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
|
19
|
-
ActiveSupport::TestCase.file_fixture_path = ActiveSupport::TestCase.fixture_path
|
19
|
+
ActiveSupport::TestCase.file_fixture_path = File.join(ActiveSupport::TestCase.fixture_path, '/files')
|
20
20
|
ActiveSupport::TestCase.fixtures :all
|
21
21
|
end
|
22
22
|
|
23
|
-
load File.dirname(__FILE__)
|
23
|
+
load File.join(File.dirname(__FILE__), '/dummy/db/schema.rb')
|
24
24
|
|
25
25
|
require 'request_store'
|
26
26
|
|
@@ -39,7 +39,7 @@ module TestHelper
|
|
39
39
|
fail TypeError, "Expected #{expected.inspect} to be a kind of String or Regexp, not #{expected.class}"
|
40
40
|
end
|
41
41
|
|
42
|
-
ex = assert_raises(exception, *msg)
|
42
|
+
ex = assert_raises(exception, *msg, &block)
|
43
43
|
msg = message(msg, '') { "Expected Exception(#{exception}) was raised, but the message doesn't match" }
|
44
44
|
|
45
45
|
if assert == :assert_equal
|