rider-kick 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +21 -25
- data/lib/generators/rider_kick/scaffold_generator.rb +11 -9
- data/lib/generators/rider_kick/structure_generator.rb +12 -10
- data/lib/generators/rider_kick/templates/db/structures/example.yaml.tt +55 -17
- data/lib/generators/rider_kick/templates/domains/core/use_cases/create.rb.tt +1 -1
- data/lib/generators/rider_kick/templates/domains/core/use_cases/destroy.rb.tt +1 -1
- data/lib/generators/rider_kick/templates/domains/core/use_cases/fetch_by_id.rb.tt +1 -1
- data/lib/generators/rider_kick/templates/domains/core/use_cases/list.rb.tt +1 -1
- data/lib/generators/rider_kick/templates/domains/core/use_cases/update.rb.tt +1 -1
- data/lib/rider_kick/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d52c99f6ea8176455670ca8ea5cc9a9c22f43b593023e2403608f414b3e2c715
|
4
|
+
data.tar.gz: 7b53c42cc3739cba6e29c1fe831454f22bc52feca1942a14212e8d48d3107193
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df231703733194422cee357e0563ab18f48820d7650ef850f5e7f575164622e6e61e8614936f0e02dfa2b49729732a93d2aa0b78987ee1dcde63b89c09750c1e
|
7
|
+
data.tar.gz: da23c273017a080b6b55fd48078e1df07410788f6e90730d02dd9025904823425f95d0067822cd2e90282bab3a10b00112a8ebe88fba63795b36a0ae6271bdfa
|
data/README.md
CHANGED
@@ -12,37 +12,28 @@ gem 'rider-kick'
|
|
12
12
|
```
|
13
13
|
|
14
14
|
And then execute:
|
15
|
-
|
15
|
+
$ rails new kotaro_minami -d=postgresql -T --skip-javascript --skip-asset-pipeline
|
16
16
|
$ bundle install
|
17
|
-
$
|
17
|
+
$ rails generate rider_kick:init
|
18
18
|
$ rails generate rider_kick:clean_arch --setup
|
19
19
|
$ rails db:drop db:create db:migrate db:seed
|
20
|
-
$ rubocop -a
|
21
20
|
|
22
21
|
## Usage
|
23
22
|
```bash
|
24
23
|
Description:
|
25
|
-
Clean Architecture generator
|
26
|
-
|
24
|
+
Clean Architecture generator
|
25
|
+
rails new kotaro_minami -d=postgresql -T --skip-javascript --skip-asset-pipeline
|
26
|
+
|
27
27
|
Example:
|
28
|
-
To Generate
|
29
|
-
bin/rails generate rider_kick:
|
28
|
+
To Generate Init:
|
29
|
+
bin/rails generate rider_kick:init
|
30
30
|
|
31
|
-
|
32
|
-
|
31
|
+
To Generate Pattern:
|
32
|
+
bin/rails generate rider_kick:clean_arch --setup
|
33
33
|
|
34
34
|
To Generate scaffold:
|
35
35
|
bin/rails generate rider_kick:scaffold Models::Contact actor:user
|
36
36
|
|
37
|
-
To undo:
|
38
|
-
bin/rails destroy rider_kick:scaffold Models::Contact actor:user
|
39
|
-
|
40
|
-
To Generate Domain:
|
41
|
-
bin/rails generate rider_kick:blank actor:user action:create scope:Contact --use_case --repository --builder --entity
|
42
|
-
|
43
|
-
To undo:
|
44
|
-
bin/rails destroy rider_kick:blank actor:user action:create scope:Contact --use_case --repository --builder --entity
|
45
|
-
|
46
37
|
```
|
47
38
|
|
48
39
|
## Philosophy
|
@@ -55,20 +46,25 @@ This structure provides helper interfaces and classes to assist in the construct
|
|
55
46
|
|
56
47
|
```
|
57
48
|
- app
|
58
|
-
-
|
59
|
-
-
|
49
|
+
- models
|
50
|
+
- models
|
60
51
|
- ...
|
61
52
|
- domains
|
62
|
-
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
53
|
+
- core
|
54
|
+
...
|
55
|
+
- entities (Contract Response)
|
56
|
+
- builder
|
57
|
+
- repositories (Business logic)
|
58
|
+
- use_cases (Just Usecase)
|
59
|
+
- utils (Class Reusable)
|
67
60
|
```
|
68
61
|
## Screaming architecture - use cases as an organisational principle
|
69
62
|
Uncle Bob suggests that your source code organisation should allow developers to easily find a listing of all use cases your application provides. Here's an example of how this might look in a this application.
|
70
63
|
```
|
71
64
|
- app
|
65
|
+
- models
|
66
|
+
- models
|
67
|
+
- ...
|
72
68
|
- domains
|
73
69
|
- core
|
74
70
|
...
|
@@ -39,22 +39,25 @@ module RiderKick
|
|
39
39
|
@actor = @structure.actor
|
40
40
|
@uploaders = @structure.uploaders || []
|
41
41
|
@search_able = @structure.search_able || []
|
42
|
-
@services = @structure.
|
43
|
-
@contract_list = @services.action_list.contract || []
|
44
|
-
@contract_fetch_by_id = @services.action_fetch_by_id.contract || []
|
45
|
-
@contract_create = @services.action_create.contract || []
|
46
|
-
@contract_update = @services.action_update.contract || []
|
47
|
-
@contract_destroy = @services.action_destroy.contract || []
|
42
|
+
@services = @structure.domains || {}
|
43
|
+
@contract_list = @services.action_list.use_case.contract || []
|
44
|
+
@contract_fetch_by_id = @services.action_fetch_by_id.use_case.contract || []
|
45
|
+
@contract_create = @services.action_create.use_case.contract || []
|
46
|
+
@contract_update = @services.action_update.use_case.contract || []
|
47
|
+
@contract_destroy = @services.action_destroy.use_case.contract || []
|
48
48
|
@skipped_fields = entity.skipped_fields || []
|
49
49
|
@custom_fields = entity.custom_fields || []
|
50
50
|
|
51
51
|
@variable_subject = model_name.split('::').last.underscore.downcase
|
52
52
|
@scope_path = resource_name.pluralize.underscore.downcase
|
53
|
+
@scope_class = @scope_path.camelize
|
53
54
|
@model_class = model_name.camelize.constantize
|
54
55
|
@subject_class = resource_name.camelize
|
55
56
|
@fields = contract_fields
|
57
|
+
@route_scope_path = @structure.controllers.route_scope.downcase rescue ''
|
58
|
+
@route_scope_class = @route_scope_path.camelize rescue ''
|
56
59
|
|
57
|
-
@type_mapping
|
60
|
+
@type_mapping = {
|
58
61
|
'uuid' => ':string',
|
59
62
|
'string' => ':string',
|
60
63
|
'text' => ':string',
|
@@ -83,11 +86,10 @@ module RiderKick
|
|
83
86
|
use_case_filename = build_usecase_filename(action, suffix)
|
84
87
|
repository_filename = build_repository_filename(action, suffix)
|
85
88
|
|
86
|
-
@scope_class = @scope_path.camelize
|
87
89
|
@use_case_class = use_case_filename.camelize
|
88
90
|
@repository_class = repository_filename.camelize
|
89
91
|
|
90
|
-
template "domains/core/use_cases/#{action + suffix}.rb.tt", File.join("#{root_path_app}/domains/core/use_cases
|
92
|
+
template "domains/core/use_cases/#{action + suffix}.rb.tt", File.join("#{root_path_app}/domains/core/use_cases/", @route_scope_path.to_s, @scope_path.to_s, "#{use_case_filename}.rb")
|
91
93
|
template "domains/core/repositories/#{action + suffix}.rb.tt", File.join("#{root_path_app}/domains/core/repositories/#{@scope_path}", "#{repository_filename}.rb")
|
92
94
|
end
|
93
95
|
|
@@ -3,7 +3,7 @@ module RiderKick
|
|
3
3
|
source_root File.expand_path('templates', __dir__)
|
4
4
|
|
5
5
|
argument :arg_model_name, type: :string, default: '', banner: 'Models::Name'
|
6
|
-
argument :arg_settings, type: :hash, default: '', banner: 'actor:user uploader_filed:assets,images,picture,document'
|
6
|
+
argument :arg_settings, type: :hash, default: '', banner: 'route_scope:dashboard actor:user uploader_filed:assets,images,picture,document'
|
7
7
|
|
8
8
|
def generate_use_case
|
9
9
|
validation!
|
@@ -21,16 +21,18 @@ module RiderKick
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def setup_variables
|
24
|
-
@variable_subject
|
25
|
-
@model_class
|
26
|
-
@subject_class
|
27
|
-
@scope_path
|
28
|
-
@scope_class
|
29
|
-
@fields
|
30
|
-
@uploaders
|
31
|
-
@actor
|
24
|
+
@variable_subject = arg_model_name.split('::').last.underscore.downcase
|
25
|
+
@model_class = arg_model_name.camelize.constantize
|
26
|
+
@subject_class = arg_model_name.split('::').last
|
27
|
+
@scope_path = @subject_class.pluralize.underscore.downcase
|
28
|
+
@scope_class = @scope_path.camelize
|
29
|
+
@fields = contract_fields
|
30
|
+
@uploaders = uploaders
|
31
|
+
@actor = arg_settings['actor'].downcase
|
32
|
+
@route_scope_path = arg_settings['route_scope'].downcase
|
33
|
+
@route_scope_class = @route_scope_path.camelize
|
32
34
|
|
33
|
-
@type_mapping
|
35
|
+
@type_mapping = {
|
34
36
|
'uuid' => ':string',
|
35
37
|
'string' => ':string',
|
36
38
|
'text' => ':string',
|
@@ -15,44 +15,82 @@ search_able:
|
|
15
15
|
- <%= field %>
|
16
16
|
<% end -%>
|
17
17
|
<% end -%>
|
18
|
-
|
18
|
+
controllers:
|
19
|
+
route_scope: <%= @route_scope_path %>
|
20
|
+
list_fields:
|
21
|
+
<% @fields.each do |field| -%>
|
22
|
+
- <%= field %>
|
23
|
+
<% end -%>
|
24
|
+
show_fields:
|
25
|
+
<% @model_class.columns.each do |field| -%>
|
26
|
+
- <%= field.name.to_s %>
|
27
|
+
<% end -%>
|
28
|
+
form_fields:
|
29
|
+
<% (@fields + @uploaders).each do |field| -%>
|
30
|
+
- <%= field %>
|
31
|
+
<% end -%>
|
32
|
+
domains:
|
19
33
|
action_list:
|
20
|
-
|
34
|
+
endpoint:
|
35
|
+
is_auth: true
|
36
|
+
is_skip: false
|
37
|
+
parameters:
|
38
|
+
use_case:
|
39
|
+
contract:
|
21
40
|
action_fetch_by_id:
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
41
|
+
endpoint:
|
42
|
+
is_auth: true
|
43
|
+
is_skip: false
|
44
|
+
parameters:
|
45
|
+
use_case:
|
46
|
+
contract:
|
47
|
+
- required(:id).filled(:string)
|
27
48
|
action_create:
|
28
|
-
|
49
|
+
endpoint:
|
50
|
+
is_auth: true
|
51
|
+
is_skip: false
|
52
|
+
parameters:
|
53
|
+
use_case:
|
54
|
+
contract:
|
29
55
|
<% (@fields + @uploaders).each do |field| -%>
|
30
56
|
<% column_type = get_column_type(field) -%>
|
31
57
|
<% dry_type = @type_mapping[column_type.to_s] || ':string' -%>
|
32
58
|
<% if @uploaders.include?(field) -%>
|
33
|
-
|
59
|
+
- optional(:<%= field %>).maybe(<%= dry_type %>)
|
34
60
|
<% else -%>
|
35
|
-
|
61
|
+
- required(:<%= field %>).filled(<%= dry_type %>)
|
36
62
|
<% end -%>
|
37
63
|
<% end -%>
|
38
64
|
action_update:
|
39
|
-
|
40
|
-
|
65
|
+
endpoint:
|
66
|
+
is_auth: true
|
67
|
+
is_skip: false
|
68
|
+
parameters:
|
69
|
+
use_case:
|
70
|
+
contract:
|
71
|
+
- required(:id).filled(:string)
|
41
72
|
<% (@fields + @uploaders).each do |field| -%>
|
42
73
|
<% column_type = get_column_type(field) -%>
|
43
74
|
<% dry_type = @type_mapping[column_type.to_s] || ':string' -%>
|
44
75
|
<% if @uploaders.include?(field) -%>
|
45
|
-
|
76
|
+
- optional(:<%= field %>).maybe(<%= dry_type %>)
|
46
77
|
<% else -%>
|
47
|
-
|
78
|
+
- optional(:<%= field %>).maybe(<%= dry_type %>)
|
48
79
|
<% end -%>
|
49
80
|
<% end -%>
|
50
81
|
action_destroy:
|
51
|
-
|
52
|
-
|
82
|
+
endpoint:
|
83
|
+
is_auth: true
|
84
|
+
is_skip: false
|
85
|
+
parameters:
|
86
|
+
use_case:
|
87
|
+
contract:
|
88
|
+
- required(:id).filled(:string)
|
53
89
|
entity:
|
54
90
|
skipped_fields:
|
55
91
|
- id
|
56
92
|
- created_at
|
57
93
|
- updated_at
|
58
|
-
|
94
|
+
<% if @model_class.columns.map(&:name).include?(:type) -%>
|
95
|
+
- type
|
96
|
+
<% end -%>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
class Core::UseCases::<%= @scope_class
|
3
|
+
class Core::UseCases::<%= [@route_scope_class, @scope_class, @use_case_class].join("::") %> < RiderKick::UseCases::AbstractUseCase
|
4
4
|
contract do
|
5
5
|
params(Core::UseCases::Contract::Default.new.call) do
|
6
6
|
<% @contract_create.each do |field| -%>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
class Core::UseCases::<%= @scope_class
|
3
|
+
class Core::UseCases::<%= [@route_scope_class, @scope_class, @use_case_class].join("::") %> < RiderKick::UseCases::AbstractUseCase
|
4
4
|
contract do
|
5
5
|
params(Core::UseCases::Contract::Default.new.call) do
|
6
6
|
<% @contract_destroy.each do |field| -%>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
class Core::UseCases::<%= @scope_class
|
3
|
+
class Core::UseCases::<%= [@route_scope_class, @scope_class, @use_case_class].join("::") %> < RiderKick::UseCases::AbstractUseCase
|
4
4
|
contract do
|
5
5
|
params(Core::UseCases::Contract::Default.new.call) do
|
6
6
|
<% @contract_fetch_by_id.each do |field| -%>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
class Core::UseCases::<%= @scope_class
|
3
|
+
class Core::UseCases::<%= [@route_scope_class, @scope_class, @use_case_class].join("::") %> < RiderKick::UseCases::AbstractUseCase
|
4
4
|
contract do
|
5
5
|
params(Core::UseCases::Contract::Default.new.call, Core::UseCases::Contract::Pagination.new.call) do
|
6
6
|
<% @contract_list.each do |field| -%>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
class Core::UseCases::<%= @scope_class
|
3
|
+
class Core::UseCases::<%= [@route_scope_class, @scope_class, @use_case_class].join("::") %> < RiderKick::UseCases::AbstractUseCase
|
4
4
|
contract do
|
5
5
|
params(Core::UseCases::Contract::Default.new.call) do
|
6
6
|
<% @contract_update.each do |field| -%>
|
data/lib/rider_kick/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rider-kick
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kotaro Minami
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-matcher
|