rails_ops 1.1.24 → 1.1.28
Sign up to get free protection for your applications and to get access to all the features.
- 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 +25 -2
- data/LICENSE +1 -1
- data/README.md +106 -13
- data/Rakefile +2 -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/mixins/model/authorization.rb +1 -3
- data/lib/rails_ops/model_mixins/sti_fixes.rb +2 -6
- data/lib/rails_ops/model_mixins/virtual_attributes/virtual_column_wrapper.rb +4 -0
- data/lib/rails_ops.rb +1 -13
- data/rails_ops.gemspec +10 -6
- data/test/dummy/app/models/flower.rb +7 -0
- data/test/dummy/config/application.rb +10 -10
- data/test/dummy/db/schema.rb +4 -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/update_test.rb +71 -0
- metadata +56 -11
- data/lib/rails_ops/model_casting.rb +0 -17
- data/lib/rails_ops/patches/active_type_patch.rb +0 -52
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47bf9f1036ce2dc4920702cf743def5630af73960f1a750abedc578708454d61
|
4
|
+
data.tar.gz: d0ddd78f73c479e26f6d601d3dfdbeeefc0f667f0b5d094538f2e1faa210275d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47bd674965ba4ff732f343391b1ad77d11c8ceed69505d519979a2c9a81d45344a9dd21151b1a749ad24fed922c15d3223eee4418317acee947b5cfcb3dbf8cd
|
7
|
+
data.tar.gz: dea5e80197169cf93b06ea713ca198b97ff711b9171a3869d0da922341d6ebe5286993045009051b03f3eec2e41ed2172bdcc4c9a15943bea93a5bf042fdfbca
|
@@ -0,0 +1,17 @@
|
|
1
|
+
name: Rubocop check
|
2
|
+
on: push
|
3
|
+
|
4
|
+
jobs:
|
5
|
+
verify:
|
6
|
+
name: Test
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
|
9
|
+
steps:
|
10
|
+
- uses: actions/checkout@v1
|
11
|
+
- name: Set up Ruby
|
12
|
+
uses: ruby/setup-ruby@v1
|
13
|
+
with:
|
14
|
+
ruby-version: 3.0.1
|
15
|
+
bundler-cache: true
|
16
|
+
- name: Run rubocop
|
17
|
+
run: bundle exec rubocop
|
data/.github/workflows/ruby.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
name:
|
1
|
+
name: Unit tests
|
2
2
|
|
3
3
|
on:
|
4
4
|
push:
|
@@ -12,16 +12,46 @@ jobs:
|
|
12
12
|
strategy:
|
13
13
|
fail-fast: false
|
14
14
|
matrix:
|
15
|
-
|
16
|
-
|
15
|
+
include:
|
16
|
+
- rails-version: '5.1'
|
17
|
+
ruby-version: '2.3.0'
|
18
|
+
- rails-version: '5.1'
|
19
|
+
ruby-version: '2.5.1'
|
20
|
+
- rails-version: '5.2'
|
21
|
+
ruby-version: '2.3.0'
|
22
|
+
- rails-version: '5.2'
|
23
|
+
ruby-version: '2.5.1'
|
24
|
+
- rails-version: '5.2'
|
25
|
+
ruby-version: '2.6.2'
|
26
|
+
- rails-version: '6.0'
|
27
|
+
ruby-version: '2.5.1'
|
28
|
+
- rails-version: '6.0'
|
29
|
+
ruby-version: '2.6.2'
|
30
|
+
- rails-version: '6.0'
|
31
|
+
ruby-version: '2.7.1'
|
32
|
+
- rails-version: '6.1'
|
33
|
+
ruby-version: '2.5.1'
|
34
|
+
- rails-version: '6.1'
|
35
|
+
ruby-version: '2.6.2'
|
36
|
+
- rails-version: '6.1'
|
37
|
+
ruby-version: '2.7.1'
|
38
|
+
- rails-version: '6.1'
|
39
|
+
ruby-version: '3.0.1'
|
40
|
+
- rails-version: '7.0'
|
41
|
+
ruby-version: '2.7.1'
|
42
|
+
- rails-version: '7.0'
|
43
|
+
ruby-version: '3.0.1'
|
44
|
+
- rails-version: '7.0'
|
45
|
+
ruby-version: '3.1.0'
|
46
|
+
name: Test against Ruby ${{ matrix.ruby-version }} / Rails ${{ matrix.rails-version }}
|
47
|
+
env:
|
48
|
+
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/rails_${{ matrix.rails-version }}.gemfile
|
17
49
|
steps:
|
18
50
|
- uses: actions/checkout@v2
|
19
|
-
- name: Set up Ruby
|
51
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
20
52
|
uses: ruby/setup-ruby@v1
|
21
53
|
with:
|
22
54
|
ruby-version: ${{ matrix.ruby-version }}
|
23
55
|
bundler-cache: true
|
24
56
|
- name: Run rake tests
|
25
|
-
run: bundle exec rake
|
26
|
-
- name: Run rubocop
|
27
|
-
run: bundle exec rubocop
|
57
|
+
run: bundle exec rake
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/Appraisals
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
appraise "rails-7.0" do
|
2
|
+
gem "rails", "~> 7.0.1"
|
3
|
+
end
|
4
|
+
|
5
|
+
appraise "rails-6.1" do
|
6
|
+
gem "rails", "~> 6.1.4"
|
7
|
+
end
|
8
|
+
|
9
|
+
appraise "rails-6.0" do
|
10
|
+
gem "rails", "~> 6.0.4"
|
11
|
+
end
|
12
|
+
|
13
|
+
appraise "rails-5.2" do
|
14
|
+
gem "rails", "~> 5.2.6"
|
15
|
+
end
|
16
|
+
|
17
|
+
appraise "rails-5.1" do
|
18
|
+
gem "rails", "~> 5.1.7"
|
19
|
+
end
|
data/CHANGELOG.md
CHANGED
@@ -1,10 +1,33 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
## 1.1.
|
3
|
+
## 1.1.28 (2022-02-16)
|
4
|
+
|
5
|
+
* [#22](https://github.com/sitrox/rails_ops/issues/22): Fix error with active_type `>= 2`
|
6
|
+
|
7
|
+
## 1.1.27 (2022-02-15)
|
8
|
+
|
9
|
+
* Add `module` option to `operation` generator
|
10
|
+
|
11
|
+
## 1.1.26 (2022-01-18)
|
12
|
+
|
13
|
+
* #25: Add test matrix for unit tests
|
14
|
+
|
15
|
+
* Add compatibility for Rails 7 and Ruby 3.1.0
|
16
|
+
|
17
|
+
## 1.1.25 (2022-01-17)
|
18
|
+
|
19
|
+
* #24: Add generator `operation` that generates a controller, operations and empty
|
20
|
+
view files
|
21
|
+
|
22
|
+
## 1.1.24 (2021-11-24)
|
4
23
|
|
5
24
|
* Add support for STI in model operations
|
6
25
|
|
7
|
-
## 1.1.
|
26
|
+
## 1.1.23 (2021-11-01)
|
27
|
+
|
28
|
+
* No changes to previous release
|
29
|
+
|
30
|
+
## 1.1.22 (2021-11-01)
|
8
31
|
|
9
32
|
* Add support for lazy model authorization
|
10
33
|
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
[![
|
1
|
+
[![Unit tests](https://github.com/sitrox/rails_ops/actions/workflows/ruby.yml/badge.svg)](https://github.com/sitrox/rails_ops/actions/workflows/ruby.yml)
|
2
|
+
[![Rubocop check](https://github.com/sitrox/rails_ops/actions/workflows/rubocop.yml/badge.svg)](https://github.com/sitrox/rails_ops/actions/workflows/rubocop.yml)
|
2
3
|
[![Gem Version](https://badge.fury.io/rb/rails_ops.svg)](https://badge.fury.io/rb/rails_ops)
|
3
4
|
|
4
5
|
rails_ops
|
@@ -22,9 +23,21 @@ Requirements & Installation
|
|
22
23
|
|
23
24
|
### Requirements
|
24
25
|
|
25
|
-
- RailsOps only works with Rails applications
|
26
|
-
|
27
|
-
|
26
|
+
- RailsOps only works with Rails applications, with the following Rails versions being tested in the CI:
|
27
|
+
* Rails 5.1.x
|
28
|
+
* Rails 5.2.x
|
29
|
+
* Rails 6.0.x
|
30
|
+
* Rails 6.1.x
|
31
|
+
* Rails 7.0.x
|
32
|
+
- Additionally, the following Ruby versions are covered by our unit tests:
|
33
|
+
* 2.3.0
|
34
|
+
* 2.5.1
|
35
|
+
* 2.6.2
|
36
|
+
* 2.7.1
|
37
|
+
* 3.0.1
|
38
|
+
* 3.1.0
|
39
|
+
- Please see the [unit test workflow](https://github.com/sitrox/rails_ops/actions/workflows/ruby.yml) for the combinations of the Rails & Ruby versions, as only compatible versions are tested with each other.
|
40
|
+
- Prior Rails and Ruby versions may be supported but they are not tested in the CI.
|
28
41
|
- Rails Ops' model operations require ActiveRecord but are database / adapter
|
29
42
|
agnostic
|
30
43
|
|
@@ -54,15 +67,16 @@ Requirements & Installation
|
|
54
67
|
following inside of the `Application` class within your
|
55
68
|
`config/application.rb`:
|
56
69
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
70
|
+
```ruby
|
71
|
+
app_operations = "#{Rails.root}/app/operations"
|
72
|
+
ActiveSupport::Dependencies.autoload_paths.delete(app_operations)
|
73
|
+
|
74
|
+
module Operations; end
|
75
|
+
loader = Rails.autoloaders.main
|
76
|
+
loader.push_dir(app_operations, namespace: Operations)
|
77
|
+
```
|
61
78
|
|
62
|
-
|
63
|
-
# that will run when loaded.
|
64
|
-
config.paths.add 'lib', eager_load: true
|
65
|
-
```
|
79
|
+
Taken from [this github issues comment](https://github.com/rails/rails/issues/40126#issuecomment-816275285).
|
66
80
|
|
67
81
|
Operation Basics
|
68
82
|
----------------
|
@@ -1488,6 +1502,85 @@ sub-operations, see section *Calling sub-operations* for more information.
|
|
1488
1502
|
Operation Inheritance
|
1489
1503
|
---------------------
|
1490
1504
|
|
1505
|
+
Generators
|
1506
|
+
----------
|
1507
|
+
|
1508
|
+
RailsOps features a generator to easily create a structure for common CRUD-style
|
1509
|
+
constructs. The generator creates the CRUD operations, some empty view files, a
|
1510
|
+
controller and adds an entry in the routing file.
|
1511
|
+
|
1512
|
+
This is e.g. useful when adding a new model to an application, as the basic structure
|
1513
|
+
is usually rather similar.
|
1514
|
+
|
1515
|
+
### Usage
|
1516
|
+
|
1517
|
+
Run the generator using the `operation` generator, specifying the name of the
|
1518
|
+
operation class:
|
1519
|
+
|
1520
|
+
```ruby
|
1521
|
+
rails g operation User
|
1522
|
+
```
|
1523
|
+
|
1524
|
+
This will generate the following operations:
|
1525
|
+
|
1526
|
+
* `app/operations/user/load.rb`
|
1527
|
+
* `app/operations/user/create.rb`
|
1528
|
+
* `app/operations/user/update.rb`
|
1529
|
+
* `app/operations/user/destroy.rb`
|
1530
|
+
|
1531
|
+
as well as the controller `app/controllers/users_controller.rb` and the following
|
1532
|
+
empty view files:
|
1533
|
+
|
1534
|
+
* `app/views/users/index.html.haml`
|
1535
|
+
* `app/views/users/show.html.haml`
|
1536
|
+
* `app/views/users/new.html.haml`
|
1537
|
+
* `app/views/users/edit.html.haml`
|
1538
|
+
|
1539
|
+
It will also add the entry `resources :users` to the `config/routes.rb` file.
|
1540
|
+
|
1541
|
+
If you want to skip the controller, the views or the routes, you can do so using the
|
1542
|
+
flags:
|
1543
|
+
|
1544
|
+
* `--skip-controller`
|
1545
|
+
* `--skip-routes`
|
1546
|
+
* `--skip-views`
|
1547
|
+
|
1548
|
+
Or if you want to skip them all: `--only-operations`.
|
1549
|
+
|
1550
|
+
You can also add a module as a namespace, all generated files will be put in
|
1551
|
+
the proper subfolders and modules by using the `--module` option.
|
1552
|
+
|
1553
|
+
As an example:
|
1554
|
+
|
1555
|
+
```ruby
|
1556
|
+
rails g operation User --module Admin
|
1557
|
+
```
|
1558
|
+
|
1559
|
+
This will generate the following operations:
|
1560
|
+
|
1561
|
+
* `app/operations/admin/user/load.rb`
|
1562
|
+
* `app/operations/admin/user/create.rb`
|
1563
|
+
* `app/operations/admin/user/update.rb`
|
1564
|
+
* `app/operations/admin/user/destroy.rb`
|
1565
|
+
|
1566
|
+
These operations will be namespaced in the `Admin` module, e.g. `app/operations/admin/user/load.rb` will define `Operations::Admin::User::Load`.
|
1567
|
+
|
1568
|
+
It will also generate the controller `app/controllers/admin/users_controller.rb` and the following
|
1569
|
+
empty view files:
|
1570
|
+
|
1571
|
+
* `app/views/admin/users/index.html.haml`
|
1572
|
+
* `app/views/admin/users/show.html.haml`
|
1573
|
+
* `app/views/admin/users/new.html.haml`
|
1574
|
+
* `app/views/admin/users/edit.html.haml`
|
1575
|
+
|
1576
|
+
Both lower- and uppercase will generate the same files (i.e. `--module Admin` and `--module admin` are equal).
|
1577
|
+
|
1578
|
+
You can even nest the generated files deeper, `--module Admin::Foo` and `--module admin/foo` will both work.
|
1579
|
+
|
1580
|
+
Of course, at this point, the operations will need some adaptions, especially the
|
1581
|
+
[parameter schemas](#validating-params), and the controllers need the logic for the
|
1582
|
+
success and failure cases, as this depends on your application.
|
1583
|
+
|
1491
1584
|
Caveats
|
1492
1585
|
-------
|
1493
1586
|
|
@@ -1509,4 +1602,4 @@ Rails architecture.
|
|
1509
1602
|
|
1510
1603
|
## Copyright
|
1511
1604
|
|
1512
|
-
Copyright © 2017 -
|
1605
|
+
Copyright © 2017 - 2022 Sitrox. See `LICENSE` for further details.
|
data/Rakefile
CHANGED
@@ -15,6 +15,7 @@ task :gemspec do
|
|
15
15
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
16
16
|
spec.require_paths = ['lib']
|
17
17
|
|
18
|
+
spec.add_development_dependency 'appraisal'
|
18
19
|
spec.add_development_dependency 'bundler'
|
19
20
|
spec.add_development_dependency 'rake'
|
20
21
|
spec.add_development_dependency 'sqlite3'
|
@@ -22,6 +23,7 @@ task :gemspec do
|
|
22
23
|
spec.add_development_dependency 'pry'
|
23
24
|
spec.add_development_dependency 'colorize'
|
24
25
|
spec.add_development_dependency 'rubocop', '0.47.1'
|
26
|
+
spec.add_development_dependency 'sprockets-rails'
|
25
27
|
spec.add_dependency 'active_type', '>= 1.3.0'
|
26
28
|
spec.add_dependency 'minitest'
|
27
29
|
spec.add_dependency 'rails'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.1.
|
1
|
+
1.1.28
|
@@ -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,64 @@
|
|
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
|
+
class_option :module, type: :string, desc: 'Add the operations in a module, e.g. "Admin" results in namespacing everything in the Admin module'
|
9
|
+
|
10
|
+
def add_operations
|
11
|
+
@class_name = name.classify
|
12
|
+
@underscored_name = name.underscore
|
13
|
+
@underscored_pluralized_name = name.underscore.pluralize
|
14
|
+
|
15
|
+
operations_path = 'app/operations/'
|
16
|
+
|
17
|
+
if options[:module].present?
|
18
|
+
@module_name = options[:module].classify
|
19
|
+
@module_underscored_name = @module_name.underscore
|
20
|
+
|
21
|
+
operations_path += "#{@module_underscored_name}/"
|
22
|
+
end
|
23
|
+
|
24
|
+
operations_path += @underscored_name.to_s
|
25
|
+
|
26
|
+
template 'load.erb', "#{operations_path}/load.rb"
|
27
|
+
template 'create.erb', "#{operations_path}/create.rb"
|
28
|
+
template 'update.erb', "#{operations_path}/update.rb"
|
29
|
+
template 'destroy.erb', "#{operations_path}/destroy.rb"
|
30
|
+
end
|
31
|
+
|
32
|
+
def add_controller
|
33
|
+
return if options[:skip_controller] || options[:only_operations]
|
34
|
+
|
35
|
+
controller_file_path = 'app/controllers/'
|
36
|
+
if @module_underscored_name.present?
|
37
|
+
controller_file_path += "#{@module_underscored_name}/"
|
38
|
+
end
|
39
|
+
controller_file_path += "#{@underscored_pluralized_name}_controller.rb"
|
40
|
+
@controller_name = "#{@class_name.pluralize}Controller"
|
41
|
+
|
42
|
+
template 'controller.erb', controller_file_path
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_views
|
46
|
+
return if options[:skip_views] || options[:only_operations]
|
47
|
+
|
48
|
+
views_folder = 'app/views/'
|
49
|
+
if @module_underscored_name.present?
|
50
|
+
views_folder += "#{@module_underscored_name}/"
|
51
|
+
end
|
52
|
+
views_folder += @underscored_pluralized_name.to_s
|
53
|
+
|
54
|
+
%w(index show new edit).each do |view|
|
55
|
+
template 'view.erb', "#{views_folder}/#{view}.html.haml"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def add_routes
|
60
|
+
return if options[:skip_routes] || options[:only_operations]
|
61
|
+
|
62
|
+
route "resources :#{@underscored_pluralized_name}"
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
<%
|
2
|
+
controller_code = <<-RUBY
|
3
|
+
class #{@controller_name} < ApplicationController
|
4
|
+
def index; end
|
5
|
+
|
6
|
+
def show
|
7
|
+
op Operations#{ "::#{@module_name}" if @module_name.present? }::#{@class_name}::Load
|
8
|
+
end
|
9
|
+
|
10
|
+
def new
|
11
|
+
op Operations#{ "::#{@module_name}" if @module_name.present? }::#{@class_name}::Create
|
12
|
+
end
|
13
|
+
|
14
|
+
def create
|
15
|
+
if run Operations#{ "::#{@module_name}" if @module_name.present? }::#{@class_name}::Create
|
16
|
+
# handle successful case
|
17
|
+
else
|
18
|
+
# handle error case
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def edit
|
23
|
+
op Operations#{ "::#{@module_name}" if @module_name.present? }::#{@class_name}::Update
|
24
|
+
end
|
25
|
+
|
26
|
+
def update
|
27
|
+
if run Operations#{ "::#{@module_name}" if @module_name.present? }::#{@class_name}::Update
|
28
|
+
# handle successful case
|
29
|
+
else
|
30
|
+
# handle error case
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def destroy
|
35
|
+
if run Operations#{ "::#{@module_name}" if @module_name.present? }::#{@class_name}::Destroy
|
36
|
+
# handle successful case
|
37
|
+
else
|
38
|
+
# handle error case
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
RUBY
|
43
|
+
-%>
|
44
|
+
<% if @module_name.present? -%>
|
45
|
+
module <%= @module_name %>
|
46
|
+
<% controller_code.split("\n").each do |line| -%>
|
47
|
+
<% if line.blank? -%>
|
48
|
+
|
49
|
+
<% else -%>
|
50
|
+
<%= line %>
|
51
|
+
<% end -%>
|
52
|
+
<% end -%>
|
53
|
+
end
|
54
|
+
<% else -%>
|
55
|
+
<%= controller_code -%>
|
56
|
+
<% end -%>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<% if @module_name.present? -%>
|
2
|
+
module Operations::<%= @module_name %>::<%= @class_name %>
|
3
|
+
<% else -%>
|
4
|
+
module Operations::<%= @class_name %>
|
5
|
+
<% end -%>
|
6
|
+
class Create < RailsOps::Operation::Model::Create
|
7
|
+
schema3 do
|
8
|
+
hsh? :<%= @underscored_name %> do
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
model ::<%= @class_name %>
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<% if @module_name.present? -%>
|
2
|
+
module Operations::<%= @module_name %>::<%= @class_name %>
|
3
|
+
<% else -%>
|
4
|
+
module Operations::<%= @class_name %>
|
5
|
+
<% end -%>
|
6
|
+
class Destroy < RailsOps::Operation::Model::Destroy
|
7
|
+
schema3 do
|
8
|
+
str! :id
|
9
|
+
end
|
10
|
+
|
11
|
+
model ::<%= @class_name %>
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<% if @module_name.present? -%>
|
2
|
+
module Operations::<%= @module_name %>::<%= @class_name %>
|
3
|
+
<% else -%>
|
4
|
+
module Operations::<%= @class_name %>
|
5
|
+
<% end -%>
|
6
|
+
class Load < RailsOps::Operation::Model::Load
|
7
|
+
schema3 do
|
8
|
+
str! :id
|
9
|
+
end
|
10
|
+
|
11
|
+
model ::<%= @class_name %>
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<% if @module_name.present? -%>
|
2
|
+
module Operations::<%= @module_name %>::<%= @class_name %>
|
3
|
+
<% else -%>
|
4
|
+
module Operations::<%= @class_name %>
|
5
|
+
<% end -%>
|
6
|
+
class Update < RailsOps::Operation::Model::Update
|
7
|
+
schema3 do
|
8
|
+
str! :id
|
9
|
+
hsh? :<%= @underscored_name %> do
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
model ::<%= @class_name %>
|
15
|
+
end
|
16
|
+
end
|
File without changes
|
@@ -70,8 +70,6 @@ module RailsOps::Mixins::Model::Authorization
|
|
70
70
|
# Cast {ActiveType::Record} classes or instances to regular AR models in order
|
71
71
|
# for cancan(can) to work properly. Classes and instances that are no active
|
72
72
|
# type records will be returned as-is.
|
73
|
-
#
|
74
|
-
# TODO: Use ModelCasting module instead?
|
75
73
|
def cast_model_for_authorization(model_class_or_instance)
|
76
74
|
if model_class_or_instance.is_a?(Class)
|
77
75
|
if model_class_or_instance.respond_to?(:extended_record_base_class)
|
@@ -80,7 +78,7 @@ module RailsOps::Mixins::Model::Authorization
|
|
80
78
|
return model_class_or_instance
|
81
79
|
end
|
82
80
|
elsif model_class_or_instance.class.respond_to?(:extended_record_base_class)
|
83
|
-
|
81
|
+
model_class_or_instance.becomes(model_class_or_instance.class.extended_record_base_class)
|
84
82
|
else
|
85
83
|
model_class_or_instance
|
86
84
|
end
|
@@ -5,15 +5,11 @@ module RailsOps
|
|
5
5
|
|
6
6
|
class_methods do
|
7
7
|
def finder_needs_type_condition?
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
def descendants
|
12
|
-
superclass.descendants
|
8
|
+
base_class.finder_needs_type_condition?
|
13
9
|
end
|
14
10
|
|
15
11
|
def name
|
16
|
-
|
12
|
+
base_class.name
|
17
13
|
end
|
18
14
|
end
|
19
15
|
end
|
data/lib/rails_ops.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'active_type'
|
1
2
|
require 'schemacop'
|
2
3
|
require 'request_store'
|
3
4
|
|
@@ -46,18 +47,6 @@ module RailsOps
|
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
49
|
-
# ---------------------------------------------------------------
|
50
|
-
# Require Gem active_type and monkey patch
|
51
|
-
# ---------------------------------------------------------------
|
52
|
-
require 'active_type'
|
53
|
-
require 'active_type/type_caster'
|
54
|
-
require 'rails_ops/patches/active_type_patch'
|
55
|
-
|
56
|
-
# ---------------------------------------------------------------
|
57
|
-
# Require Schemacop
|
58
|
-
# ---------------------------------------------------------------
|
59
|
-
require 'schemacop'
|
60
|
-
|
61
50
|
# ---------------------------------------------------------------
|
62
51
|
# Require RailsOps
|
63
52
|
# ---------------------------------------------------------------
|
@@ -84,7 +73,6 @@ require 'rails_ops/mixins/require_context.rb'
|
|
84
73
|
require 'rails_ops/mixins/routes.rb'
|
85
74
|
require 'rails_ops/mixins/schema_validation.rb'
|
86
75
|
require 'rails_ops/mixins/sub_ops.rb'
|
87
|
-
require 'rails_ops/model_casting.rb'
|
88
76
|
require 'rails_ops/model_mixins.rb'
|
89
77
|
require 'rails_ops/model_mixins/ar_extension.rb'
|
90
78
|
require 'rails_ops/model_mixins/parent_op.rb'
|