rails_ops 1.4.1 → 1.4.2

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +102 -11
  3. data/Appraisals +11 -11
  4. data/CHANGELOG.md +9 -0
  5. data/Rakefile +3 -5
  6. data/VERSION +1 -1
  7. data/gemfiles/rails_6.0.gemfile +3 -3
  8. data/gemfiles/rails_6.1.gemfile +3 -3
  9. data/gemfiles/rails_7.0.gemfile +3 -3
  10. data/lib/generators/operation/operation_generator.rb +3 -3
  11. data/lib/rails_ops/authorization_backend/abstract.rb +1 -1
  12. data/lib/rails_ops/authorization_backend/can_can_can.rb +3 -1
  13. data/lib/rails_ops/controller_mixin.rb +1 -1
  14. data/lib/rails_ops/hookup/dsl_validator.rb +2 -1
  15. data/lib/rails_ops/hookup.rb +1 -1
  16. data/lib/rails_ops/mixins/authorization.rb +2 -2
  17. data/lib/rails_ops/mixins/model/nesting.rb +22 -23
  18. data/lib/rails_ops/mixins/policies.rb +7 -7
  19. data/lib/rails_ops/mixins/routes.rb +1 -1
  20. data/lib/rails_ops/model_mixins/marshalling.rb +1 -1
  21. data/lib/rails_ops/operation/model/load.rb +2 -4
  22. data/lib/rails_ops/operation/model/update.rb +2 -2
  23. data/lib/rails_ops/operation/model.rb +1 -1
  24. data/lib/rails_ops/operation.rb +7 -4
  25. data/lib/rails_ops/profiler/node.rb +1 -1
  26. data/lib/rails_ops/profiler.rb +1 -1
  27. data/lib/rails_ops.rb +43 -43
  28. data/rails_ops.gemspec +4 -4
  29. data/test/dummy/bin/bundle +1 -1
  30. data/test/dummy/bin/setup +1 -1
  31. data/test/dummy/bin/update +1 -1
  32. data/test/dummy/bin/yarn +5 -7
  33. data/test/dummy/config/environments/production.rb +1 -1
  34. data/test/dummy/config/spring.rb +2 -2
  35. data/test/test_helper.rb +5 -5
  36. data/test/unit/rails_ops/generators/operation_generator_test.rb +10 -12
  37. data/test/unit/rails_ops/mixins/model/deep_nesting_test.rb +69 -10
  38. data/test/unit/rails_ops/mixins/param_authorization_test.rb +3 -3
  39. data/test/unit/rails_ops/mixins/policies_test.rb +2 -2
  40. data/test/unit/rails_ops/operation/update_auth_test.rb +2 -0
  41. data/test/unit/rails_ops/operation/update_lazy_auth_test.rb +1 -0
  42. data/test/unit/rails_ops/operation_test.rb +1 -1
  43. metadata +11 -11
@@ -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,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: rails_ops 1.4.1 ruby lib
2
+ # stub: rails_ops 1.4.2 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.2"
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"
11
+ s.date = "2023-03-27"
12
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]
13
13
  s.rubygems_version = "3.4.6".freeze
14
14
  s.summary = "An operations service layer for rails projects.".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
@@ -10,12 +10,10 @@ class OperationGeneratorTest < Rails::Generators::TestCase
10
10
 
11
11
  # Add an empty routes file
12
12
  Dir.mkdir(File.join(destination_root, 'config'))
13
- File.open(File.join(destination_root, 'config', 'routes.rb'), 'w') do |f|
14
- f.write <<~ROUTES
15
- Rails.application.routes.draw do
16
- end
17
- ROUTES
18
- end
13
+ File.write(File.join(destination_root, 'config', 'routes.rb'), <<~ROUTES)
14
+ Rails.application.routes.draw do
15
+ end
16
+ ROUTES
19
17
  end
20
18
 
21
19
  def test_all
@@ -42,7 +40,7 @@ class OperationGeneratorTest < Rails::Generators::TestCase
42
40
  assert_routes
43
41
 
44
42
  # Check that the views were skipped
45
- %w(index show new edit).each do |view|
43
+ %w[index show new edit].each do |view|
46
44
  assert_no_file "app/views/users/#{view}.html.haml"
47
45
  end
48
46
  end
@@ -85,7 +83,7 @@ class OperationGeneratorTest < Rails::Generators::TestCase
85
83
  end
86
84
 
87
85
  # Check that the views were skipped
88
- %w(index show new edit).each do |view|
86
+ %w[index show new edit].each do |view|
89
87
  assert_no_file "app/views/users/#{view}.html.haml"
90
88
  end
91
89
  end
@@ -104,7 +102,7 @@ class OperationGeneratorTest < Rails::Generators::TestCase
104
102
  end
105
103
 
106
104
  # Check that the views were skipped
107
- %w(index show new edit).each do |view|
105
+ %w[index show new edit].each do |view|
108
106
  assert_no_file "app/views/users/#{view}.html.haml"
109
107
  end
110
108
  end
@@ -154,7 +152,7 @@ class OperationGeneratorTest < Rails::Generators::TestCase
154
152
  end
155
153
 
156
154
  # Check that views are generated
157
- %w(index show new edit).each do |view|
155
+ %w[index show new edit].each do |view|
158
156
  assert_file "app/views/admin/users/#{view}.html.haml"
159
157
  end
160
158
 
@@ -195,7 +193,7 @@ class OperationGeneratorTest < Rails::Generators::TestCase
195
193
  end
196
194
 
197
195
  # Check that views are generated
198
- %w(index show new edit).each do |view|
196
+ %w[index show new edit].each do |view|
199
197
  assert_file "app/views/admin/foo/users/#{view}.html.haml"
200
198
  end
201
199
 
@@ -235,7 +233,7 @@ class OperationGeneratorTest < Rails::Generators::TestCase
235
233
  end
236
234
 
237
235
  def assert_views
238
- %w(index show new edit).each do |view|
236
+ %w[index show new edit].each do |view|
239
237
  assert_file "app/views/users/#{view}.html.haml"
240
238
  end
241
239
  end
@@ -25,6 +25,28 @@ class RailsOps::Mixins::Model::DeepNestingTest < ActiveSupport::TestCase
25
25
  nest_model_op :mainboard, MAINBOARD_CREATION_OP
26
26
  end
27
27
 
28
+ CPU_UPDATE_OP = Class.new(RailsOps::Operation::Model::Update) do
29
+ model Cpu do
30
+ validates :name, presence: true
31
+ end
32
+ end
33
+
34
+ MAINBOARD_UPDATE_OP = Class.new(RailsOps::Operation::Model::Update) do
35
+ model Mainboard do
36
+ validates :name, presence: true
37
+ end
38
+
39
+ nest_model_op :cpu, CPU_UPDATE_OP
40
+ end
41
+
42
+ COMPUTER_UPDATE_OP = Class.new(RailsOps::Operation::Model::Update) do
43
+ model Computer do
44
+ validates :name, presence: true
45
+ end
46
+
47
+ nest_model_op :mainboard, MAINBOARD_UPDATE_OP
48
+ end
49
+
28
50
  def test_create_cpu
29
51
  assert_nothing_raised do
30
52
  CPU_CREATION_OP.run!(cpu: { name: 'CPU' })
@@ -35,7 +57,7 @@ class RailsOps::Mixins::Model::DeepNestingTest < ActiveSupport::TestCase
35
57
  assert_nothing_raised do
36
58
  MAINBOARD_CREATION_OP.run!(
37
59
  mainboard: {
38
- name: 'Mainboard',
60
+ name: 'Mainboard',
39
61
  cpu_attributes: {
40
62
  name: 'CPU'
41
63
  }
@@ -48,10 +70,10 @@ class RailsOps::Mixins::Model::DeepNestingTest < ActiveSupport::TestCase
48
70
  model = assert_nothing_raised do
49
71
  COMPUTER_CREATION_OP.run!(
50
72
  computer: {
51
- name: 'Computer',
73
+ name: 'Computer',
52
74
 
53
75
  mainboard_attributes: {
54
- name: 'Mainboard',
76
+ name: 'Mainboard',
55
77
 
56
78
  cpu_attributes: {
57
79
  name: 'CPU'
@@ -74,7 +96,7 @@ class RailsOps::Mixins::Model::DeepNestingTest < ActiveSupport::TestCase
74
96
  op = COMPUTER_CREATION_OP.new(
75
97
  computer: {
76
98
  mainboard_attributes: {
77
- name: 'Mainboard',
99
+ name: 'Mainboard',
78
100
 
79
101
  cpu_attributes: {
80
102
  name: 'CPU'
@@ -94,7 +116,7 @@ class RailsOps::Mixins::Model::DeepNestingTest < ActiveSupport::TestCase
94
116
  def test_create_computer_level_2_validation_error
95
117
  op = COMPUTER_CREATION_OP.new(
96
118
  computer: {
97
- name: 'Computer',
119
+ name: 'Computer',
98
120
 
99
121
  mainboard_attributes: {
100
122
  cpu_attributes: {
@@ -108,7 +130,7 @@ class RailsOps::Mixins::Model::DeepNestingTest < ActiveSupport::TestCase
108
130
  op.run!
109
131
  end
110
132
 
111
- assert_equal ["Mainboard is invalid"], op.model.errors.full_messages
133
+ assert_equal ['Mainboard is invalid'], op.model.errors.full_messages
112
134
  refute op.model.persisted?
113
135
 
114
136
  assert_equal ["Name can't be blank"], op.model.mainboard.errors.full_messages
@@ -118,10 +140,10 @@ class RailsOps::Mixins::Model::DeepNestingTest < ActiveSupport::TestCase
118
140
  def test_create_computer_level_3_validation_error
119
141
  op = COMPUTER_CREATION_OP.new(
120
142
  computer: {
121
- name: 'Computer',
143
+ name: 'Computer',
122
144
 
123
145
  mainboard_attributes: {
124
- name: 'Mainboard',
146
+ name: 'Mainboard',
125
147
 
126
148
  cpu_attributes: {}
127
149
  }
@@ -132,13 +154,50 @@ class RailsOps::Mixins::Model::DeepNestingTest < ActiveSupport::TestCase
132
154
  op.run!
133
155
  end
134
156
 
135
- assert_equal ["Mainboard is invalid"], op.model.errors.full_messages
157
+ assert_equal ['Mainboard is invalid'], op.model.errors.full_messages
136
158
  refute op.model.persisted?
137
159
 
138
- assert_equal ["Cpu is invalid"], op.model.mainboard.errors.full_messages
160
+ assert_equal ['Cpu is invalid'], op.model.mainboard.errors.full_messages
139
161
  refute op.model.mainboard.persisted?
140
162
 
141
163
  assert_equal ["Name can't be blank"], op.model.mainboard.cpu.errors.full_messages
142
164
  refute op.model.mainboard.cpu.persisted?
143
165
  end
166
+
167
+ def test_update_validation_error
168
+ create_op = COMPUTER_CREATION_OP.new(
169
+ computer: {
170
+ name: 'Computer',
171
+
172
+ mainboard_attributes: {
173
+ name: 'Mainboard',
174
+
175
+ cpu_attributes: {
176
+ name: 'CPU'
177
+ }
178
+ }
179
+ }
180
+ )
181
+
182
+ create_op.run!
183
+
184
+ update_op = COMPUTER_UPDATE_OP.new(
185
+ id: Computer.first,
186
+ computer: {
187
+ name: 'Computer',
188
+
189
+ mainboard_attributes: {
190
+ name: '',
191
+
192
+ cpu_attributes: {
193
+ name: 'CPU'
194
+ }
195
+ }
196
+ }
197
+ )
198
+
199
+ refute update_op.run
200
+ assert_equal :name, update_op.model.mainboard.errors.first.attribute
201
+ assert_equal :blank, update_op.model.mainboard.errors.first.type
202
+ end
144
203
  end
@@ -32,9 +32,9 @@ class RailsOps::Mixins::ParamAuthorizationTest < ActiveSupport::TestCase
32
32
 
33
33
  model ::Group
34
34
 
35
- authorize_param %i(foo), :foo, :subject_1
36
- authorize_param %i(bar), :bar, :subject_1
37
- authorize_param %i(bar baz), :baz, :subject_1
35
+ authorize_param %i[foo], :foo, :subject_1
36
+ authorize_param %i[bar], :bar, :subject_1
37
+ authorize_param %i[bar baz], :baz, :subject_1
38
38
 
39
39
  def perform
40
40
  # Do nothing
@@ -29,7 +29,7 @@ class RailsOps::Mixins::PoliciesTest < ActiveSupport::TestCase
29
29
  end
30
30
  end
31
31
 
32
- assert_equal %i(on_init default before_perform perform after_perform),
32
+ assert_equal %i[on_init default before_perform perform after_perform],
33
33
  op.run!.sequence
34
34
  end
35
35
 
@@ -52,7 +52,7 @@ class RailsOps::Mixins::PoliciesTest < ActiveSupport::TestCase
52
52
  def perform; end
53
53
  end
54
54
 
55
- assert_equal %i(before_perform_1 before_perform_2),
55
+ assert_equal %i[before_perform_1 before_perform_2],
56
56
  op.run!.sequence
57
57
  end
58
58
  end
@@ -20,6 +20,8 @@ class RailsOps::Operation::UpdateLazyAuthTest < ActiveSupport::TestCase
20
20
  include CanCan::Ability
21
21
 
22
22
  def initialize(read: false, update: false)
23
+ super()
24
+
23
25
  can :read, Group if read
24
26
  can :update, Group if update
25
27
  end
@@ -20,6 +20,7 @@ class RailsOps::Operation::UpdateLazyAuthTest < ActiveSupport::TestCase
20
20
  include CanCan::Ability
21
21
 
22
22
  def initialize(read: false, update: false)
23
+ super()
23
24
  can :read, Group if read
24
25
  can :update, Group if update
25
26
  end
@@ -99,7 +99,7 @@ class RailsOps::OperationTest < ActiveSupport::TestCase
99
99
  end
100
100
 
101
101
  def test_params
102
- params = { a: 1, 'b': 1 }
102
+ params = { a: 1, b: 1 }
103
103
  op = BASIC_OP.new(params)
104
104
 
105
105
  # ---------------------------------------------------------------
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.4.1
4
+ version: 1.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sitrox
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-21 00:00:00.000000000 Z
11
+ date: 2023-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: appraisal
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - '='
116
116
  - !ruby/object:Gem::Version
117
- version: 0.47.1
117
+ version: 1.45.1
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - '='
123
123
  - !ruby/object:Gem::Version
124
- version: 0.47.1
124
+ version: 1.45.1
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: sprockets-rails
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -212,8 +212,8 @@ dependencies:
212
212
  - - "<="
213
213
  - !ruby/object:Gem::Version
214
214
  version: '3.1'
215
- description:
216
- email:
215
+ description:
216
+ email:
217
217
  executables: []
218
218
  extensions: []
219
219
  extra_rdoc_files: []
@@ -373,10 +373,10 @@ files:
373
373
  - test/unit/rails_ops/operation/update_auth_test.rb
374
374
  - test/unit/rails_ops/operation/update_lazy_auth_test.rb
375
375
  - test/unit/rails_ops/operation_test.rb
376
- homepage:
376
+ homepage:
377
377
  licenses: []
378
378
  metadata: {}
379
- post_install_message:
379
+ post_install_message:
380
380
  rdoc_options: []
381
381
  require_paths:
382
382
  - lib
@@ -391,8 +391,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
391
391
  - !ruby/object:Gem::Version
392
392
  version: '0'
393
393
  requirements: []
394
- rubygems_version: 3.0.3.1
395
- signing_key:
394
+ rubygems_version: 3.4.6
395
+ signing_key:
396
396
  specification_version: 4
397
397
  summary: An operations service layer for rails projects.
398
398
  test_files: