rider-kick 0.0.1 → 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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +34 -9
  3. data/lib/generators/rider_kick/USAGE +12 -0
  4. data/lib/generators/rider_kick/clean_arch_generator.rb +160 -0
  5. data/lib/generators/rider_kick/init_generator.rb +15 -0
  6. data/lib/generators/rider_kick/scaffold_generator.rb +125 -0
  7. data/lib/generators/rider_kick/structure_generator.rb +77 -0
  8. data/lib/generators/rider_kick/templates/.gitignore +57 -0
  9. data/lib/generators/rider_kick/templates/.rspec +5 -0
  10. data/lib/generators/rider_kick/templates/.rubocop.yml +1141 -0
  11. data/lib/generators/rider_kick/templates/README.md +69 -0
  12. data/lib/generators/rider_kick/templates/config/database.yml +21 -0
  13. data/lib/generators/rider_kick/templates/config/initializers/clean_archithecture.rb.tt +10 -0
  14. data/lib/generators/rider_kick/templates/config/initializers/generators.rb.tt +14 -0
  15. data/lib/generators/rider_kick/templates/config/initializers/hashie.rb.tt +16 -0
  16. data/lib/generators/rider_kick/templates/config/initializers/pagy.rb.tt +13 -0
  17. data/lib/generators/rider_kick/templates/config/initializers/rider_kick.rb +3 -0
  18. data/lib/generators/rider_kick/templates/config/initializers/version.rb.tt +6 -0
  19. data/lib/generators/rider_kick/templates/config/initializers/zeitwerk.rb.tt +3 -0
  20. data/lib/generators/rider_kick/templates/db/migrate/20220613145533_init_database.rb +5 -0
  21. data/lib/generators/rider_kick/templates/db/structures/example.yaml.tt +96 -0
  22. data/lib/generators/rider_kick/templates/domains/core/builders/builder.rb.tt +14 -0
  23. data/lib/generators/rider_kick/templates/domains/core/builders/error.rb.tt +5 -0
  24. data/lib/generators/rider_kick/templates/domains/core/builders/pagination.rb.tt +14 -0
  25. data/lib/generators/rider_kick/templates/domains/core/entities/entity.rb.tt +9 -0
  26. data/lib/generators/rider_kick/templates/domains/core/entities/error.rb.tt +7 -0
  27. data/lib/generators/rider_kick/templates/domains/core/entities/pagination.rb.tt +8 -0
  28. data/lib/generators/rider_kick/templates/domains/core/repositories/abstract_repository.rb.tt +51 -0
  29. data/lib/generators/rider_kick/templates/domains/core/repositories/create.rb.tt +15 -0
  30. data/lib/generators/rider_kick/templates/domains/core/repositories/destroy.rb.tt +16 -0
  31. data/lib/generators/rider_kick/templates/domains/core/repositories/fetch_by_id.rb.tt +13 -0
  32. data/lib/generators/rider_kick/templates/domains/core/repositories/list.rb.tt +19 -0
  33. data/lib/generators/rider_kick/templates/domains/core/repositories/update.rb.tt +23 -0
  34. data/lib/generators/rider_kick/templates/domains/core/use_cases/contract/default.rb.tt +17 -0
  35. data/lib/generators/rider_kick/templates/domains/core/use_cases/contract/pagination.rb.tt +15 -0
  36. data/lib/generators/rider_kick/templates/domains/core/use_cases/create.rb.tt +18 -0
  37. data/lib/generators/rider_kick/templates/domains/core/use_cases/destroy.rb.tt +18 -0
  38. data/lib/generators/rider_kick/templates/domains/core/use_cases/fetch_by_id.rb.tt +18 -0
  39. data/lib/generators/rider_kick/templates/domains/core/use_cases/get_version.rb.tt +17 -0
  40. data/lib/generators/rider_kick/templates/domains/core/use_cases/list.rb.tt +18 -0
  41. data/lib/generators/rider_kick/templates/domains/core/use_cases/update.rb.tt +18 -0
  42. data/lib/generators/rider_kick/templates/domains/core/utils/request_methods.rb.tt +81 -0
  43. data/lib/generators/rider_kick/templates/env.development +14 -0
  44. data/lib/generators/rider_kick/templates/env.production +14 -0
  45. data/lib/generators/rider_kick/templates/env.test +14 -0
  46. data/lib/generators/rider_kick/templates/spec/fixtures/sample.pdf +5 -0
  47. data/lib/generators/rider_kick/templates/spec/rails_helper.rb +87 -0
  48. data/lib/generators/rider_kick/templates/spec/support/file_stuber.rb +13 -0
  49. data/lib/generators/rider_kick/templates/spec/support/repository_stubber.rb +10 -0
  50. data/lib/rider-kick.rb +3 -3
  51. data/lib/rider_kick/builders/abstract_active_record_entity_builder.rb +23 -21
  52. data/lib/rider_kick/builders/abstract_active_record_entity_builder_spec.rb +116 -0
  53. data/lib/rider_kick/configuration.rb +29 -0
  54. data/lib/rider_kick/matchers/use_case_result_spec.rb +1 -0
  55. data/lib/rider_kick/types.rb +0 -3
  56. data/lib/rider_kick/version.rb +1 -1
  57. metadata +52 -4
  58. data/sig/rider_kick.rbs +0 -4
@@ -0,0 +1,69 @@
1
+ ## Setup project
2
+
3
+ ### Init Project
4
+ ```bash
5
+ $ cp env.example .env.development
6
+ $ bundle install
7
+ $ rails db:create
8
+ $ rails db:migrate
9
+ $ rails db:seed
10
+ ```
11
+ ### Run Server
12
+ ```bash
13
+ $ rails s -b 0.0.0.0 -e development
14
+ # open new tab then run
15
+ # open your browser then serve to http://0.0.0.0:3000
16
+ ```
17
+
18
+ ### Run Console
19
+ ```bash
20
+ $ rails console
21
+ (dev)> use_case = Core::UseCases::GetVersion
22
+ (dev)> contract = use_case.contract!({})
23
+ (dev)> result = use_case.new(contract).result
24
+ => Success({:version=>"v1"}) # success
25
+ (dev)> result.success?
26
+ => true
27
+ (dev)> result.success
28
+ => {:version=>"0.0.1"}
29
+ ```
30
+
31
+ Project Structure
32
+ ## Clean Architecture
33
+ This structure provides helper interfaces and classes to assist in the construction of application with Clean Architecture, as described in Robert Martin's seminal book.
34
+
35
+ ```
36
+ - app
37
+ - domains
38
+ - core
39
+ - entities (Contract Response)
40
+ - builder
41
+ - repositories (Business logic)
42
+ - use_cases (Just Usecase)
43
+ - utils (Class Reusable)
44
+ ```
45
+ ## Screaming architecture - use cases as an organisational principle
46
+ 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.
47
+ ```
48
+ - app
49
+ - domains
50
+ - core
51
+ ...
52
+ - usecase
53
+ - retail_customer_opens_bank_account.rb
54
+ - retail_customer_makes_deposit.rb
55
+ - ...
56
+ ```
57
+ Note that the use case name contains:
58
+
59
+ - the user role
60
+ - the action
61
+ - the (sometimes implied) subject
62
+ ```ruby
63
+ [user role][action][subject].rb
64
+ # retail_customer_opens_bank_account.rb
65
+ # admin_fetch_info.rb [specific usecase]
66
+ # fetch_info.rb [generic usecase] every role can access it
67
+ ```
68
+
69
+ Happy Coding!
@@ -0,0 +1,21 @@
1
+ default: &default
2
+ adapter: postgresql
3
+ encoding: unicode
4
+ pool: <%%= ENV.fetch("DATABASE_POOL") { 50 } %>
5
+ database: <%%= ENV["DATABASE_NAME"] %>
6
+ username: <%%= ENV["DATABASE_USERNAME"] %>
7
+ password: <%%= ENV["DATABASE_PASSWORD"] %>
8
+ host: <%%= ENV['DATABASE_HOSTNAME'] %>
9
+ port: <%%= ENV['DATABASE_PORT'].to_i %>
10
+
11
+
12
+ production:
13
+ primary:
14
+ <<: *default
15
+
16
+ development:
17
+ primary:
18
+ <<: *default
19
+
20
+ test:
21
+ <<: *default
@@ -0,0 +1,10 @@
1
+ # typed: ignore
2
+ # frozen_string_literal: true
3
+
4
+ require 'dry/monads/all'
5
+ require 'dry-types'
6
+ module Types
7
+ include Dry.Types()
8
+ File = Types.Instance(::File) | Types.Instance(ActionDispatch::Http::UploadedFile) | Types.Instance(Rack::Test::UploadedFile)
9
+ public_constant :File
10
+ end
@@ -0,0 +1,14 @@
1
+ Rails.application.config.generators do |gs|
2
+ gs.orm :active_record, primary_key_type: :uuid
3
+ gs.fixture_replacement :factory_bot
4
+ gs.assets = false
5
+ gs.helper = false
6
+ gs.test_framework :rspec,
7
+ fixtures: false,
8
+ view_specs: false,
9
+ model_specs: false,
10
+ helper_specs: false,
11
+ routing_specs: false,
12
+ request_specs: false,
13
+ controller_specs: false
14
+ end
@@ -0,0 +1,16 @@
1
+ as_attributes = <<-RUBY
2
+ def attributes
3
+ ActiveSupport::HashWithIndifferentAccess.new(self.as_json).symbolize_keys
4
+ end
5
+ RUBY
6
+
7
+ to_methods = <<-RUBY
8
+ def to_mash
9
+ Hashie::Mash.new(self)
10
+ end
11
+ RUBY
12
+
13
+ Hash.class_eval(as_attributes)
14
+ Hash.class_eval(to_methods)
15
+ Hashie::Mash.class_eval(as_attributes)
16
+ ActiveSupport::HashWithIndifferentAccess.class_eval(as_attributes)
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ # Optionally override some pagy default with your own in the pagy initializer
5
+ Pagy::DEFAULT[:limit] = 30 # items per page
6
+ Pagy::DEFAULT[:size] = 9 # nav bar links
7
+ # Better user experience handled automatically
8
+ require 'pagy/extras/overflow'
9
+ Pagy::DEFAULT[:overflow] = :empty_page
10
+ require 'pagy/extras/elasticsearch_rails'
11
+ require 'pagy/extras/array'
12
+
13
+ include Pagy::Backend
@@ -0,0 +1,3 @@
1
+ RiderKick.setup do |config|
2
+ config.scope_owner_column = :organization_id
3
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module <%= Rails.application.class.module_parent_name %>
4
+ VERSION = '0.0.1'
5
+ public_constant :VERSION
6
+ end
@@ -0,0 +1,3 @@
1
+ Rails.autoloaders.each do |autoloader|
2
+ autoloader.ignore(Rails.root.join('**', '*_spec.rb'))
3
+ end
@@ -0,0 +1,5 @@
1
+ class InitDatabase < ActiveRecord::Migration[7.2]
2
+ def change
3
+ enable_extension 'pgcrypto'
4
+ end
5
+ end
@@ -0,0 +1,96 @@
1
+ model: <%= @model_class %>
2
+ resource_name: <%= @scope_path %>
3
+ actor: <%= @actor %>
4
+ fields:
5
+ <% @model_class.columns.each do |field| -%>
6
+ - <%= field.name.to_s %>
7
+ <% end -%>
8
+ uploaders:
9
+ <% @uploaders.each do |field| -%>
10
+ - <%= field %>
11
+ <% end -%>
12
+ search_able:
13
+ <% contract_fields.each do |field| -%>
14
+ <% if ['title', 'name'].include?(field) -%>
15
+ - <%= field %>
16
+ <% end -%>
17
+ <% end -%>
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:
33
+ action_list:
34
+ endpoint:
35
+ is_auth: true
36
+ is_skip: false
37
+ parameters:
38
+ use_case:
39
+ contract:
40
+ action_fetch_by_id:
41
+ endpoint:
42
+ is_auth: true
43
+ is_skip: false
44
+ parameters:
45
+ use_case:
46
+ contract:
47
+ - required(:id).filled(:string)
48
+ action_create:
49
+ endpoint:
50
+ is_auth: true
51
+ is_skip: false
52
+ parameters:
53
+ use_case:
54
+ contract:
55
+ <% (@fields + @uploaders).each do |field| -%>
56
+ <% column_type = get_column_type(field) -%>
57
+ <% dry_type = @type_mapping[column_type.to_s] || ':string' -%>
58
+ <% if @uploaders.include?(field) -%>
59
+ - optional(:<%= field %>).maybe(<%= dry_type %>)
60
+ <% else -%>
61
+ - required(:<%= field %>).filled(<%= dry_type %>)
62
+ <% end -%>
63
+ <% end -%>
64
+ action_update:
65
+ endpoint:
66
+ is_auth: true
67
+ is_skip: false
68
+ parameters:
69
+ use_case:
70
+ contract:
71
+ - required(:id).filled(:string)
72
+ <% (@fields + @uploaders).each do |field| -%>
73
+ <% column_type = get_column_type(field) -%>
74
+ <% dry_type = @type_mapping[column_type.to_s] || ':string' -%>
75
+ <% if @uploaders.include?(field) -%>
76
+ - optional(:<%= field %>).maybe(<%= dry_type %>)
77
+ <% else -%>
78
+ - optional(:<%= field %>).maybe(<%= dry_type %>)
79
+ <% end -%>
80
+ <% end -%>
81
+ action_destroy:
82
+ endpoint:
83
+ is_auth: true
84
+ is_skip: false
85
+ parameters:
86
+ use_case:
87
+ contract:
88
+ - required(:id).filled(:string)
89
+ entity:
90
+ skipped_fields:
91
+ - id
92
+ - created_at
93
+ - updated_at
94
+ <% if @model_class.columns.map(&:name).include?(:type) -%>
95
+ - type
96
+ <% end -%>
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::Builders::<%= @subject_class %> < RiderKick::Builders::AbstractActiveRecordEntityBuilder
4
+ acts_as_builder_for_entity Core::Entities::<%= @subject_class%>
5
+ <% if @uploaders.present? -%>
6
+ def attributes_for_entity
7
+ {
8
+ <% @uploaders.each_with_index do |upload, index| -%>
9
+ <%= upload %>: (Rails.application.routes.url_helpers.polymorphic_url(params.<%= upload %>) rescue '')<%= ',' if index < @uploaders.size - 1 %>
10
+ <% end -%>
11
+ }
12
+ end
13
+ <% end -%>
14
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::Builders::Error < RiderKick::Builders::AbstractActiveRecordEntityBuilder
4
+ acts_as_builder_for_entity Core::Entities::Error
5
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::Builders::Pagination < RiderKick::Builders::AbstractActiveRecordEntityBuilder
4
+ acts_as_builder_for_entity Core::Entities::Pagination
5
+
6
+ def attributes_for_entity
7
+ {
8
+ total_count: params[:count],
9
+ page: params.page,
10
+ per_page: params.limit,
11
+ page_count: params.last
12
+ }
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::Entities::<%= @subject_class %> < Dry::Struct
4
+ <% (['id'] + @fields + @uploaders + ['created_at', 'updated_at']).each do |field| -%>
5
+ <% column_type = get_column_type(field) -%>
6
+ <% dry_type = @entity_type_mapping[column_type.to_s] || 'Types::Strict::String' -%>
7
+ attribute :<%= field %>, <%= dry_type %>
8
+ <% end -%>
9
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::Entities::Error < Dry::Struct
4
+ attribute :attribute, Types::Strict::String
5
+ attribute :type, Types::Strict::String
6
+ attribute :options, Types::Hash.optional
7
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::Entities::Pagination < Dry::Struct
4
+ attribute :total_count, Types::Strict::Integer
5
+ attribute :page, Types::Strict::Integer
6
+ attribute :per_page, Types::Strict::Integer
7
+ attribute :page_count, Types::Strict::Integer
8
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::Repositories::AbstractRepository
4
+ include Dry::Monads[:result, :do]
5
+
6
+ def http
7
+ extend(Core::Utils::RequestMethods)
8
+ end
9
+
10
+ def parse_response(response)
11
+ begin
12
+ res = JSON.parse(response.body)
13
+ rescue => e
14
+ return Failure e
15
+ end
16
+ unless ['200', '201', '202'].include?(response.code.to_s)
17
+ return Failure Hashie::Mash.new(res)
18
+ end
19
+ Success Hashie::Mash.new(res)
20
+ end
21
+
22
+ def error_messages_for(record)
23
+ record.errors.to_a.join(', ')
24
+ end
25
+
26
+ def build_errors(resource)
27
+ errors = []
28
+ resource.errors.each do |error|
29
+ errors << Core::Builders::Error.new(error.as_json).build
30
+ end
31
+ errors
32
+ end
33
+
34
+ def prepare!(params, sanitize: true)
35
+ if sanitize
36
+ Hashie::Mash.new(params.reject { |_, v| v.nil? || (v.is_a?(String) && v.blank?) })
37
+ else
38
+ Hashie::Mash.new(params)
39
+ end
40
+ end
41
+
42
+ def paginate!(pagy)
43
+ Core::Builders::Pagination.new(Hashie::Mash.new(pagy.as_json)).build
44
+ end
45
+
46
+ def build_pagination_variable!(params)
47
+ @per_page = params[:per_page] || Pagy::DEFAULT[:limit]
48
+ @page = params[:page] || Pagy::DEFAULT[:page]
49
+ @search = params[:search]
50
+ end
51
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::Repositories::<%= @scope_class %>::<%= @repository_class %> < Core::Repositories::AbstractRepository
4
+ def initialize(params: {})
5
+ @params = prepare! params, sanitize: true
6
+ end
7
+
8
+ def call(builder: true)
9
+ resource = <%= @model_class %>.new(@params.to_h)
10
+ unless resource.save
11
+ return Failure build_errors(resource)
12
+ end
13
+ Success Core::Builders::<%= @subject_class %>.new(resource).build
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::Repositories::<%= @scope_class %>::<%= @repository_class %> < Core::Repositories::AbstractRepository
4
+ def initialize(id:)
5
+ @id = id
6
+ end
7
+
8
+ def call(builder: true)
9
+ resource = <%= @model_class %>.find_by(id: @id)
10
+ return Failure '<%= @subject_class %> not found' unless resource.present?
11
+ unless resource.destroy
12
+ return Failure build_errors(resource)
13
+ end
14
+ Success '<%= @subject_class%> Destroyed.'
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::Repositories::<%= @scope_class %>::<%= @repository_class %> < Core::Repositories::AbstractRepository
4
+ def initialize(id:)
5
+ @id = id
6
+ end
7
+
8
+ def call(builder: true)
9
+ resource = <%= @model_class %>.find_by(id: @id)
10
+ return Failure '<%= @subject_class %> not found' unless resource.present?
11
+ Success Core::Builders::<%= @subject_class %>.new(resource).build
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::Repositories::<%= @scope_class %>::<%= @repository_class%> < Core::Repositories::AbstractRepository
4
+ def initialize(params:)
5
+ @params = prepare! params, sanitize: true
6
+ build_pagination_variable! @params
7
+ end
8
+
9
+ def call(builder: true)
10
+ resources = <%= @model_class %>
11
+ if @search.present?
12
+ resources = resources.where('<%= @search_able.map { |field| "LOWER(#{field}) LIKE :search" }.join(' OR ')%>', search: "%#{search}%")
13
+ end
14
+ return Success [] unless resources.present?
15
+ pagy, results = pagy(resources.order(created_at: :desc), limit: @per_page, page: @page)
16
+ response = results.map { |result| Core::Builders::<%= @subject_class %>.new(result).build }
17
+ Success Hashie::Mash.new(response: response, meta: paginate!(pagy))
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::Repositories::<%= @scope_class %>::<%= @repository_class %> < Core::Repositories::AbstractRepository
4
+ def initialize(id:, params: {})
5
+ @id = id
6
+ @params = prepare! params, sanitize: true
7
+ end
8
+
9
+ def call(builder: true)
10
+ resource = <%= @model_class %>.find_by(id: @id)
11
+ return Failure '<%= @subject_class %> not found' unless resource.present?
12
+ <% if @uploaders.present? -%>
13
+ # Remove the existing images if a new one is being uploaded
14
+ <% @uploaders.each do |uplaoder| -%>
15
+ resource.<%=uplaoder %>.purge if @params.<%=uplaoder %>.present? && resource.<%=uplaoder %>.attached?
16
+ <% end -%>
17
+ <% end -%>
18
+ unless resource.update(@params.to_h)
19
+ return Failure build_errors(resource)
20
+ end
21
+ Success Core::Builders::<%= @subject_class %>.new(resource).build
22
+ end
23
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::UseCases::Contract::Default
4
+ def call
5
+ default
6
+ end
7
+
8
+ private
9
+
10
+ def default
11
+ Dry::Schema.Params do
12
+ <% if RiderKick.scope_owner_column.present? -%>
13
+ required(:<%=RiderKick.scope_owner_column%> ).filled(:string)
14
+ <% end-%>
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ class Core::UseCases::Contract::Pagination
2
+ def call
3
+ pagination
4
+ end
5
+
6
+ private
7
+
8
+ def pagination
9
+ Dry::Schema.Params do
10
+ optional(:page).maybe(:integer)
11
+ optional(:per_page).maybe(:integer)
12
+ optional(:search).maybe(:string)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::UseCases::<%= [@route_scope_class, @scope_class, @use_case_class].join("::") %> < RiderKick::UseCases::AbstractUseCase
4
+ contract do
5
+ params(Core::UseCases::Contract::Default.new.call) do
6
+ <% @contract_create.each do |field| -%>
7
+ <%= field %>
8
+ <% end -%>
9
+ end
10
+ end
11
+ # Set specific return monads at method 'result'
12
+ include Dry::Monads::Do.for(:result)
13
+
14
+ def result
15
+ params = yield build_parameter!
16
+ Core::Repositories::<%= @scope_class%>::<%= @repository_class%>.new(params: params).call(builder: true)
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::UseCases::<%= [@route_scope_class, @scope_class, @use_case_class].join("::") %> < RiderKick::UseCases::AbstractUseCase
4
+ contract do
5
+ params(Core::UseCases::Contract::Default.new.call) do
6
+ <% @contract_destroy.each do |field| -%>
7
+ <%= field %>
8
+ <% end -%>
9
+ end
10
+ end
11
+ # Set specific return monads at method 'result'
12
+ include Dry::Monads::Do.for(:result)
13
+
14
+ def result
15
+ params = yield build_parameter!
16
+ Core::Repositories::<%= @scope_class%>::<%= @repository_class%>.new(id: params.id).call(builder: true)
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::UseCases::<%= [@route_scope_class, @scope_class, @use_case_class].join("::") %> < RiderKick::UseCases::AbstractUseCase
4
+ contract do
5
+ params(Core::UseCases::Contract::Default.new.call) do
6
+ <% @contract_fetch_by_id.each do |field| -%>
7
+ <%= field %>
8
+ <% end -%>
9
+ end
10
+ end
11
+ # Set specific return monads at method 'result'
12
+ include Dry::Monads::Do.for(:result)
13
+
14
+ def result
15
+ params = yield build_parameter!
16
+ Core::Repositories::<%= @scope_class%>::<%= @repository_class%>.new(id: params.id).call(builder: true)
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::UseCases::GetVersion < RiderKick::UseCases::AbstractUseCase
4
+ contract do
5
+ params do
6
+ # required(:version).filled(:string)
7
+ end
8
+ end
9
+ # Set specific return monads at method 'result'
10
+ include Dry::Monads::Do.for(:result)
11
+
12
+ def result
13
+ params = yield build_parameter!
14
+ response = { version: <%= Rails.application.class.module_parent_name %>::VERSION }
15
+ Success response
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::UseCases::<%= [@route_scope_class, @scope_class, @use_case_class].join("::") %> < RiderKick::UseCases::AbstractUseCase
4
+ contract do
5
+ params(Core::UseCases::Contract::Default.new.call, Core::UseCases::Contract::Pagination.new.call) do
6
+ <% @contract_list.each do |field| -%>
7
+ <%= field %>
8
+ <% end -%>
9
+ end
10
+ end
11
+ # Set specific return monads at method 'result'
12
+ include Dry::Monads::Do.for(:result)
13
+
14
+ def result
15
+ params = yield build_parameter!
16
+ Core::Repositories::<%= @scope_class%>::<%= @repository_class%>.new(params: params).call(builder: true)
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Core::UseCases::<%= [@route_scope_class, @scope_class, @use_case_class].join("::") %> < RiderKick::UseCases::AbstractUseCase
4
+ contract do
5
+ params(Core::UseCases::Contract::Default.new.call) do
6
+ <% @contract_update.each do |field| -%>
7
+ <%= field %>
8
+ <% end -%>
9
+ end
10
+ end
11
+ # Set specific return monads at method 'result'
12
+ include Dry::Monads::Do.for(:result)
13
+
14
+ def result
15
+ params = yield build_parameter!
16
+ Core::Repositories::<%= @scope_class%>::<%= @repository_class%>.new(id: params.id, params: params.except(:id)).call(builder: true)
17
+ end
18
+ end