rails_ops 1.4.1 → 1.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +102 -11
  3. data/Appraisals +11 -11
  4. data/CHANGELOG.md +18 -0
  5. data/README.md +12 -2
  6. data/Rakefile +3 -5
  7. data/VERSION +1 -1
  8. data/gemfiles/rails_6.0.gemfile +3 -3
  9. data/gemfiles/rails_6.1.gemfile +3 -3
  10. data/gemfiles/rails_7.0.gemfile +3 -3
  11. data/lib/generators/operation/operation_generator.rb +56 -9
  12. data/lib/generators/operation/templates/controller.erb +34 -23
  13. data/lib/generators/operation/templates/controller_wrapper.erb +14 -0
  14. data/lib/rails_ops/authorization_backend/abstract.rb +1 -1
  15. data/lib/rails_ops/authorization_backend/can_can_can.rb +3 -1
  16. data/lib/rails_ops/controller_mixin.rb +1 -1
  17. data/lib/rails_ops/hookup/dsl_validator.rb +2 -1
  18. data/lib/rails_ops/hookup.rb +1 -1
  19. data/lib/rails_ops/mixins/authorization.rb +2 -2
  20. data/lib/rails_ops/mixins/model/nesting.rb +22 -23
  21. data/lib/rails_ops/mixins/policies.rb +7 -7
  22. data/lib/rails_ops/mixins/routes.rb +1 -1
  23. data/lib/rails_ops/model_mixins/marshalling.rb +1 -1
  24. data/lib/rails_ops/operation/model/load.rb +2 -4
  25. data/lib/rails_ops/operation/model/update.rb +2 -2
  26. data/lib/rails_ops/operation/model.rb +1 -1
  27. data/lib/rails_ops/operation.rb +7 -4
  28. data/lib/rails_ops/profiler/node.rb +1 -1
  29. data/lib/rails_ops/profiler.rb +1 -1
  30. data/lib/rails_ops.rb +43 -43
  31. data/rails_ops.gemspec +5 -5
  32. data/test/dummy/bin/bundle +1 -1
  33. data/test/dummy/bin/setup +1 -1
  34. data/test/dummy/bin/update +1 -1
  35. data/test/dummy/bin/yarn +5 -7
  36. data/test/dummy/config/environments/production.rb +1 -1
  37. data/test/dummy/config/spring.rb +2 -2
  38. data/test/test_helper.rb +5 -5
  39. data/test/unit/rails_ops/generators/operation_generator_test.rb +108 -12
  40. data/test/unit/rails_ops/mixins/model/deep_nesting_test.rb +69 -10
  41. data/test/unit/rails_ops/mixins/param_authorization_test.rb +3 -3
  42. data/test/unit/rails_ops/mixins/policies_test.rb +2 -2
  43. data/test/unit/rails_ops/operation/update_auth_test.rb +2 -0
  44. data/test/unit/rails_ops/operation/update_lazy_auth_test.rb +1 -0
  45. data/test/unit/rails_ops/operation_test.rb +1 -1
  46. 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
- 'This is not supported by nest_model_op.'
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
- if inverse_reflection.options[:autosave] != false
66
- fail "Association #{inverse_reflection.name} of #{inverse_reflection.active_record} has :autosave turned on. "\
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: klass,
77
- param_key: param_key,
78
- attribute_name: reflection.class_name.underscore,
79
- params_proc: params_block,
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: 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(create update).include?(action)
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
- if action == :create
127
+ case action
128
+ when :create
130
129
  wrapped_params = {
131
130
  param_key => op_params
132
131
  }
133
- elsif action == :update
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 => 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.keys.each do |attribute|
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
- :on_init,
10
- :before_perform,
11
- :after_perform,
12
- :before_nested_model_ops,
13
- :before_model_save
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 = Hash[POLICY_CHAIN_KEYS.map { |key| [key, [].freeze] }]
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
- @container ||= Class.new do
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(@parent_op).freeze
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(shared exclusive).include?(lock_mode)
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
@@ -70,7 +70,7 @@ class RailsOps::Operation::Model < RailsOps::Operation
70
70
  end
71
71
 
72
72
  # Set virtual STI name if given.
73
- if model_class && model_class.name
73
+ if model_class&.name
74
74
  _model_class.virtual_sti_name = model_class.name
75
75
  end
76
76
 
@@ -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
- if context_or_params.is_a?(RailsOps::Context)
42
+ case context_or_params
43
+ when RailsOps::Context
43
44
  context = context_or_params
44
- elsif context_or_params.is_a?(Hash) || context_or_params.is_a?(ActionController::Parameters)
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
 
@@ -4,7 +4,7 @@ module RailsOps
4
4
  @object_id = object_id
5
5
  @description = description
6
6
  @parent = parent
7
- parent.add_child(self) if parent
7
+ parent&.add_child(self)
8
8
  @children = []
9
9
  @erroneous = false
10
10
  @t_start = Time.now
@@ -5,7 +5,7 @@ module RailsOps
5
5
  self.tstore_current_parent = node
6
6
  begin
7
7
  res = yield
8
- rescue
8
+ rescue StandardError
9
9
  node.erroneous!
10
10
  fail
11
11
  ensure
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.rb'
54
- require 'rails_ops/configuration.rb'
55
- require 'rails_ops/context.rb'
56
- require 'rails_ops/controller_mixin.rb'
57
- require 'rails_ops/exceptions.rb'
58
- require 'rails_ops/hooked_job.rb' if defined?(ActiveJob)
59
- require 'rails_ops/hookup.rb'
60
- require 'rails_ops/hookup/dsl.rb'
61
- require 'rails_ops/hookup/dsl_validator.rb'
62
- require 'rails_ops/hookup/hook.rb'
63
- require 'rails_ops/log_subscriber.rb'
64
- require 'rails_ops/mixins.rb'
65
- require 'rails_ops/mixins/authorization.rb'
66
- require 'rails_ops/mixins/param_authorization.rb'
67
- require 'rails_ops/mixins/log_settings.rb'
68
- require 'rails_ops/mixins/model.rb'
69
- require 'rails_ops/mixins/model/authorization.rb'
70
- require 'rails_ops/mixins/model/nesting.rb'
71
- require 'rails_ops/mixins/policies.rb'
72
- require 'rails_ops/mixins/require_context.rb'
73
- require 'rails_ops/mixins/routes.rb'
74
- require 'rails_ops/mixins/schema_validation.rb'
75
- require 'rails_ops/mixins/sub_ops.rb'
76
- require 'rails_ops/model_mixins.rb'
77
- require 'rails_ops/model_mixins/ar_extension.rb'
78
- require 'rails_ops/model_mixins/parent_op.rb'
79
- require 'rails_ops/model_mixins/sti_fixes.rb'
80
- require 'rails_ops/model_mixins/marshalling.rb'
81
- require 'rails_ops/model_mixins/virtual_attributes.rb'
82
- require 'rails_ops/model_mixins/virtual_attributes/virtual_column_wrapper.rb'
83
- require 'rails_ops/model_mixins/virtual_has_one.rb'
84
- require 'rails_ops/model_mixins/virtual_model_name.rb'
85
- require 'rails_ops/operation.rb'
86
- require 'rails_ops/operation/model.rb'
87
- require 'rails_ops/operation/model/load.rb'
88
- require 'rails_ops/operation/model/create.rb'
89
- require 'rails_ops/operation/model/destroy.rb'
90
- require 'rails_ops/operation/model/update.rb'
91
- require 'rails_ops/profiler.rb'
92
- require 'rails_ops/profiler/node.rb'
93
- require 'rails_ops/railtie.rb' if defined?(Rails)
94
- require 'rails_ops/scoped_env.rb'
95
- require 'rails_ops/virtual_model.rb'
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.1 ruby lib
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.1"
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-02-21"
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, ["= 0.47.1"])
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"])
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env ruby
2
- ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
2
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
3
3
  load Gem.bin_path('bundler', 'bundle')
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('../../', __FILE__)
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 ==")
@@ -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('../../', __FILE__)
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
- begin
5
- exec "yarnpkg #{ARGV.join(' ')}"
6
- rescue Errno::ENOENT
7
- $stderr.puts 'Yarn executable was not detected in the system.'
8
- $stderr.puts 'Download Yarn at https://yarnpkg.com/en/docs/install'
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 = ::Logger::Formatter.new
77
+ config.log_formatter = Logger::Formatter.new
78
78
 
79
79
  # Use a different logger for distributed setups.
80
80
  # require 'syslog/logger'
@@ -1,6 +1,6 @@
1
- %w(
1
+ %w[
2
2
  .ruby-version
3
3
  .rbenv-vars
4
4
  tmp/restart.txt
5
5
  tmp/caching-dev.txt
6
- ).each { |path| Spring.watch(path) }
6
+ ].each { |path| Spring.watch(path) }
data/test/test_helper.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.expand_path('../../test/dummy/config/environment.rb', __FILE__)
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('../fixtures', __FILE__)
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 + '/files'
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__) + '/dummy/db/schema.rb'
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) { yield }
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