rails_ops 1.1.24 → 1.1.25

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7f5db505fe961fecc4e9723b857f989860cf5056d76eb9814a4d4903bb0a6bfe
4
- data.tar.gz: 3ab7053bc62a8bfb77b8c81ac90c97467ccdde7778e906097c4328c68c47607c
3
+ metadata.gz: 79ec45d11348e1ffbef7fc2c25296ffd0d7aad9368aca809c4affcbfb6ca9139
4
+ data.tar.gz: c2199c588e87f2e2327711b56fd9ff27703856c9dfb0a3bc5d694715c717d6d9
5
5
  SHA512:
6
- metadata.gz: 91c83b59903d7b82539e04c87a4604b6878a8f837a89931f95dcbf542d209e446e3caa849825f5042be68d0c95277f888445438f44ac7e9971f8140d02b4f124
7
- data.tar.gz: 80c4f9044744f71f34c07b70c73b584d74fad04d958db6055246d7d13aeb592a1a8bdae58ee258ae1f1513f325b2f9978e1ed50cf14dbe50f560dbc3899c532c
6
+ metadata.gz: 9f330c3f01bdd16406f5a4cf9da7a8ab7aa5d39aa6a30870119f40d817a4118bf8d9050744e14794844b36a1d86a75ecdbc5f50680538f712ecb9536aab4c089
7
+ data.tar.gz: fedfdc7b9a6eb869a59d7546c39ab71cfa594530ce4e018693bf898e90f4c4de3d7ed504200b846b4929ab11d64bdce3b0357d5b8ef06e053c1cf8477b69a679
data/.gitignore CHANGED
@@ -12,3 +12,4 @@
12
12
  /vendor/bundle
13
13
  /test/dummy/tmp/
14
14
  /test/dummy/log/
15
+ /test/tmp/
data/.rubocop.yml CHANGED
@@ -6,6 +6,7 @@ AllCops:
6
6
  - 'tmp/**/*'
7
7
  - 'log/**/*'
8
8
  - '*.gemspec'
9
+ - 'test/tmp/**/*'
9
10
 
10
11
  DisplayCopNames: true
11
12
 
data/CHANGELOG.md CHANGED
@@ -1,10 +1,19 @@
1
1
  # Changelog
2
2
 
3
- ## 1.1.22 (2021-11-25)
3
+ ## 1.1.25 (2022-01-17)
4
+
5
+ * #24: Add generator `operation` that generates a controller, operations and empty
6
+ view files
7
+
8
+ ## 1.1.24 (2021-11-24)
4
9
 
5
10
  * Add support for STI in model operations
6
11
 
7
- ## 1.1.21 (2021-11-01)
12
+ ## 1.1.23 (2021-11-01)
13
+
14
+ * No changes to previous release
15
+
16
+ ## 1.1.22 (2021-11-01)
8
17
 
9
18
  * Add support for lazy model authorization
10
19
 
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright © 2017-2021 Sitrox
3
+ Copyright © 2017-2022 Sitrox
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1488,6 +1488,55 @@ sub-operations, see section *Calling sub-operations* for more information.
1488
1488
  Operation Inheritance
1489
1489
  ---------------------
1490
1490
 
1491
+ Generators
1492
+ ----------
1493
+
1494
+ RailsOps features a generator to easily create a structure for common CRUD-style
1495
+ constructs. The generator creates the CRUD operations, some empty view files, a
1496
+ controller and adds an entry in the routing file.
1497
+
1498
+ This is e.g. useful when adding a new model to an application, as the basic structure
1499
+ is usually rather similar.
1500
+
1501
+ ### Usage
1502
+
1503
+ Run the generator using the `operation` generator, specifying the name of the
1504
+ operation class:
1505
+
1506
+ ```ruby
1507
+ rails g operation User
1508
+ ```
1509
+
1510
+ This will generate the following operations:
1511
+
1512
+ * `app/operations/user/load.rb`
1513
+ * `app/operations/user/create.rb`
1514
+ * `app/operations/user/update.rb`
1515
+ * `app/operations/user/destroy.rb`
1516
+
1517
+ as well as the controller `app/controllers/users_controller.rb` and the following
1518
+ empty view files:
1519
+
1520
+ * `app/views/users/index.html.haml`
1521
+ * `app/views/users/show.html.haml`
1522
+ * `app/views/users/new.html.haml`
1523
+ * `app/views/users/edit.html.haml`
1524
+
1525
+ It will also add the entry `resources :users` to the `config/routes.rb` file.
1526
+
1527
+ If you want to skip the controller, the views or the routes, you can do so using the
1528
+ flags:
1529
+
1530
+ * `--skip-controller`
1531
+ * `--skip-routes`
1532
+ * `--skip-views`
1533
+
1534
+ Or if you want to skip them all: `--only-operations`.
1535
+
1536
+ Of course, at this point, the operations will need some adaptions, especially the
1537
+ [parameter schemas](#validating-params), and the controllers need the logic for the
1538
+ success and failure cases, as this depends on your application.
1539
+
1491
1540
  Caveats
1492
1541
  -------
1493
1542
 
@@ -1509,4 +1558,4 @@ Rails architecture.
1509
1558
 
1510
1559
  ## Copyright
1511
1560
 
1512
- Copyright © 2017 - 2021 Sitrox. See `LICENSE` for further details.
1561
+ Copyright © 2017 - 2022 Sitrox. See `LICENSE` for further details.
data/Rakefile CHANGED
@@ -22,6 +22,7 @@ task :gemspec do
22
22
  spec.add_development_dependency 'pry'
23
23
  spec.add_development_dependency 'colorize'
24
24
  spec.add_development_dependency 'rubocop', '0.47.1'
25
+ spec.add_development_dependency 'sprockets-rails'
25
26
  spec.add_dependency 'active_type', '>= 1.3.0'
26
27
  spec.add_dependency 'minitest'
27
28
  spec.add_dependency 'rails'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.24
1
+ 1.1.25
@@ -0,0 +1,21 @@
1
+ Description:
2
+ Generates CRUD operations, along with a controller, views and an entry in the route file
3
+
4
+ Example:
5
+ bin/rails generate operation User
6
+
7
+ This will create:
8
+ app/operations/user/load.rb
9
+ app/operations/user/create.rb
10
+ app/operations/user/update.rb
11
+ app/operations/user/destroy.rb
12
+
13
+ app/controllers/users_controller.rb
14
+
15
+ app/views/users/index.html.haml
16
+ app/views/users/show.html.haml
17
+ app/views/users/new.html.haml
18
+ app/views/users/edit.html.haml
19
+
20
+ And add a routing entry:
21
+ resources :users
@@ -0,0 +1,46 @@
1
+ class OperationGenerator < Rails::Generators::NamedBase
2
+ source_root File.expand_path('templates', __dir__)
3
+
4
+ class_option :skip_controller, type: :boolean, desc: "Don't add a controller."
5
+ class_option :skip_views, type: :boolean, desc: "Don't add the views."
6
+ class_option :skip_routes, type: :boolean, desc: "Don't add routes to config/routes.rb."
7
+ class_option :only_operations, type: :boolean, desc: 'Only add the operations. This is equal to specifying --skip-controller --skip-routes --skip-views'
8
+
9
+ def add_operations
10
+ @class_name = name.classify
11
+ @underscored_name = name.underscore
12
+ @underscored_pluralized_name = name.underscore.pluralize
13
+
14
+ operations_path = "app/operations/#{@underscored_name}"
15
+
16
+ template 'load.erb', "#{operations_path}/load.rb"
17
+ template 'create.erb', "#{operations_path}/create.rb"
18
+ template 'update.erb', "#{operations_path}/update.rb"
19
+ template 'destroy.erb', "#{operations_path}/destroy.rb"
20
+ end
21
+
22
+ def add_controller
23
+ return if options[:skip_controller] || options[:only_operations]
24
+
25
+ controller_file_path = "app/controllers/#{@underscored_pluralized_name}_controller.rb"
26
+ @controller_name = "#{@class_name.pluralize}Controller"
27
+
28
+ template 'controller.erb', controller_file_path
29
+ end
30
+
31
+ def add_views
32
+ return if options[:skip_views] || options[:only_operations]
33
+
34
+ views_folder = "app/views/#{@underscored_pluralized_name}"
35
+
36
+ %w(index show new edit).each do |view|
37
+ template 'view.erb', "#{views_folder}/#{view}.html.haml"
38
+ end
39
+ end
40
+
41
+ def add_routes
42
+ return if options[:skip_routes] || options[:only_operations]
43
+
44
+ route "resources :#{@underscored_pluralized_name}"
45
+ end
46
+ end
@@ -0,0 +1,39 @@
1
+ class <%= @controller_name %> < ApplicationController
2
+ def index; end
3
+
4
+ def show
5
+ op Operations::<%= @class_name %>::Load
6
+ end
7
+
8
+ def new
9
+ op Operations::<%= @class_name %>::Create
10
+ end
11
+
12
+ def create
13
+ if run Operations::<%= @class_name %>::Create
14
+ # handle successful case
15
+ else
16
+ # handle error case
17
+ end
18
+ end
19
+
20
+ def edit
21
+ op Operations::<%= @class_name %>::Update
22
+ end
23
+
24
+ def update
25
+ if run Operations::<%= @class_name %>::Update
26
+ # handle successful case
27
+ else
28
+ # handle error case
29
+ end
30
+ end
31
+
32
+ def destroy
33
+ if run Operations::<%= @class_name %>::Destroy
34
+ # handle successful case
35
+ else
36
+ # handle error case
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,11 @@
1
+ module Operations::<%= @class_name %>
2
+ class Create < RailsOps::Operation::Model::Create
3
+ schema3 do
4
+ hsh? :<%= @underscored_name %> do
5
+
6
+ end
7
+ end
8
+
9
+ model ::<%= @class_name %>
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ module Operations::<%= @class_name %>
2
+ class Destroy < RailsOps::Operation::Model::Destroy
3
+ schema3 do
4
+ str! :id
5
+ end
6
+
7
+ model ::<%= @class_name %>
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ module Operations::<%= @class_name %>
2
+ class Load < RailsOps::Operation::Model::Load
3
+ model ::<%= @class_name %>
4
+ end
5
+ end
@@ -0,0 +1,12 @@
1
+ module Operations::<%= @class_name %>
2
+ class Update < RailsOps::Operation::Model::Update
3
+ schema3 do
4
+ str! :id
5
+ hsh? :<%= @underscored_name %> do
6
+
7
+ end
8
+ end
9
+
10
+ model ::<%= @class_name %>
11
+ end
12
+ end
File without changes
data/rails_ops.gemspec CHANGED
@@ -1,18 +1,18 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: rails_ops 1.1.24 ruby lib
2
+ # stub: rails_ops 1.1.25 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "rails_ops".freeze
6
- s.version = "1.1.24"
6
+ s.version = "1.1.25"
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-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]
11
+ s.date = "2022-01-17"
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/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
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/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]
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
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
26
26
  s.add_development_dependency(%q<pry>.freeze, [">= 0"])
27
27
  s.add_development_dependency(%q<colorize>.freeze, [">= 0"])
28
28
  s.add_development_dependency(%q<rubocop>.freeze, ["= 0.47.1"])
29
+ s.add_development_dependency(%q<sprockets-rails>.freeze, [">= 0"])
29
30
  s.add_runtime_dependency(%q<active_type>.freeze, [">= 1.3.0"])
30
31
  s.add_runtime_dependency(%q<minitest>.freeze, [">= 0"])
31
32
  s.add_runtime_dependency(%q<rails>.freeze, [">= 0"])
@@ -39,6 +40,7 @@ Gem::Specification.new do |s|
39
40
  s.add_dependency(%q<pry>.freeze, [">= 0"])
40
41
  s.add_dependency(%q<colorize>.freeze, [">= 0"])
41
42
  s.add_dependency(%q<rubocop>.freeze, ["= 0.47.1"])
43
+ s.add_dependency(%q<sprockets-rails>.freeze, [">= 0"])
42
44
  s.add_dependency(%q<active_type>.freeze, [">= 1.3.0"])
43
45
  s.add_dependency(%q<minitest>.freeze, [">= 0"])
44
46
  s.add_dependency(%q<rails>.freeze, [">= 0"])
@@ -0,0 +1,7 @@
1
+ class Flower < ApplicationRecord
2
+ # default_scope ->() { where(planted: true) }
3
+
4
+ def self.default_scope
5
+ where(planted: true)
6
+ end
7
+ end
@@ -2,16 +2,16 @@ require_relative 'boot'
2
2
 
3
3
  require 'rails'
4
4
 
5
- require "active_model/railtie"
6
- require "active_job/railtie"
7
- require "active_record/railtie"
5
+ require 'active_model/railtie'
6
+ require 'active_job/railtie'
7
+ require 'active_record/railtie'
8
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"
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'
15
15
 
16
16
  Bundler.require(*Rails.groups)
17
17
  require 'rails_ops'
@@ -10,4 +10,8 @@ ActiveRecord::Schema.define do
10
10
  create_table :animals, force: true do |t|
11
11
  t.string :type
12
12
  end
13
+
14
+ create_table :flowers, force: true do |t|
15
+ t.boolean :planted, null: false, default: true
16
+ end
13
17
  end
@@ -0,0 +1,170 @@
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
+ private
129
+
130
+ def assert_operations
131
+ assert_file 'app/operations/user/create.rb' do |operation|
132
+ assert_match(/module Operations::User/, operation)
133
+ assert_match(/class Create < RailsOps::Operation::Model::Create/, operation)
134
+ assert_match(/model ::User/, operation)
135
+ end
136
+ assert_file 'app/operations/user/destroy.rb' do |operation|
137
+ assert_match(/module Operations::User/, operation)
138
+ assert_match(/class Destroy < RailsOps::Operation::Model::Destroy/, operation)
139
+ assert_match(/model ::User/, operation)
140
+ end
141
+ assert_file 'app/operations/user/load.rb' do |operation|
142
+ assert_match(/module Operations::User/, operation)
143
+ assert_match(/class Load < RailsOps::Operation::Model::Load/, operation)
144
+ assert_match(/model ::User/, operation)
145
+ end
146
+ assert_file 'app/operations/user/update.rb' do |operation|
147
+ assert_match(/module Operations::User/, operation)
148
+ assert_match(/class Update < RailsOps::Operation::Model::Update/, operation)
149
+ assert_match(/model ::User/, operation)
150
+ end
151
+ end
152
+
153
+ def assert_views
154
+ %w(index show new edit).each do |view|
155
+ assert_file "app/views/users/#{view}.html.haml"
156
+ end
157
+ end
158
+
159
+ def assert_controller
160
+ assert_file 'app/controllers/users_controller.rb' do |controller|
161
+ assert_match(/class UsersController < ApplicationController/, controller)
162
+ end
163
+ end
164
+
165
+ def assert_routes
166
+ assert_file 'config/routes.rb' do |routes|
167
+ assert_match(/resources :users/, routes)
168
+ end
169
+ end
170
+ end
@@ -7,6 +7,12 @@ 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
+ end
14
+ end
15
+
10
16
  def test_basic
11
17
  g = Group.create
12
18
  op = BASIC_OP.new(id: g.id)
@@ -19,4 +25,24 @@ class RailsOps::Operation::Model::UpdateTest < ActiveSupport::TestCase
19
25
  op = BASIC_OP.new(id: g.id)
20
26
  assert_equal op, op.model.parent_op
21
27
  end
28
+
29
+ def test_issue_59992
30
+ flower1 = Flower.create!(planted: true)
31
+ flower2 = Flower.create!(planted: false)
32
+
33
+ op = FLOWER_OP.new(id: flower1.id)
34
+
35
+ assert op.model.respond_to?(:color)
36
+ assert op.model.is_a?(FLOWER_OP.model)
37
+
38
+ op.model.color = :red
39
+
40
+ assert_equal :red, op.model.color
41
+
42
+ op = FLOWER_OP.new(id: flower2.id)
43
+
44
+ assert_raises ActiveRecord::RecordNotFound do
45
+ op.model
46
+ end
47
+ end
22
48
  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.24
4
+ version: 1.1.25
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-25 00:00:00.000000000 Z
11
+ date: 2022-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - '='
109
109
  - !ruby/object:Gem::Version
110
110
  version: 0.47.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: sprockets-rails
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: active_type
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -200,6 +214,14 @@ files:
200
214
  - README.md
201
215
  - Rakefile
202
216
  - VERSION
217
+ - lib/generators/operation/USAGE
218
+ - lib/generators/operation/operation_generator.rb
219
+ - lib/generators/operation/templates/controller.erb
220
+ - lib/generators/operation/templates/create.erb
221
+ - lib/generators/operation/templates/destroy.erb
222
+ - lib/generators/operation/templates/load.erb
223
+ - lib/generators/operation/templates/update.erb
224
+ - lib/generators/operation/templates/view.erb
203
225
  - lib/rails_ops.rb
204
226
  - lib/rails_ops/authorization_backend/abstract.rb
205
227
  - lib/rails_ops/authorization_backend/can_can_can.rb
@@ -269,6 +291,7 @@ files:
269
291
  - test/dummy/app/models/cat.rb
270
292
  - test/dummy/app/models/concerns/.keep
271
293
  - test/dummy/app/models/dog.rb
294
+ - test/dummy/app/models/flower.rb
272
295
  - test/dummy/app/models/group.rb
273
296
  - test/dummy/app/models/nightingale.rb
274
297
  - test/dummy/app/models/phoenix.rb
@@ -317,6 +340,7 @@ files:
317
340
  - test/dummy/public/favicon.ico
318
341
  - test/dummy/tmp/.keep
319
342
  - test/test_helper.rb
343
+ - test/unit/rails_ops/generators/operation_generator_test.rb
320
344
  - test/unit/rails_ops/mixins/model/nesting.rb
321
345
  - test/unit/rails_ops/mixins/policies_test.rb
322
346
  - test/unit/rails_ops/operation/model/create_test.rb
@@ -372,6 +396,7 @@ test_files:
372
396
  - test/dummy/app/models/cat.rb
373
397
  - test/dummy/app/models/concerns/.keep
374
398
  - test/dummy/app/models/dog.rb
399
+ - test/dummy/app/models/flower.rb
375
400
  - test/dummy/app/models/group.rb
376
401
  - test/dummy/app/models/nightingale.rb
377
402
  - test/dummy/app/models/phoenix.rb
@@ -420,6 +445,7 @@ test_files:
420
445
  - test/dummy/public/favicon.ico
421
446
  - test/dummy/tmp/.keep
422
447
  - test/test_helper.rb
448
+ - test/unit/rails_ops/generators/operation_generator_test.rb
423
449
  - test/unit/rails_ops/mixins/model/nesting.rb
424
450
  - test/unit/rails_ops/mixins/policies_test.rb
425
451
  - test/unit/rails_ops/operation/model/create_test.rb