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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2202ce45cec1f54ec7ad7d7e7cea9f9cbca29644d5ea99500d5b5168198b1f55
4
- data.tar.gz: 0b79036ead139ee15e1d3f7180be8c3c98b16453cbe9166d9185fa9eb5397d8f
3
+ metadata.gz: d52c99f6ea8176455670ca8ea5cc9a9c22f43b593023e2403608f414b3e2c715
4
+ data.tar.gz: 7b53c42cc3739cba6e29c1fe831454f22bc52feca1942a14212e8d48d3107193
5
5
  SHA512:
6
- metadata.gz: 45a3430a608c8ed6509f56127082c9f54545f6af7fd19105d500d1ecf9f5ff32f48f988208c1b877b52720b712b15568c85d107f5f056eee29e782b1b214d0b7
7
- data.tar.gz: d7296b1a448f475f8c6b0a980530e2b535a7ac54e364d4ca72719012f59f6f2a6a906ef30b0c0704f1fd402c15f558fcd2fa4059ce372eeb7a7c4d6bb24b7d51
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
- $ bundle binstubs rider-kick
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 Structure:
29
- bin/rails generate rider_kick:clean_arch --setup
28
+ To Generate Init:
29
+ bin/rails generate rider_kick:init
30
30
 
31
- To undo:
32
- bin/rails destroy rider_kick:clean_arch --setup
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
- - services
59
- - api
49
+ - models
50
+ - models
60
51
  - ...
61
52
  - domains
62
- - entities (Contract Response)
63
- - builder
64
- - repositories (Business logic)
65
- - use_cases (Just Usecase)
66
- - utils (Class Reusable)
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.services || {}
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/#{@scope_path}", "#{use_case_filename}.rb")
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 = 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
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
- services:
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
- contract:
34
+ endpoint:
35
+ is_auth: true
36
+ is_skip: false
37
+ parameters:
38
+ use_case:
39
+ contract:
21
40
  action_fetch_by_id:
22
- is_auth: true
23
- is_skip_endpoint: false
24
- use_case_class: <%= "#{@actor}_fetch_#{@variable_subject}_by_id".camelize %>
25
- contract:
26
- - required(:id).filled(:string)
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
- contract:
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
- - optional(:<%= field %>).maybe(<%= dry_type %>)
59
+ - optional(:<%= field %>).maybe(<%= dry_type %>)
34
60
  <% else -%>
35
- - required(:<%= field %>).filled(<%= dry_type %>)
61
+ - required(:<%= field %>).filled(<%= dry_type %>)
36
62
  <% end -%>
37
63
  <% end -%>
38
64
  action_update:
39
- contract:
40
- - required(:id).filled(:string)
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
- - optional(:<%= field %>).maybe(<%= dry_type %>)
76
+ - optional(:<%= field %>).maybe(<%= dry_type %>)
46
77
  <% else -%>
47
- - optional(:<%= field %>).maybe(<%= dry_type %>)
78
+ - optional(:<%= field %>).maybe(<%= dry_type %>)
48
79
  <% end -%>
49
80
  <% end -%>
50
81
  action_destroy:
51
- contract:
52
- - required(:id).filled(:string)
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
- - type
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 %>::<%= @use_case_class %> < RiderKick::UseCases::AbstractUseCase
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 %>::<%= @use_case_class %> < RiderKick::UseCases::AbstractUseCase
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 %>::<%= @use_case_class %> < RiderKick::UseCases::AbstractUseCase
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 %>::<%= @use_case_class %> < RiderKick::UseCases::AbstractUseCase
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 %>::<%= @use_case_class %> < RiderKick::UseCases::AbstractUseCase
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| -%>
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RiderKick
4
- VERSION = '0.0.2'
4
+ VERSION = '0.0.3'
5
5
  public_constant :VERSION
6
6
  end
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.2
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-15 00:00:00.000000000 Z
11
+ date: 2024-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-matcher