rails_ops 1.1.23 → 1.1.27
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/.github/workflows/rubocop.yml +17 -0
- data/.github/workflows/ruby.yml +37 -7
- data/.gitignore +2 -0
- data/.rubocop.yml +1 -0
- data/Appraisals +19 -0
- data/CHANGELOG.md +24 -1
- data/LICENSE +1 -1
- data/README.md +137 -16
- data/Rakefile +4 -0
- data/VERSION +1 -1
- data/gemfiles/rails_5.1.gemfile +7 -0
- data/gemfiles/rails_5.2.gemfile +7 -0
- data/gemfiles/rails_6.0.gemfile +7 -0
- data/gemfiles/rails_6.1.gemfile +7 -0
- data/gemfiles/rails_7.0.gemfile +7 -0
- data/lib/generators/operation/USAGE +21 -0
- data/lib/generators/operation/operation_generator.rb +64 -0
- data/lib/generators/operation/templates/controller.erb +56 -0
- data/lib/generators/operation/templates/create.erb +15 -0
- data/lib/generators/operation/templates/destroy.erb +13 -0
- data/lib/generators/operation/templates/load.erb +13 -0
- data/lib/generators/operation/templates/update.erb +16 -0
- data/lib/generators/operation/templates/view.erb +0 -0
- data/lib/rails_ops/model_mixins/sti_fixes.rb +17 -0
- data/lib/rails_ops/model_mixins/virtual_attributes/virtual_column_wrapper.rb +4 -0
- data/lib/rails_ops/model_mixins.rb +1 -0
- data/lib/rails_ops.rb +1 -0
- data/rails_ops.gemspec +14 -6
- data/test/dummy/app/models/animal.rb +1 -0
- data/test/dummy/app/models/bird.rb +1 -0
- data/test/dummy/app/models/cat.rb +1 -0
- data/test/dummy/app/models/dog.rb +1 -0
- data/test/dummy/app/models/flower.rb +7 -0
- data/test/dummy/app/models/nightingale.rb +1 -0
- data/test/dummy/app/models/phoenix.rb +1 -0
- data/test/dummy/config/application.rb +13 -2
- data/test/dummy/config/environments/test.rb +1 -1
- data/test/dummy/config/initializers/backtrace_silencers.rb +1 -1
- data/test/dummy/db/schema.rb +8 -0
- data/test/test_helper.rb +2 -0
- data/test/unit/rails_ops/generators/operation_generator_test.rb +254 -0
- data/test/unit/rails_ops/operation/model/create_test.rb +16 -0
- data/test/unit/rails_ops/operation/model/sti_test.rb +70 -0
- data/test/unit/rails_ops/operation/model/update_test.rb +71 -0
- metadata +99 -9
@@ -8,5 +8,6 @@ module RailsOps::ModelMixins
|
|
8
8
|
include VirtualAttributes # Provides virtual attributes functionality.
|
9
9
|
include VirtualHasOne # Provides virtual_has_one.
|
10
10
|
include VirtualModelName # Provides virtual_model_name.
|
11
|
+
include StiFixes # Fixes using RailsOps models with STI.
|
11
12
|
end
|
12
13
|
end
|
data/lib/rails_ops.rb
CHANGED
@@ -88,6 +88,7 @@ require 'rails_ops/model_casting.rb'
|
|
88
88
|
require 'rails_ops/model_mixins.rb'
|
89
89
|
require 'rails_ops/model_mixins/ar_extension.rb'
|
90
90
|
require 'rails_ops/model_mixins/parent_op.rb'
|
91
|
+
require 'rails_ops/model_mixins/sti_fixes.rb'
|
91
92
|
require 'rails_ops/model_mixins/virtual_attributes.rb'
|
92
93
|
require 'rails_ops/model_mixins/virtual_attributes/virtual_column_wrapper.rb'
|
93
94
|
require 'rails_ops/model_mixins/virtual_has_one.rb'
|
data/rails_ops.gemspec
CHANGED
@@ -1,40 +1,48 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: rails_ops 1.1.
|
2
|
+
# stub: rails_ops 1.1.27 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "rails_ops".freeze
|
6
|
-
s.version = "1.1.
|
6
|
+
s.version = "1.1.27"
|
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 = "
|
12
|
-
s.files = [".github/workflows/ruby.yml".freeze, ".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "lib/rails_ops.rb".freeze, "lib/rails_ops/authorization_backend/abstract.rb".freeze, "lib/rails_ops/authorization_backend/can_can_can.rb".freeze, "lib/rails_ops/configuration.rb".freeze, "lib/rails_ops/context.rb".freeze, "lib/rails_ops/controller_mixin.rb".freeze, "lib/rails_ops/exceptions.rb".freeze, "lib/rails_ops/hooked_job.rb".freeze, "lib/rails_ops/hookup.rb".freeze, "lib/rails_ops/hookup/dsl.rb".freeze, "lib/rails_ops/hookup/dsl_validator.rb".freeze, "lib/rails_ops/hookup/hook.rb".freeze, "lib/rails_ops/log_subscriber.rb".freeze, "lib/rails_ops/mixins.rb".freeze, "lib/rails_ops/mixins/authorization.rb".freeze, "lib/rails_ops/mixins/log_settings.rb".freeze, "lib/rails_ops/mixins/model.rb".freeze, "lib/rails_ops/mixins/model/authorization.rb".freeze, "lib/rails_ops/mixins/model/nesting.rb".freeze, "lib/rails_ops/mixins/param_authorization.rb".freeze, "lib/rails_ops/mixins/policies.rb".freeze, "lib/rails_ops/mixins/require_context.rb".freeze, "lib/rails_ops/mixins/routes.rb".freeze, "lib/rails_ops/mixins/schema_validation.rb".freeze, "lib/rails_ops/mixins/sub_ops.rb".freeze, "lib/rails_ops/model_casting.rb".freeze, "lib/rails_ops/model_mixins.rb".freeze, "lib/rails_ops/model_mixins/ar_extension.rb".freeze, "lib/rails_ops/model_mixins/parent_op.rb".freeze, "lib/rails_ops/model_mixins/virtual_attributes.rb".freeze, "lib/rails_ops/model_mixins/virtual_attributes/virtual_column_wrapper.rb".freeze, "lib/rails_ops/model_mixins/virtual_has_one.rb".freeze, "lib/rails_ops/model_mixins/virtual_model_name.rb".freeze, "lib/rails_ops/operation.rb".freeze, "lib/rails_ops/operation/model.rb".freeze, "lib/rails_ops/operation/model/create.rb".freeze, "lib/rails_ops/operation/model/destroy.rb".freeze, "lib/rails_ops/operation/model/load.rb".freeze, "lib/rails_ops/operation/model/update.rb".freeze, "lib/rails_ops/patches/active_type_patch.rb".freeze, "lib/rails_ops/profiler.rb".freeze, "lib/rails_ops/profiler/node.rb".freeze, "lib/rails_ops/railtie.rb".freeze, "lib/rails_ops/scoped_env.rb".freeze, "lib/rails_ops/virtual_model.rb".freeze, "rails_ops.gemspec".freeze, "test/db/models.rb".freeze, "test/db/schema.rb".freeze, "test/dummy/Rakefile".freeze, "test/dummy/app/assets/config/manifest.js".freeze, "test/dummy/app/assets/images/.keep".freeze, "test/dummy/app/assets/javascripts/application.js".freeze, "test/dummy/app/assets/javascripts/cable.js".freeze, "test/dummy/app/assets/javascripts/channels/.keep".freeze, "test/dummy/app/assets/stylesheets/application.css".freeze, "test/dummy/app/channels/application_cable/channel.rb".freeze, "test/dummy/app/channels/application_cable/connection.rb".freeze, "test/dummy/app/controllers/application_controller.rb".freeze, "test/dummy/app/controllers/concerns/.keep".freeze, "test/dummy/app/helpers/application_helper.rb".freeze, "test/dummy/app/jobs/application_job.rb".freeze, "test/dummy/app/mailers/application_mailer.rb".freeze, "test/dummy/app/models/application_record.rb".freeze, "test/dummy/app/models/concerns/.keep".freeze, "test/dummy/app/models/group.rb".freeze, "test/dummy/app/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/mixins/model/nesting.rb".freeze, "test/unit/rails_ops/mixins/policies_test.rb".freeze, "test/unit/rails_ops/operation/model/create_test.rb".freeze, "test/unit/rails_ops/operation/model/load_test.rb".freeze, "test/unit/rails_ops/operation/model/update_test.rb".freeze, "test/unit/rails_ops/operation/model_test.rb".freeze, "test/unit/rails_ops/operation/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
|
-
s.rubygems_version = "3.2.
|
11
|
+
s.date = "2022-02-15"
|
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_5.1.gemfile".freeze, "gemfiles/rails_5.2.gemfile".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_casting.rb".freeze, "lib/rails_ops/model_mixins.rb".freeze, "lib/rails_ops/model_mixins/ar_extension.rb".freeze, "lib/rails_ops/model_mixins/parent_op.rb".freeze, "lib/rails_ops/model_mixins/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/patches/active_type_patch.rb".freeze, "lib/rails_ops/profiler.rb".freeze, "lib/rails_ops/profiler/node.rb".freeze, "lib/rails_ops/railtie.rb".freeze, "lib/rails_ops/scoped_env.rb".freeze, "lib/rails_ops/virtual_model.rb".freeze, "rails_ops.gemspec".freeze, "test/db/models.rb".freeze, "test/db/schema.rb".freeze, "test/dummy/Rakefile".freeze, "test/dummy/app/assets/config/manifest.js".freeze, "test/dummy/app/assets/images/.keep".freeze, "test/dummy/app/assets/javascripts/application.js".freeze, "test/dummy/app/assets/javascripts/cable.js".freeze, "test/dummy/app/assets/javascripts/channels/.keep".freeze, "test/dummy/app/assets/stylesheets/application.css".freeze, "test/dummy/app/channels/application_cable/channel.rb".freeze, "test/dummy/app/channels/application_cable/connection.rb".freeze, "test/dummy/app/controllers/application_controller.rb".freeze, "test/dummy/app/controllers/concerns/.keep".freeze, "test/dummy/app/helpers/application_helper.rb".freeze, "test/dummy/app/jobs/application_job.rb".freeze, "test/dummy/app/mailers/application_mailer.rb".freeze, "test/dummy/app/models/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/concerns/.keep".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/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/nesting.rb".freeze, "test/unit/rails_ops/mixins/policies_test.rb".freeze, "test/unit/rails_ops/operation/model/create_test.rb".freeze, "test/unit/rails_ops/operation/model/load_test.rb".freeze, "test/unit/rails_ops/operation/model/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
|
+
s.rubygems_version = "3.2.15".freeze
|
14
14
|
s.summary = "An operations service layer for rails projects.".freeze
|
15
|
-
s.test_files = ["test/db/models.rb".freeze, "test/db/schema.rb".freeze, "test/dummy/Rakefile".freeze, "test/dummy/app/assets/config/manifest.js".freeze, "test/dummy/app/assets/images/.keep".freeze, "test/dummy/app/assets/javascripts/application.js".freeze, "test/dummy/app/assets/javascripts/cable.js".freeze, "test/dummy/app/assets/javascripts/channels/.keep".freeze, "test/dummy/app/assets/stylesheets/application.css".freeze, "test/dummy/app/channels/application_cable/channel.rb".freeze, "test/dummy/app/channels/application_cable/connection.rb".freeze, "test/dummy/app/controllers/application_controller.rb".freeze, "test/dummy/app/controllers/concerns/.keep".freeze, "test/dummy/app/helpers/application_helper.rb".freeze, "test/dummy/app/jobs/application_job.rb".freeze, "test/dummy/app/mailers/application_mailer.rb".freeze, "test/dummy/app/models/application_record.rb".freeze, "test/dummy/app/models/concerns/.keep".freeze, "test/dummy/app/models/group.rb".freeze, "test/dummy/app/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/mixins/model/nesting.rb".freeze, "test/unit/rails_ops/mixins/policies_test.rb".freeze, "test/unit/rails_ops/operation/model/create_test.rb".freeze, "test/unit/rails_ops/operation/model/load_test.rb".freeze, "test/unit/rails_ops/operation/model/update_test.rb".freeze, "test/unit/rails_ops/operation/model_test.rb".freeze, "test/unit/rails_ops/operation/update_auth_test.rb".freeze, "test/unit/rails_ops/operation/update_lazy_auth_test.rb".freeze, "test/unit/rails_ops/operation_test.rb".freeze]
|
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/concerns/.keep".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/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/nesting.rb".freeze, "test/unit/rails_ops/mixins/policies_test.rb".freeze, "test/unit/rails_ops/operation/model/create_test.rb".freeze, "test/unit/rails_ops/operation/model/load_test.rb".freeze, "test/unit/rails_ops/operation/model/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]
|
16
16
|
|
17
17
|
if s.respond_to? :specification_version then
|
18
18
|
s.specification_version = 4
|
19
19
|
end
|
20
20
|
|
21
21
|
if s.respond_to? :add_runtime_dependency then
|
22
|
+
s.add_development_dependency(%q<appraisal>.freeze, [">= 0"])
|
22
23
|
s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
|
23
24
|
s.add_development_dependency(%q<rake>.freeze, [">= 0"])
|
24
25
|
s.add_development_dependency(%q<sqlite3>.freeze, [">= 0"])
|
25
26
|
s.add_development_dependency(%q<cancancan>.freeze, [">= 0"])
|
27
|
+
s.add_development_dependency(%q<pry>.freeze, [">= 0"])
|
28
|
+
s.add_development_dependency(%q<colorize>.freeze, [">= 0"])
|
26
29
|
s.add_development_dependency(%q<rubocop>.freeze, ["= 0.47.1"])
|
30
|
+
s.add_development_dependency(%q<sprockets-rails>.freeze, [">= 0"])
|
27
31
|
s.add_runtime_dependency(%q<active_type>.freeze, [">= 1.3.0"])
|
28
32
|
s.add_runtime_dependency(%q<minitest>.freeze, [">= 0"])
|
29
33
|
s.add_runtime_dependency(%q<rails>.freeze, [">= 0"])
|
30
34
|
s.add_runtime_dependency(%q<request_store>.freeze, [">= 0"])
|
31
35
|
s.add_runtime_dependency(%q<schemacop>.freeze, [">= 2.4.2", "<= 3.1"])
|
32
36
|
else
|
37
|
+
s.add_dependency(%q<appraisal>.freeze, [">= 0"])
|
33
38
|
s.add_dependency(%q<bundler>.freeze, [">= 0"])
|
34
39
|
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
35
40
|
s.add_dependency(%q<sqlite3>.freeze, [">= 0"])
|
36
41
|
s.add_dependency(%q<cancancan>.freeze, [">= 0"])
|
42
|
+
s.add_dependency(%q<pry>.freeze, [">= 0"])
|
43
|
+
s.add_dependency(%q<colorize>.freeze, [">= 0"])
|
37
44
|
s.add_dependency(%q<rubocop>.freeze, ["= 0.47.1"])
|
45
|
+
s.add_dependency(%q<sprockets-rails>.freeze, [">= 0"])
|
38
46
|
s.add_dependency(%q<active_type>.freeze, [">= 1.3.0"])
|
39
47
|
s.add_dependency(%q<minitest>.freeze, [">= 0"])
|
40
48
|
s.add_dependency(%q<rails>.freeze, [">= 0"])
|
@@ -0,0 +1 @@
|
|
1
|
+
class Animal < ApplicationRecord; end
|
@@ -0,0 +1 @@
|
|
1
|
+
class Bird < Animal; end
|
@@ -0,0 +1 @@
|
|
1
|
+
class Cat < Animal; end
|
@@ -0,0 +1 @@
|
|
1
|
+
class Dog < Animal; end
|
@@ -0,0 +1 @@
|
|
1
|
+
class Nightingale < Bird; end
|
@@ -0,0 +1 @@
|
|
1
|
+
class Phoenix < Bird; end
|
@@ -1,6 +1,17 @@
|
|
1
1
|
require_relative 'boot'
|
2
2
|
|
3
|
-
require 'rails
|
3
|
+
require 'rails'
|
4
|
+
|
5
|
+
require 'active_model/railtie'
|
6
|
+
require 'active_job/railtie'
|
7
|
+
require 'active_record/railtie'
|
8
|
+
# require "active_storage/engine"
|
9
|
+
require 'action_controller/railtie'
|
10
|
+
require 'action_mailer/railtie'
|
11
|
+
require 'action_view/railtie'
|
12
|
+
require 'action_cable/engine'
|
13
|
+
require 'sprockets/railtie'
|
14
|
+
require 'rails/test_unit/railtie'
|
4
15
|
|
5
16
|
Bundler.require(*Rails.groups)
|
6
17
|
require 'rails_ops'
|
@@ -8,7 +19,7 @@ require 'rails_ops'
|
|
8
19
|
module Dummy
|
9
20
|
class Application < Rails::Application
|
10
21
|
# Initialize configuration defaults for originally generated Rails version.
|
11
|
-
config.load_defaults
|
22
|
+
config.load_defaults "#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}"
|
12
23
|
|
13
24
|
# Settings in config/environments/* take precedence over those specified here.
|
14
25
|
# Application configuration should go into files in config/initializers
|
@@ -10,7 +10,7 @@ Rails.application.configure do
|
|
10
10
|
# Do not eager load code on boot. This avoids loading your whole application
|
11
11
|
# just for the purpose of running a single test. If you are using a tool that
|
12
12
|
# preloads Rails for running tests, you may have to set it to true.
|
13
|
-
config.eager_load =
|
13
|
+
config.eager_load = true
|
14
14
|
|
15
15
|
# Configure public file server for tests with Cache-Control for performance.
|
16
16
|
config.public_file_server.enabled = true
|
@@ -4,4 +4,4 @@
|
|
4
4
|
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
|
5
5
|
|
6
6
|
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
|
7
|
-
|
7
|
+
Rails.backtrace_cleaner.remove_silencers!
|
data/test/dummy/db/schema.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require File.expand_path('../../test/dummy/config/environment.rb', __FILE__)
|
2
2
|
# ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)]
|
3
3
|
require 'rails/test_help'
|
4
|
+
require 'pry'
|
5
|
+
require 'colorize'
|
4
6
|
|
5
7
|
# Filter out Minitest backtrace while allowing backtrace from other libraries
|
6
8
|
# to be shown.
|
@@ -0,0 +1,254 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'generators/operation/operation_generator'
|
3
|
+
|
4
|
+
class OperationGeneratorTest < Rails::Generators::TestCase
|
5
|
+
tests OperationGenerator
|
6
|
+
destination File.expand_path('../../../tmp', File.dirname(__FILE__))
|
7
|
+
|
8
|
+
setup do
|
9
|
+
prepare_destination
|
10
|
+
|
11
|
+
# Add an empty routes file
|
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
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_all
|
22
|
+
run_generator ['User']
|
23
|
+
|
24
|
+
# Check that operations are generated
|
25
|
+
assert_operations
|
26
|
+
|
27
|
+
# Check that views are generated
|
28
|
+
assert_views
|
29
|
+
|
30
|
+
# Check that the controller is generated
|
31
|
+
assert_controller
|
32
|
+
|
33
|
+
# Check that the routes entry is added
|
34
|
+
assert_routes
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_no_views
|
38
|
+
run_generator ['User', '--skip-views']
|
39
|
+
|
40
|
+
assert_operations
|
41
|
+
assert_controller
|
42
|
+
assert_routes
|
43
|
+
|
44
|
+
# Check that the views were skipped
|
45
|
+
%w(index show new edit).each do |view|
|
46
|
+
assert_no_file "app/views/users/#{view}.html.haml"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_no_controller
|
51
|
+
run_generator ['User', '--skip-controller']
|
52
|
+
|
53
|
+
assert_operations
|
54
|
+
assert_views
|
55
|
+
assert_routes
|
56
|
+
|
57
|
+
# Check that the controller was skipped
|
58
|
+
assert_no_file 'app/controllers/users_controller.rb'
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_no_routes
|
62
|
+
run_generator ['User', '--skip-routes']
|
63
|
+
|
64
|
+
assert_operations
|
65
|
+
assert_views
|
66
|
+
assert_controller
|
67
|
+
|
68
|
+
# Check that the routes were not added
|
69
|
+
assert_file 'config/routes.rb' do |routes|
|
70
|
+
assert_no_match(/resources :users/, routes)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_skip_all
|
75
|
+
run_generator ['User', '--skip-controller', '--skip-routes', '--skip-views']
|
76
|
+
|
77
|
+
assert_operations
|
78
|
+
|
79
|
+
# Check that the controller was skipped
|
80
|
+
assert_no_file 'app/controllers/users_controller.rb'
|
81
|
+
|
82
|
+
# Check that the routes were not added
|
83
|
+
assert_file 'config/routes.rb' do |routes|
|
84
|
+
assert_no_match(/resources :users/, routes)
|
85
|
+
end
|
86
|
+
|
87
|
+
# Check that the views were skipped
|
88
|
+
%w(index show new edit).each do |view|
|
89
|
+
assert_no_file "app/views/users/#{view}.html.haml"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_only_operations
|
94
|
+
run_generator ['User', '--only-operations']
|
95
|
+
|
96
|
+
assert_operations
|
97
|
+
|
98
|
+
# Check that the controller was skipped
|
99
|
+
assert_no_file 'app/controllers/users_controller.rb'
|
100
|
+
|
101
|
+
# Check that the routes were not added
|
102
|
+
assert_file 'config/routes.rb' do |routes|
|
103
|
+
assert_no_match(/resources :users/, routes)
|
104
|
+
end
|
105
|
+
|
106
|
+
# Check that the views were skipped
|
107
|
+
%w(index show new edit).each do |view|
|
108
|
+
assert_no_file "app/views/users/#{view}.html.haml"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_lowercase_name
|
113
|
+
run_generator ['user']
|
114
|
+
|
115
|
+
# Check that operations are generated
|
116
|
+
assert_operations
|
117
|
+
|
118
|
+
# Check that views are generated
|
119
|
+
assert_views
|
120
|
+
|
121
|
+
# Check that the controller is generated
|
122
|
+
assert_controller
|
123
|
+
|
124
|
+
# Check that the routes entry is added
|
125
|
+
assert_routes
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_module_name
|
129
|
+
optiongroups = [['User', '--module=Admin'], ['User', '--module=admin']]
|
130
|
+
|
131
|
+
optiongroups.each do |optiongroup|
|
132
|
+
run_generator optiongroup
|
133
|
+
|
134
|
+
# Check that namespaced operations are generated
|
135
|
+
assert_file 'app/operations/admin/user/create.rb' do |operation|
|
136
|
+
assert_match(/module Operations::Admin::User/, operation)
|
137
|
+
assert_match(/class Create < RailsOps::Operation::Model::Create/, operation)
|
138
|
+
assert_match(/model ::User/, operation)
|
139
|
+
end
|
140
|
+
assert_file 'app/operations/admin/user/destroy.rb' do |operation|
|
141
|
+
assert_match(/module Operations::Admin::User/, operation)
|
142
|
+
assert_match(/class Destroy < RailsOps::Operation::Model::Destroy/, operation)
|
143
|
+
assert_match(/model ::User/, operation)
|
144
|
+
end
|
145
|
+
assert_file 'app/operations/admin/user/load.rb' do |operation|
|
146
|
+
assert_match(/module Operations::Admin::User/, operation)
|
147
|
+
assert_match(/class Load < RailsOps::Operation::Model::Load/, operation)
|
148
|
+
assert_match(/model ::User/, operation)
|
149
|
+
end
|
150
|
+
assert_file 'app/operations/admin/user/update.rb' do |operation|
|
151
|
+
assert_match(/module Operations::Admin::User/, operation)
|
152
|
+
assert_match(/class Update < RailsOps::Operation::Model::Update/, operation)
|
153
|
+
assert_match(/model ::User/, operation)
|
154
|
+
end
|
155
|
+
|
156
|
+
# Check that views are generated
|
157
|
+
%w(index show new edit).each do |view|
|
158
|
+
assert_file "app/views/admin/users/#{view}.html.haml"
|
159
|
+
end
|
160
|
+
|
161
|
+
# Check that the controller is generated
|
162
|
+
assert_file 'app/controllers/admin/users_controller.rb' do |controller|
|
163
|
+
assert_match(/module Admin/, controller)
|
164
|
+
assert_match(/class UsersController < ApplicationController/, controller)
|
165
|
+
end
|
166
|
+
|
167
|
+
# Check that the routes entry is added
|
168
|
+
assert_routes
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_nested_module_name
|
173
|
+
run_generator ['User', '--module=admin/foo']
|
174
|
+
|
175
|
+
# Check that namespaced operations are generated
|
176
|
+
assert_file 'app/operations/admin/foo/user/create.rb' do |operation|
|
177
|
+
assert_match(/module Operations::Admin::Foo::User/, operation)
|
178
|
+
assert_match(/class Create < RailsOps::Operation::Model::Create/, operation)
|
179
|
+
assert_match(/model ::User/, operation)
|
180
|
+
end
|
181
|
+
assert_file 'app/operations/admin/foo/user/destroy.rb' do |operation|
|
182
|
+
assert_match(/module Operations::Admin::Foo::User/, operation)
|
183
|
+
assert_match(/class Destroy < RailsOps::Operation::Model::Destroy/, operation)
|
184
|
+
assert_match(/model ::User/, operation)
|
185
|
+
end
|
186
|
+
assert_file 'app/operations/admin/foo/user/load.rb' do |operation|
|
187
|
+
assert_match(/module Operations::Admin::Foo::User/, operation)
|
188
|
+
assert_match(/class Load < RailsOps::Operation::Model::Load/, operation)
|
189
|
+
assert_match(/model ::User/, operation)
|
190
|
+
end
|
191
|
+
assert_file 'app/operations/admin/foo/user/update.rb' do |operation|
|
192
|
+
assert_match(/module Operations::Admin::Foo::User/, operation)
|
193
|
+
assert_match(/class Update < RailsOps::Operation::Model::Update/, operation)
|
194
|
+
assert_match(/model ::User/, operation)
|
195
|
+
end
|
196
|
+
|
197
|
+
# Check that views are generated
|
198
|
+
%w(index show new edit).each do |view|
|
199
|
+
assert_file "app/views/admin/foo/users/#{view}.html.haml"
|
200
|
+
end
|
201
|
+
|
202
|
+
# Check that the controller is generated
|
203
|
+
assert_file 'app/controllers/admin/foo/users_controller.rb' do |controller|
|
204
|
+
assert_match(/module Admin::Foo/, controller)
|
205
|
+
assert_match(/class UsersController < ApplicationController/, controller)
|
206
|
+
end
|
207
|
+
|
208
|
+
# Check that the routes entry is added
|
209
|
+
assert_routes
|
210
|
+
end
|
211
|
+
|
212
|
+
private
|
213
|
+
|
214
|
+
def assert_operations
|
215
|
+
assert_file 'app/operations/user/create.rb' do |operation|
|
216
|
+
assert_match(/module Operations::User/, operation)
|
217
|
+
assert_match(/class Create < RailsOps::Operation::Model::Create/, operation)
|
218
|
+
assert_match(/model ::User/, operation)
|
219
|
+
end
|
220
|
+
assert_file 'app/operations/user/destroy.rb' do |operation|
|
221
|
+
assert_match(/module Operations::User/, operation)
|
222
|
+
assert_match(/class Destroy < RailsOps::Operation::Model::Destroy/, operation)
|
223
|
+
assert_match(/model ::User/, operation)
|
224
|
+
end
|
225
|
+
assert_file 'app/operations/user/load.rb' do |operation|
|
226
|
+
assert_match(/module Operations::User/, operation)
|
227
|
+
assert_match(/class Load < RailsOps::Operation::Model::Load/, operation)
|
228
|
+
assert_match(/model ::User/, operation)
|
229
|
+
end
|
230
|
+
assert_file 'app/operations/user/update.rb' do |operation|
|
231
|
+
assert_match(/module Operations::User/, operation)
|
232
|
+
assert_match(/class Update < RailsOps::Operation::Model::Update/, operation)
|
233
|
+
assert_match(/model ::User/, operation)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
def assert_views
|
238
|
+
%w(index show new edit).each do |view|
|
239
|
+
assert_file "app/views/users/#{view}.html.haml"
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
def assert_controller
|
244
|
+
assert_file 'app/controllers/users_controller.rb' do |controller|
|
245
|
+
assert_match(/class UsersController < ApplicationController/, controller)
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
def assert_routes
|
250
|
+
assert_file 'config/routes.rb' do |routes|
|
251
|
+
assert_match(/resources :users/, routes)
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
@@ -7,6 +7,22 @@ class RailsOps::Operation::Model::CreateTest < ActiveSupport::TestCase
|
|
7
7
|
model Group
|
8
8
|
end
|
9
9
|
|
10
|
+
ATTR_OP = Class.new(RailsOps::Operation::Model::Create) do
|
11
|
+
model ::Group do
|
12
|
+
attribute :long_group_name
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_attribute
|
17
|
+
op = ATTR_OP.run!(group: { name: 'Test', color: 'red', long_group_name: 'Testgroup for extended testing' })
|
18
|
+
|
19
|
+
assert_equal 'Test', op.model.name
|
20
|
+
assert_equal 'red', op.model.color
|
21
|
+
assert_equal 'Testgroup for extended testing', op.model.long_group_name
|
22
|
+
assert op.model.persisted?
|
23
|
+
refute op.model.changed?
|
24
|
+
end
|
25
|
+
|
10
26
|
def test_basic
|
11
27
|
op = BASIC_OP.run!(group: { name: 'test', color: 'red' })
|
12
28
|
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class RailsOps::Operation::Model::StiTest < ActiveSupport::TestCase
|
4
|
+
include TestHelper
|
5
|
+
|
6
|
+
setup do
|
7
|
+
@dog = Dog.create!
|
8
|
+
@cat = Cat.create!
|
9
|
+
@phoenix = Phoenix.create!
|
10
|
+
@nightingale = Nightingale.create!
|
11
|
+
end
|
12
|
+
|
13
|
+
LOAD_ANIMAL_OP = Class.new(RailsOps::Operation::Model::Load) do
|
14
|
+
model Animal do
|
15
|
+
attribute :my_virtual_animal_name
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
LOAD_DOG_OP = Class.new(RailsOps::Operation::Model::Load) do
|
20
|
+
model Dog do
|
21
|
+
attribute :my_virtual_dog_name
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
LOAD_BIRD_OP = Class.new(RailsOps::Operation::Model::Load) do
|
26
|
+
model Bird do
|
27
|
+
attribute :my_virtual_bird_name
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
LOAD_PHOENIX_OP = Class.new(RailsOps::Operation::Model::Load) do
|
32
|
+
model Phoenix do
|
33
|
+
attribute :my_virtual_phoenix_name
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_load_animal
|
38
|
+
model = LOAD_ANIMAL_OP.new(id: @dog.id).model
|
39
|
+
assert_equal 'Dog', model.type
|
40
|
+
assert model.is_a?(LOAD_ANIMAL_OP.model)
|
41
|
+
assert_nothing_raised { model.my_virtual_animal_name = 'Lenny' }
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_load_dog
|
45
|
+
model = LOAD_DOG_OP.new(id: @dog.id).model
|
46
|
+
|
47
|
+
assert_equal 'Dog', model.type
|
48
|
+
assert model.is_a?(LOAD_DOG_OP.model)
|
49
|
+
assert_nothing_raised { model.my_virtual_dog_name = 'Lenny' }
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_load_birds
|
53
|
+
phoenix = LOAD_BIRD_OP.new(id: @phoenix.id).model
|
54
|
+
nightingale = LOAD_BIRD_OP.new(id: @nightingale.id).model
|
55
|
+
|
56
|
+
assert_equal 'Phoenix', phoenix.type
|
57
|
+
assert phoenix.is_a?(LOAD_BIRD_OP.model)
|
58
|
+
assert nightingale.is_a?(LOAD_BIRD_OP.model)
|
59
|
+
assert_nothing_raised { phoenix.my_virtual_bird_name = 'Lenny' }
|
60
|
+
assert_nothing_raised { nightingale.my_virtual_bird_name = 'Lenny' }
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_load_phoenix
|
64
|
+
model = LOAD_PHOENIX_OP.new(id: @phoenix.id).model
|
65
|
+
|
66
|
+
assert_equal 'Phoenix', model.type
|
67
|
+
assert model.is_a?(LOAD_PHOENIX_OP.model)
|
68
|
+
assert_nothing_raised { model.my_virtual_phoenix_name = 'Lenny' }
|
69
|
+
end
|
70
|
+
end
|
@@ -7,6 +7,35 @@ class RailsOps::Operation::Model::UpdateTest < ActiveSupport::TestCase
|
|
7
7
|
model Group
|
8
8
|
end
|
9
9
|
|
10
|
+
FLOWER_OP = Class.new(RailsOps::Operation::Model::Update) do
|
11
|
+
model Flower do
|
12
|
+
attribute :color
|
13
|
+
|
14
|
+
def optimal_bpm
|
15
|
+
174
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
SECOND_FLOWER_OP = Class.new(RailsOps::Operation::Model::Update) do
|
21
|
+
model Flower do
|
22
|
+
validate :planted_is_true
|
23
|
+
before_update :do_calculation
|
24
|
+
|
25
|
+
def response_to_everything
|
26
|
+
42
|
27
|
+
end
|
28
|
+
|
29
|
+
def planted_is_true
|
30
|
+
errors.add(:planted, 'Needs to be true') unless planted?
|
31
|
+
end
|
32
|
+
|
33
|
+
def do_calculation
|
34
|
+
1 + 1
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
10
39
|
def test_basic
|
11
40
|
g = Group.create
|
12
41
|
op = BASIC_OP.new(id: g.id)
|
@@ -19,4 +48,46 @@ class RailsOps::Operation::Model::UpdateTest < ActiveSupport::TestCase
|
|
19
48
|
op = BASIC_OP.new(id: g.id)
|
20
49
|
assert_equal op, op.model.parent_op
|
21
50
|
end
|
51
|
+
|
52
|
+
def test_issue_59992
|
53
|
+
flower1 = Flower.create!(planted: true)
|
54
|
+
flower2 = Flower.create!(planted: false)
|
55
|
+
|
56
|
+
op = FLOWER_OP.new(id: flower1.id)
|
57
|
+
|
58
|
+
assert op.model.respond_to?(:color)
|
59
|
+
assert op.model.is_a?(FLOWER_OP.model)
|
60
|
+
|
61
|
+
op.model.color = :red
|
62
|
+
|
63
|
+
assert_equal :red, op.model.color
|
64
|
+
|
65
|
+
op = FLOWER_OP.new(id: flower2.id)
|
66
|
+
|
67
|
+
assert_raises ActiveRecord::RecordNotFound do
|
68
|
+
op.model
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_validation
|
73
|
+
flower = Flower.create!(planted: true)
|
74
|
+
assert flower.planted
|
75
|
+
|
76
|
+
# This works fine
|
77
|
+
op1 = SECOND_FLOWER_OP.run!(id: flower.id, flower: { planted: true })
|
78
|
+
assert_equal 42, op1.model.response_to_everything
|
79
|
+
assert op1.model.respond_to?(:response_to_everything)
|
80
|
+
assert op1.model.respond_to?(:planted_is_true)
|
81
|
+
refute op1.model.respond_to?(:optimal_bpm)
|
82
|
+
|
83
|
+
# This fails in Rails 7 and ruby 3.1.0, as the validation seems to be triggered
|
84
|
+
# in this as well, even though the validation is not defined here
|
85
|
+
# More interesting, it seems that only the validation and the before_update
|
86
|
+
# are handled incorrectly, the other methods work fine
|
87
|
+
op2 = FLOWER_OP.run!(id: flower.id, flower: { planted: true })
|
88
|
+
assert_equal 174, op2.model.optimal_bpm
|
89
|
+
assert op2.model.respond_to?(:optimal_bpm)
|
90
|
+
refute op2.model.respond_to?(:planted_is_true)
|
91
|
+
refute op2.model.respond_to?(:response_to_everything)
|
92
|
+
end
|
22
93
|
end
|