rails_ops 1.1.23 → 1.1.24

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ed23b56e03ae2bce9a83de4a57962debc4581f27438f1ccdc4de794621fd534b
4
- data.tar.gz: a354184cdedfe424dd87149ceab88841f003576064475b4eb345bcd97d721c34
3
+ metadata.gz: 7f5db505fe961fecc4e9723b857f989860cf5056d76eb9814a4d4903bb0a6bfe
4
+ data.tar.gz: 3ab7053bc62a8bfb77b8c81ac90c97467ccdde7778e906097c4328c68c47607c
5
5
  SHA512:
6
- metadata.gz: cee0572909ad80b1ee998dc7a29119435f34c585d4c46082f3d20ecf36a8fc7907166f4158c8bcb37e98438ba06869358820a666bc2195d43d72c156b5d18789
7
- data.tar.gz: 4b7f33b883ac61c4e68dbd7a3d97bd45aaa10665052a26f2feadf7a4a22a312405a038595a84558d0b1d05546c1352dea3606f3adedefedd05bd6d296d101f22
6
+ metadata.gz: 91c83b59903d7b82539e04c87a4604b6878a8f837a89931f95dcbf542d209e446e3caa849825f5042be68d0c95277f888445438f44ac7e9971f8140d02b4f124
7
+ data.tar.gz: 80c4f9044744f71f34c07b70c73b584d74fad04d958db6055246d7d13aeb592a1a8bdae58ee258ae1f1513f325b2f9978e1ed50cf14dbe50f560dbc3899c532c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.1.22 (2021-11-25)
4
+
5
+ * Add support for STI in model operations
6
+
3
7
  ## 1.1.21 (2021-11-01)
4
8
 
5
9
  * Add support for lazy model authorization
data/README.md CHANGED
@@ -1194,8 +1194,8 @@ sensible default. See the respective class' source code for details.
1194
1194
  In case of operations inheriting from `RailsOps::Operation::Model::Update`, you
1195
1195
  can specify the `model_authorization_action` to be `lazy`, meaning that it will
1196
1196
  only be checked when *performing* the operation, but not on initialization. This
1197
- can be useful for displaying readonly forms to users which do not have
1198
- read-permissions only:
1197
+ can be useful for displaying readonly forms to users which have read-permissions
1198
+ only:
1199
1199
 
1200
1200
  ```ruby
1201
1201
  class Operations::User::Update < RailsOps::Operation::Model::Update
@@ -1204,7 +1204,7 @@ class Operations::User::Update < RailsOps::Operation::Model::Update
1204
1204
  # This automatically calls `authorize_model! :read`. Because it is set to be
1205
1205
  # `lazy`, the authorization will only run when the operation is actually
1206
1206
  # *performed*, and not already at instantiation.
1207
- model_authorization_action :read, lazy: true
1207
+ model_authorization_action :update, lazy: true
1208
1208
  end
1209
1209
  ```
1210
1210
 
@@ -1270,6 +1270,34 @@ This block receives the params hash as it would be passed to the sub operation
1270
1270
  and allows to modify it. The block's return value is then passed to the
1271
1271
  sub-operation. Do not change the params inplace but instead return a new hash.
1272
1272
 
1273
+ ### Single-table inheritance
1274
+
1275
+ Model operations also support STI models (Single Table Inheritance). However,
1276
+ there is the caviat that if you do extend your model in the operation (e.g.
1277
+ `model Animal do { ... }`), RailsOps automatically creates an anonymous subclass
1278
+ of the given class (e.g. `Animal`). Operations will always load / create models
1279
+ that are instances of this anonymous class.
1280
+
1281
+ Consider the following operation:
1282
+
1283
+ ```ruby
1284
+ class Animal < ApplicationRecord; end
1285
+ class Bird < Animal; end
1286
+ class Mouse < Animal; end
1287
+
1288
+ class LoadAnimal < RailsOps::Operation::Model::Load
1289
+ model Animal do
1290
+ # Something
1291
+ end
1292
+ end
1293
+
1294
+ bird = Bird.create
1295
+ op_bird = LoadAnimal.new(id: bird.id)
1296
+
1297
+ bird.class # => Class "Bird", extending "Animal"
1298
+ op_bird.class # => Anonymous class, extending "Animal", not "Bird"
1299
+ ```
1300
+
1273
1301
  Record extension and virtual records
1274
1302
  ------------------------------------
1275
1303
 
data/Rakefile CHANGED
@@ -19,6 +19,8 @@ task :gemspec do
19
19
  spec.add_development_dependency 'rake'
20
20
  spec.add_development_dependency 'sqlite3'
21
21
  spec.add_development_dependency 'cancancan'
22
+ spec.add_development_dependency 'pry'
23
+ spec.add_development_dependency 'colorize'
22
24
  spec.add_development_dependency 'rubocop', '0.47.1'
23
25
  spec.add_dependency 'active_type', '>= 1.3.0'
24
26
  spec.add_dependency 'minitest'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.23
1
+ 1.1.24
@@ -0,0 +1,21 @@
1
+ module RailsOps
2
+ module ModelMixins
3
+ module StiFixes
4
+ extend ActiveSupport::Concern
5
+
6
+ class_methods do
7
+ def finder_needs_type_condition?
8
+ superclass.finder_needs_type_condition?
9
+ end
10
+
11
+ def descendants
12
+ superclass.descendants
13
+ end
14
+
15
+ def name
16
+ superclass.name
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -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,18 +1,18 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: rails_ops 1.1.23 ruby lib
2
+ # stub: rails_ops 1.1.24 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "rails_ops".freeze
6
- s.version = "1.1.23"
6
+ s.version = "1.1.24"
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 = "2021-11-01"
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]
11
+ s.date = "2021-11-25"
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/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/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/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
13
  s.rubygems_version = "3.2.22".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/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/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
@@ -23,6 +23,8 @@ Gem::Specification.new do |s|
23
23
  s.add_development_dependency(%q<rake>.freeze, [">= 0"])
24
24
  s.add_development_dependency(%q<sqlite3>.freeze, [">= 0"])
25
25
  s.add_development_dependency(%q<cancancan>.freeze, [">= 0"])
26
+ s.add_development_dependency(%q<pry>.freeze, [">= 0"])
27
+ s.add_development_dependency(%q<colorize>.freeze, [">= 0"])
26
28
  s.add_development_dependency(%q<rubocop>.freeze, ["= 0.47.1"])
27
29
  s.add_runtime_dependency(%q<active_type>.freeze, [">= 1.3.0"])
28
30
  s.add_runtime_dependency(%q<minitest>.freeze, [">= 0"])
@@ -34,6 +36,8 @@ Gem::Specification.new do |s|
34
36
  s.add_dependency(%q<rake>.freeze, [">= 0"])
35
37
  s.add_dependency(%q<sqlite3>.freeze, [">= 0"])
36
38
  s.add_dependency(%q<cancancan>.freeze, [">= 0"])
39
+ s.add_dependency(%q<pry>.freeze, [">= 0"])
40
+ s.add_dependency(%q<colorize>.freeze, [">= 0"])
37
41
  s.add_dependency(%q<rubocop>.freeze, ["= 0.47.1"])
38
42
  s.add_dependency(%q<active_type>.freeze, [">= 1.3.0"])
39
43
  s.add_dependency(%q<minitest>.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/all'
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'
@@ -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 = false
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
- # Rails.backtrace_cleaner.remove_silencers!
7
+ Rails.backtrace_cleaner.remove_silencers!
@@ -6,4 +6,8 @@ ActiveRecord::Schema.define do
6
6
  t.string :color
7
7
  t.timestamps
8
8
  end
9
+
10
+ create_table :animals, force: true do |t|
11
+ t.string :type
12
+ end
9
13
  end
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,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
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.1.23
4
+ version: 1.1.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sitrox
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-01 00:00:00.000000000 Z
11
+ date: 2021-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,34 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: colorize
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: rubocop
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -201,6 +229,7 @@ files:
201
229
  - lib/rails_ops/model_mixins.rb
202
230
  - lib/rails_ops/model_mixins/ar_extension.rb
203
231
  - lib/rails_ops/model_mixins/parent_op.rb
232
+ - lib/rails_ops/model_mixins/sti_fixes.rb
204
233
  - lib/rails_ops/model_mixins/virtual_attributes.rb
205
234
  - lib/rails_ops/model_mixins/virtual_attributes/virtual_column_wrapper.rb
206
235
  - lib/rails_ops/model_mixins/virtual_has_one.rb
@@ -234,9 +263,15 @@ files:
234
263
  - test/dummy/app/helpers/application_helper.rb
235
264
  - test/dummy/app/jobs/application_job.rb
236
265
  - test/dummy/app/mailers/application_mailer.rb
266
+ - test/dummy/app/models/animal.rb
237
267
  - test/dummy/app/models/application_record.rb
268
+ - test/dummy/app/models/bird.rb
269
+ - test/dummy/app/models/cat.rb
238
270
  - test/dummy/app/models/concerns/.keep
271
+ - test/dummy/app/models/dog.rb
239
272
  - test/dummy/app/models/group.rb
273
+ - test/dummy/app/models/nightingale.rb
274
+ - test/dummy/app/models/phoenix.rb
240
275
  - test/dummy/app/models/user.rb
241
276
  - test/dummy/app/views/layouts/application.html.erb
242
277
  - test/dummy/app/views/layouts/mailer.html.erb
@@ -286,6 +321,7 @@ files:
286
321
  - test/unit/rails_ops/mixins/policies_test.rb
287
322
  - test/unit/rails_ops/operation/model/create_test.rb
288
323
  - test/unit/rails_ops/operation/model/load_test.rb
324
+ - test/unit/rails_ops/operation/model/sti_test.rb
289
325
  - test/unit/rails_ops/operation/model/update_test.rb
290
326
  - test/unit/rails_ops/operation/model_test.rb
291
327
  - test/unit/rails_ops/operation/update_auth_test.rb
@@ -330,9 +366,15 @@ test_files:
330
366
  - test/dummy/app/helpers/application_helper.rb
331
367
  - test/dummy/app/jobs/application_job.rb
332
368
  - test/dummy/app/mailers/application_mailer.rb
369
+ - test/dummy/app/models/animal.rb
333
370
  - test/dummy/app/models/application_record.rb
371
+ - test/dummy/app/models/bird.rb
372
+ - test/dummy/app/models/cat.rb
334
373
  - test/dummy/app/models/concerns/.keep
374
+ - test/dummy/app/models/dog.rb
335
375
  - test/dummy/app/models/group.rb
376
+ - test/dummy/app/models/nightingale.rb
377
+ - test/dummy/app/models/phoenix.rb
336
378
  - test/dummy/app/models/user.rb
337
379
  - test/dummy/app/views/layouts/application.html.erb
338
380
  - test/dummy/app/views/layouts/mailer.html.erb
@@ -382,6 +424,7 @@ test_files:
382
424
  - test/unit/rails_ops/mixins/policies_test.rb
383
425
  - test/unit/rails_ops/operation/model/create_test.rb
384
426
  - test/unit/rails_ops/operation/model/load_test.rb
427
+ - test/unit/rails_ops/operation/model/sti_test.rb
385
428
  - test/unit/rails_ops/operation/model/update_test.rb
386
429
  - test/unit/rails_ops/operation/model_test.rb
387
430
  - test/unit/rails_ops/operation/update_auth_test.rb