rider-kick 0.0.1 → 0.0.2
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 +29 -0
- data/lib/generators/rider_kick/USAGE +12 -0
- data/lib/generators/rider_kick/clean_arch_generator.rb +160 -0
- data/lib/generators/rider_kick/init_generator.rb +15 -0
- data/lib/generators/rider_kick/scaffold_generator.rb +123 -0
- data/lib/generators/rider_kick/structure_generator.rb +75 -0
- data/lib/generators/rider_kick/templates/.gitignore +57 -0
- data/lib/generators/rider_kick/templates/.rspec +5 -0
- data/lib/generators/rider_kick/templates/.rubocop.yml +1141 -0
- data/lib/generators/rider_kick/templates/README.md +69 -0
- data/lib/generators/rider_kick/templates/config/database.yml +21 -0
- data/lib/generators/rider_kick/templates/config/initializers/clean_archithecture.rb.tt +10 -0
- data/lib/generators/rider_kick/templates/config/initializers/generators.rb.tt +14 -0
- data/lib/generators/rider_kick/templates/config/initializers/hashie.rb.tt +16 -0
- data/lib/generators/rider_kick/templates/config/initializers/pagy.rb.tt +13 -0
- data/lib/generators/rider_kick/templates/config/initializers/rider_kick.rb +3 -0
- data/lib/generators/rider_kick/templates/config/initializers/version.rb.tt +6 -0
- data/lib/generators/rider_kick/templates/config/initializers/zeitwerk.rb.tt +3 -0
- data/lib/generators/rider_kick/templates/db/migrate/20220613145533_init_database.rb +5 -0
- data/lib/generators/rider_kick/templates/db/structures/example.yaml.tt +58 -0
- data/lib/generators/rider_kick/templates/domains/core/builders/builder.rb.tt +14 -0
- data/lib/generators/rider_kick/templates/domains/core/builders/error.rb.tt +5 -0
- data/lib/generators/rider_kick/templates/domains/core/builders/pagination.rb.tt +14 -0
- data/lib/generators/rider_kick/templates/domains/core/entities/entity.rb.tt +9 -0
- data/lib/generators/rider_kick/templates/domains/core/entities/error.rb.tt +7 -0
- data/lib/generators/rider_kick/templates/domains/core/entities/pagination.rb.tt +8 -0
- data/lib/generators/rider_kick/templates/domains/core/repositories/abstract_repository.rb.tt +51 -0
- data/lib/generators/rider_kick/templates/domains/core/repositories/create.rb.tt +15 -0
- data/lib/generators/rider_kick/templates/domains/core/repositories/destroy.rb.tt +16 -0
- data/lib/generators/rider_kick/templates/domains/core/repositories/fetch_by_id.rb.tt +13 -0
- data/lib/generators/rider_kick/templates/domains/core/repositories/list.rb.tt +19 -0
- data/lib/generators/rider_kick/templates/domains/core/repositories/update.rb.tt +23 -0
- data/lib/generators/rider_kick/templates/domains/core/use_cases/contract/default.rb.tt +17 -0
- data/lib/generators/rider_kick/templates/domains/core/use_cases/contract/pagination.rb.tt +15 -0
- data/lib/generators/rider_kick/templates/domains/core/use_cases/create.rb.tt +18 -0
- data/lib/generators/rider_kick/templates/domains/core/use_cases/destroy.rb.tt +18 -0
- data/lib/generators/rider_kick/templates/domains/core/use_cases/fetch_by_id.rb.tt +18 -0
- data/lib/generators/rider_kick/templates/domains/core/use_cases/get_version.rb.tt +17 -0
- data/lib/generators/rider_kick/templates/domains/core/use_cases/list.rb.tt +18 -0
- data/lib/generators/rider_kick/templates/domains/core/use_cases/update.rb.tt +18 -0
- data/lib/generators/rider_kick/templates/domains/core/utils/request_methods.rb.tt +81 -0
- data/lib/generators/rider_kick/templates/env.development +14 -0
- data/lib/generators/rider_kick/templates/env.production +14 -0
- data/lib/generators/rider_kick/templates/env.test +14 -0
- data/lib/generators/rider_kick/templates/spec/fixtures/sample.pdf +5 -0
- data/lib/generators/rider_kick/templates/spec/rails_helper.rb +87 -0
- data/lib/generators/rider_kick/templates/spec/support/file_stuber.rb +13 -0
- data/lib/generators/rider_kick/templates/spec/support/repository_stubber.rb +10 -0
- data/lib/rider-kick.rb +3 -3
- data/lib/rider_kick/builders/abstract_active_record_entity_builder.rb +23 -21
- data/lib/rider_kick/builders/abstract_active_record_entity_builder_spec.rb +116 -0
- data/lib/rider_kick/configuration.rb +29 -0
- data/lib/rider_kick/matchers/use_case_result_spec.rb +1 -0
- data/lib/rider_kick/types.rb +0 -3
- data/lib/rider_kick/version.rb +1 -1
- metadata +52 -4
- data/sig/rider_kick.rbs +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2202ce45cec1f54ec7ad7d7e7cea9f9cbca29644d5ea99500d5b5168198b1f55
|
4
|
+
data.tar.gz: 0b79036ead139ee15e1d3f7180be8c3c98b16453cbe9166d9185fa9eb5397d8f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45a3430a608c8ed6509f56127082c9f54545f6af7fd19105d500d1ecf9f5ff32f48f988208c1b877b52720b712b15568c85d107f5f056eee29e782b1b214d0b7
|
7
|
+
data.tar.gz: d7296b1a448f475f8c6b0a980530e2b535a7ac54e364d4ca72719012f59f6f2a6a906ef30b0c0704f1fd402c15f558fcd2fa4059ce372eeb7a7c4d6bb24b7d51
|
data/README.md
CHANGED
@@ -15,6 +15,35 @@ And then execute:
|
|
15
15
|
|
16
16
|
$ bundle install
|
17
17
|
$ bundle binstubs rider-kick
|
18
|
+
$ rails generate rider_kick:clean_arch --setup
|
19
|
+
$ rails db:drop db:create db:migrate db:seed
|
20
|
+
$ rubocop -a
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
```bash
|
24
|
+
Description:
|
25
|
+
Clean Architecture generator
|
26
|
+
|
27
|
+
Example:
|
28
|
+
To Generate Structure:
|
29
|
+
bin/rails generate rider_kick:clean_arch --setup
|
30
|
+
|
31
|
+
To undo:
|
32
|
+
bin/rails destroy rider_kick:clean_arch --setup
|
33
|
+
|
34
|
+
To Generate scaffold:
|
35
|
+
bin/rails generate rider_kick:scaffold Models::Contact actor:user
|
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
|
+
```
|
18
47
|
|
19
48
|
## Philosophy
|
20
49
|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Description:
|
2
|
+
Clean Architecture generator
|
3
|
+
|
4
|
+
Example:
|
5
|
+
To Generate Init:
|
6
|
+
bin/rails generate rider_kick:init
|
7
|
+
|
8
|
+
To Generate Pattern:
|
9
|
+
bin/rails generate rider_kick:clean_arch --setup
|
10
|
+
|
11
|
+
To Generate scaffold:
|
12
|
+
bin/rails generate rider_kick:scaffold Models::Contact actor:user
|
@@ -0,0 +1,160 @@
|
|
1
|
+
module RiderKick
|
2
|
+
class CleanArchGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path('templates', __dir__)
|
4
|
+
|
5
|
+
class_option :setup, type: :boolean, default: false, desc: 'Setup domain structure'
|
6
|
+
|
7
|
+
def validate_setup_option
|
8
|
+
raise Thor::Error, 'The --setup option must be specified to create the domain structure.' unless options.setup
|
9
|
+
validation!
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_gem_dependencies
|
13
|
+
append_to_file('Gemfile', gem_dependencies)
|
14
|
+
say 'Gems added to Gemfile', :green
|
15
|
+
end
|
16
|
+
|
17
|
+
def setup_configuration
|
18
|
+
setup_domain_structure
|
19
|
+
|
20
|
+
setup_initializers
|
21
|
+
setup_dotenv
|
22
|
+
setup_gitignore
|
23
|
+
setup_rubocop
|
24
|
+
setup_init_migration
|
25
|
+
setup_active_storage
|
26
|
+
setup_rspec
|
27
|
+
setup_readme
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def setup_active_storage
|
33
|
+
run 'rails active_storage:install'
|
34
|
+
run 'rails db:migrate'
|
35
|
+
end
|
36
|
+
|
37
|
+
def validation!
|
38
|
+
unless File.exist?('config/initializers/rider_kick.rb')
|
39
|
+
say 'Error must create init configuration for rider_kick!'
|
40
|
+
raise Thor::Error, 'run: bin/rails generate rider_kick:init'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def setup_domain_structure
|
45
|
+
empty_directory File.join("#{path_app}/domains/core/use_cases/contract")
|
46
|
+
empty_directory File.join("#{path_app}/domains/core/repositories")
|
47
|
+
empty_directory File.join("#{path_app}/domains/core/builders")
|
48
|
+
empty_directory File.join("#{path_app}/domains/core/entities")
|
49
|
+
empty_directory File.join("#{path_app}/domains/core/utils")
|
50
|
+
|
51
|
+
# then
|
52
|
+
copy_domain_file
|
53
|
+
end
|
54
|
+
|
55
|
+
def copy_domain_file
|
56
|
+
template 'domains/core/use_cases/contract/pagination.rb.tt', File.join("#{path_app}/domains/core/use_cases/contract", 'pagination.rb')
|
57
|
+
template 'domains/core/use_cases/contract/default.rb.tt', File.join("#{path_app}/domains/core/use_cases/contract", 'default.rb')
|
58
|
+
template 'domains/core/use_cases/get_version.rb.tt', File.join("#{path_app}/domains/core/use_cases", 'get_version.rb')
|
59
|
+
|
60
|
+
template 'domains/core/builders/error.rb.tt', File.join("#{path_app}/domains/core/builders", 'error.rb')
|
61
|
+
template 'domains/core/builders/pagination.rb.tt', File.join("#{path_app}/domains/core/builders", 'pagination.rb')
|
62
|
+
|
63
|
+
template 'domains/core/entities/error.rb.tt', File.join("#{path_app}/domains/core/entities", 'error.rb')
|
64
|
+
template 'domains/core/entities/pagination.rb.tt', File.join("#{path_app}/domains/core/entities", 'pagination.rb')
|
65
|
+
|
66
|
+
template 'domains/core/repositories/abstract_repository.rb.tt', File.join("#{path_app}/domains/core/repositories", 'abstract_repository.rb')
|
67
|
+
template 'domains/core/utils/request_methods.rb.tt', File.join("#{path_app}/domains/core/utils", 'request_methods.rb')
|
68
|
+
end
|
69
|
+
|
70
|
+
def setup_initializers
|
71
|
+
copy_initializer('clean_archithecture')
|
72
|
+
copy_initializer('generators')
|
73
|
+
copy_initializer('hashie')
|
74
|
+
copy_initializer('version')
|
75
|
+
copy_initializer('zeitwerk')
|
76
|
+
copy_initializer('pagy')
|
77
|
+
end
|
78
|
+
|
79
|
+
def setup_dotenv
|
80
|
+
copy_database_config
|
81
|
+
copy_env_development
|
82
|
+
end
|
83
|
+
|
84
|
+
def setup_gitignore
|
85
|
+
template '.gitignore', File.join('.gitignore')
|
86
|
+
end
|
87
|
+
|
88
|
+
def setup_rubocop
|
89
|
+
template '.rubocop.yml', File.join('.rubocop.yml')
|
90
|
+
end
|
91
|
+
|
92
|
+
def setup_readme
|
93
|
+
template 'README.md', File.join('README.md')
|
94
|
+
end
|
95
|
+
|
96
|
+
def setup_init_migration
|
97
|
+
template 'db/migrate/20220613145533_init_database.rb', File.join('db/migrate/20220613145533_init_database.rb')
|
98
|
+
end
|
99
|
+
|
100
|
+
# Helper untuk menyalin initializers
|
101
|
+
def copy_initializer(file_name)
|
102
|
+
template "config/initializers/#{file_name}.rb.tt", File.join("config/initializers/#{file_name}.rb")
|
103
|
+
end
|
104
|
+
|
105
|
+
def copy_database_config
|
106
|
+
template 'config/database.yml', File.join('config/database.yml')
|
107
|
+
end
|
108
|
+
|
109
|
+
def copy_env_development
|
110
|
+
template 'env.production', File.join('.env.production')
|
111
|
+
template 'env.development', File.join('.env.development')
|
112
|
+
template 'env.test', File.join('.env.test')
|
113
|
+
template 'env.test', File.join('env.example')
|
114
|
+
end
|
115
|
+
|
116
|
+
def gem_dependencies
|
117
|
+
inject_into_file 'Gemfile', after: "group :development, :test do\n" do
|
118
|
+
<<-CONFIG
|
119
|
+
|
120
|
+
gem "byebug"
|
121
|
+
gem "rspec-rails"
|
122
|
+
gem "factory_bot_rails"
|
123
|
+
gem "shoulda-matchers"
|
124
|
+
CONFIG
|
125
|
+
end
|
126
|
+
|
127
|
+
<<~RUBY
|
128
|
+
|
129
|
+
# Env Variables
|
130
|
+
gem 'dotenv-rails'
|
131
|
+
|
132
|
+
# Objectable
|
133
|
+
gem 'hashie'
|
134
|
+
|
135
|
+
# uploading
|
136
|
+
gem 'image_processing', '>= 1.2'
|
137
|
+
gem 'ruby-vips'
|
138
|
+
|
139
|
+
# pagination
|
140
|
+
gem 'pagy', '~> 9.2'
|
141
|
+
RUBY
|
142
|
+
end
|
143
|
+
|
144
|
+
def setup_rspec
|
145
|
+
say 'Menjalankan bundle install...'
|
146
|
+
run 'bundle install'
|
147
|
+
say 'Menginisialisasi RSpec...'
|
148
|
+
run 'rails generate rspec:install'
|
149
|
+
template '.rspec', File.join('.rspec')
|
150
|
+
template 'spec/support/repository_stubber.rb', File.join('spec/support/repository_stubber.rb')
|
151
|
+
template 'spec/support/file_stuber.rb', File.join('spec/support/file_stuber.rb')
|
152
|
+
say 'Mengonfigurasi FactoryBot...'
|
153
|
+
template 'spec/rails_helper.rb', File.join('spec/rails_helper.rb')
|
154
|
+
end
|
155
|
+
|
156
|
+
def path_app
|
157
|
+
'app'
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module RiderKick
|
2
|
+
class InitGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path('templates', __dir__)
|
4
|
+
|
5
|
+
def setup_configuration
|
6
|
+
copy_initializer('rider_kick')
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def copy_initializer(file_name)
|
12
|
+
template "config/initializers/#{file_name}.rb", File.join("config/initializers/#{file_name}.rb")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
module RiderKick
|
3
|
+
class ScaffoldGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('templates', __dir__)
|
5
|
+
|
6
|
+
argument :arg_structure, type: :string, default: '', banner: ''
|
7
|
+
|
8
|
+
def generate_use_case
|
9
|
+
validation!
|
10
|
+
setup_variables
|
11
|
+
|
12
|
+
generate_files('create')
|
13
|
+
generate_files('update')
|
14
|
+
generate_files('list')
|
15
|
+
generate_files('destroy')
|
16
|
+
generate_files('fetch', '_by_id')
|
17
|
+
|
18
|
+
copy_builder_and_entity_files
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def validation!
|
24
|
+
unless File.exist?('config/initializers/rider_kick.rb')
|
25
|
+
say 'Error must create init configuration for rider_kick!'
|
26
|
+
raise Thor::Error, 'run: bin/rails generate rider_kick:init'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def setup_variables
|
31
|
+
config = YAML.load_file("db/structures/#{arg_structure}_structure.yaml")
|
32
|
+
@structure = Hashie::Mash.new(config)
|
33
|
+
|
34
|
+
# Mengambil detail konfigurasi
|
35
|
+
model_name = @structure.model
|
36
|
+
resource_name = @structure.resource_name.singularize.underscore.downcase
|
37
|
+
entity = @structure.entity || {}
|
38
|
+
|
39
|
+
@actor = @structure.actor
|
40
|
+
@uploaders = @structure.uploaders || []
|
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 || []
|
48
|
+
@skipped_fields = entity.skipped_fields || []
|
49
|
+
@custom_fields = entity.custom_fields || []
|
50
|
+
|
51
|
+
@variable_subject = model_name.split('::').last.underscore.downcase
|
52
|
+
@scope_path = resource_name.pluralize.underscore.downcase
|
53
|
+
@model_class = model_name.camelize.constantize
|
54
|
+
@subject_class = resource_name.camelize
|
55
|
+
@fields = contract_fields
|
56
|
+
|
57
|
+
@type_mapping = {
|
58
|
+
'uuid' => ':string',
|
59
|
+
'string' => ':string',
|
60
|
+
'text' => ':string',
|
61
|
+
'integer' => ':integer',
|
62
|
+
'boolean' => ':bool',
|
63
|
+
'float' => ':float',
|
64
|
+
'decimal' => ':float',
|
65
|
+
'date' => ':date',
|
66
|
+
'upload' => 'Types::File',
|
67
|
+
'datetime' => ':string'
|
68
|
+
}
|
69
|
+
@entity_type_mapping = {
|
70
|
+
'uuid' => 'Types::Strict::String',
|
71
|
+
'string' => 'Types::Strict::String',
|
72
|
+
'text' => 'Types::Strict::String',
|
73
|
+
'integer' => 'Types::Strict::Integer',
|
74
|
+
'boolean' => 'Types::Strict::Bool',
|
75
|
+
'float' => 'Types::Strict::Float',
|
76
|
+
'decimal' => 'Types::Strict::Decimal',
|
77
|
+
'date' => 'Types::Strict::Date',
|
78
|
+
'datetime' => 'Types::Strict::Time'
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
def generate_files(action, suffix = '')
|
83
|
+
use_case_filename = build_usecase_filename(action, suffix)
|
84
|
+
repository_filename = build_repository_filename(action, suffix)
|
85
|
+
|
86
|
+
@scope_class = @scope_path.camelize
|
87
|
+
@use_case_class = use_case_filename.camelize
|
88
|
+
@repository_class = repository_filename.camelize
|
89
|
+
|
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")
|
91
|
+
template "domains/core/repositories/#{action + suffix}.rb.tt", File.join("#{root_path_app}/domains/core/repositories/#{@scope_path}", "#{repository_filename}.rb")
|
92
|
+
end
|
93
|
+
|
94
|
+
def copy_builder_and_entity_files
|
95
|
+
template 'domains/core/builders/builder.rb.tt', File.join("#{root_path_app}/domains/core/builders", "#{@variable_subject}.rb")
|
96
|
+
template 'domains/core/entities/entity.rb.tt', File.join("#{root_path_app}/domains/core/entities", "#{@variable_subject}.rb")
|
97
|
+
end
|
98
|
+
|
99
|
+
def contract_fields
|
100
|
+
skip_contract_fields = @skipped_fields.map(&:strip).uniq
|
101
|
+
if RiderKick.scope_owner_column.present?
|
102
|
+
skip_contract_fields << RiderKick.scope_owner_column.to_s
|
103
|
+
end
|
104
|
+
@model_class.columns.reject { |column| skip_contract_fields.include?(column.name.to_s) }.map(&:name).map(&:to_s)
|
105
|
+
end
|
106
|
+
|
107
|
+
def get_column_type(field)
|
108
|
+
@uploaders.include?(field) ? 'upload' : @model_class.columns_hash[field.to_s].type
|
109
|
+
end
|
110
|
+
|
111
|
+
def root_path_app
|
112
|
+
'app'
|
113
|
+
end
|
114
|
+
|
115
|
+
def build_usecase_filename(action, suffix = '')
|
116
|
+
"#{@actor}_#{action}_#{@variable_subject}#{suffix}"
|
117
|
+
end
|
118
|
+
|
119
|
+
def build_repository_filename(action, suffix = '')
|
120
|
+
"#{action}_#{@variable_subject}#{suffix}"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module RiderKick
|
2
|
+
class Structure < Rails::Generators::Base
|
3
|
+
source_root File.expand_path('templates', __dir__)
|
4
|
+
|
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'
|
7
|
+
|
8
|
+
def generate_use_case
|
9
|
+
validation!
|
10
|
+
setup_variables
|
11
|
+
generate_files(@scope_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def validation!
|
17
|
+
unless File.exist?('config/initializers/rider_kick.rb')
|
18
|
+
say 'Error must create init configuration for rider_kick!'
|
19
|
+
raise Thor::Error, 'run: bin/rails generate rider_kick:init'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
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
|
32
|
+
|
33
|
+
@type_mapping = {
|
34
|
+
'uuid' => ':string',
|
35
|
+
'string' => ':string',
|
36
|
+
'text' => ':string',
|
37
|
+
'integer' => ':integer',
|
38
|
+
'boolean' => ':bool',
|
39
|
+
'float' => ':float',
|
40
|
+
'decimal' => ':float',
|
41
|
+
'date' => ':date',
|
42
|
+
'upload' => 'Types::File',
|
43
|
+
'datetime' => ':string'
|
44
|
+
}
|
45
|
+
@entity_type_mapping = {
|
46
|
+
'uuid' => 'Types::Strict::String',
|
47
|
+
'string' => 'Types::Strict::String',
|
48
|
+
'text' => 'Types::Strict::String',
|
49
|
+
'integer' => 'Types::Strict::Integer',
|
50
|
+
'boolean' => 'Types::Strict::Bool',
|
51
|
+
'float' => 'Types::Strict::Float',
|
52
|
+
'decimal' => 'Types::Strict::Decimal',
|
53
|
+
'date' => 'Types::Strict::Date',
|
54
|
+
'datetime' => 'Types::Strict::Time'
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
def generate_files(action)
|
59
|
+
template 'db/structures/example.yaml.tt', File.join("db/structures/#{action}_structure.yaml")
|
60
|
+
end
|
61
|
+
|
62
|
+
def contract_fields
|
63
|
+
@model_class.columns.reject { |column| (['id', 'created_at', 'updated_at', 'type'] + [RiderKick.scope_owner_column.to_s]).include?(column.name.to_s) }.map(&:name).map(&:to_s)
|
64
|
+
end
|
65
|
+
|
66
|
+
def get_column_type(field)
|
67
|
+
uploaders.include?(field) ? 'upload' : @model_class.columns_hash[field].type
|
68
|
+
end
|
69
|
+
|
70
|
+
def uploaders
|
71
|
+
return [] unless arg_settings['uploader_filed'].present?
|
72
|
+
arg_settings['uploader_filed'].split(',').map(&:strip)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
|
2
|
+
#
|
3
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
+
# or operating system, you probably want to add a global ignore instead:
|
5
|
+
# git config --global core.excludesfile '~/.gitignore_global'
|
6
|
+
|
7
|
+
# Ignore bundler config.
|
8
|
+
/.bundle
|
9
|
+
|
10
|
+
# Ignore all logfiles and tempfiles.
|
11
|
+
/log/*
|
12
|
+
/tmp/*
|
13
|
+
!/log/.keep
|
14
|
+
!/tmp/.keep
|
15
|
+
|
16
|
+
# Ignore pidfiles, but keep the directory.
|
17
|
+
/tmp/pids/*
|
18
|
+
!/tmp/pids/
|
19
|
+
!/tmp/pids/.keep
|
20
|
+
|
21
|
+
# Ignore uploaded files in development.
|
22
|
+
/storage/*
|
23
|
+
!/storage/.keep
|
24
|
+
/tmp/storage/*
|
25
|
+
!/tmp/storage/
|
26
|
+
!/tmp/storage/.keep
|
27
|
+
|
28
|
+
/public/assets
|
29
|
+
|
30
|
+
# Ignore master key for decrypting credentials and more.
|
31
|
+
/config/master.key
|
32
|
+
|
33
|
+
# editor
|
34
|
+
.DS_Store
|
35
|
+
.idea
|
36
|
+
.env.*
|
37
|
+
Procfile
|
38
|
+
.ruby-gemset
|
39
|
+
.irb-history
|
40
|
+
.pry_history
|
41
|
+
.byebug_history
|
42
|
+
|
43
|
+
/app/assets/builds/*
|
44
|
+
!/app/assets/builds/.keep
|
45
|
+
|
46
|
+
/node_modules
|
47
|
+
|
48
|
+
# Vite Ruby
|
49
|
+
/public/vite*
|
50
|
+
node_modules
|
51
|
+
# Vite uses dotenv and suggests to ignore local-only env files. See
|
52
|
+
# https://vitejs.dev/guide/env-and-mode.html#env-files
|
53
|
+
*.local
|
54
|
+
data
|
55
|
+
volumes
|
56
|
+
vendor/bundle/ruby/*
|
57
|
+
ssl
|