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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2da69cd31f4ccd9814e0e568898021f35bee72c122db6e9979e6cc498fd63cff
4
- data.tar.gz: 126375cf6d4edd2c217ecfb9f8c3dd49bfc96fb1c02112768f06456ec75ce620
3
+ metadata.gz: d52c99f6ea8176455670ca8ea5cc9a9c22f43b593023e2403608f414b3e2c715
4
+ data.tar.gz: 7b53c42cc3739cba6e29c1fe831454f22bc52feca1942a14212e8d48d3107193
5
5
  SHA512:
6
- metadata.gz: 61e7cd11f7d73d2a785467eb96259ec89d866e0edacfa48f8ec9c627f52efb2f867aa127ef71a1155fb258023924e0515fba30ff8c9b0d499bdee38577ae119d
7
- data.tar.gz: 8791510f1e262cd77ba0bfd38ee7b9e23b45676ca4bf5d15828a6bb424292e5cbd25235c71201f5ca95cf7ecdcb90f621d91b93b459e2cee700d44eaa87d35b4
6
+ metadata.gz: df231703733194422cee357e0563ab18f48820d7650ef850f5e7f575164622e6e61e8614936f0e02dfa2b49729732a93d2aa0b78987ee1dcde63b89c09750c1e
7
+ data.tar.gz: da23c273017a080b6b55fd48078e1df07410788f6e90730d02dd9025904823425f95d0067822cd2e90282bab3a10b00112a8ebe88fba63795b36a0ae6271bdfa
data/README.md CHANGED
@@ -12,9 +12,29 @@ 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
+ $ rails generate rider_kick:clean_arch --setup
19
+ $ rails db:drop db:create db:migrate db:seed
20
+
21
+ ## Usage
22
+ ```bash
23
+ Description:
24
+ Clean Architecture generator
25
+ rails new kotaro_minami -d=postgresql -T --skip-javascript --skip-asset-pipeline
26
+
27
+ Example:
28
+ To Generate Init:
29
+ bin/rails generate rider_kick:init
30
+
31
+ To Generate Pattern:
32
+ bin/rails generate rider_kick:clean_arch --setup
33
+
34
+ To Generate scaffold:
35
+ bin/rails generate rider_kick:scaffold Models::Contact actor:user
36
+
37
+ ```
18
38
 
19
39
  ## Philosophy
20
40
 
@@ -26,20 +46,25 @@ This structure provides helper interfaces and classes to assist in the construct
26
46
 
27
47
  ```
28
48
  - app
29
- - services
30
- - api
49
+ - models
50
+ - models
31
51
  - ...
32
52
  - domains
33
- - entities (Contract Response)
34
- - builder
35
- - repositories (Business logic)
36
- - use_cases (Just Usecase)
37
- - 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)
38
60
  ```
39
61
  ## Screaming architecture - use cases as an organisational principle
40
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.
41
63
  ```
42
64
  - app
65
+ - models
66
+ - models
67
+ - ...
43
68
  - domains
44
69
  - core
45
70
  ...
@@ -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,125 @@
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.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
+ @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
+ @scope_class = @scope_path.camelize
54
+ @model_class = model_name.camelize.constantize
55
+ @subject_class = resource_name.camelize
56
+ @fields = contract_fields
57
+ @route_scope_path = @structure.controllers.route_scope.downcase rescue ''
58
+ @route_scope_class = @route_scope_path.camelize rescue ''
59
+
60
+ @type_mapping = {
61
+ 'uuid' => ':string',
62
+ 'string' => ':string',
63
+ 'text' => ':string',
64
+ 'integer' => ':integer',
65
+ 'boolean' => ':bool',
66
+ 'float' => ':float',
67
+ 'decimal' => ':float',
68
+ 'date' => ':date',
69
+ 'upload' => 'Types::File',
70
+ 'datetime' => ':string'
71
+ }
72
+ @entity_type_mapping = {
73
+ 'uuid' => 'Types::Strict::String',
74
+ 'string' => 'Types::Strict::String',
75
+ 'text' => 'Types::Strict::String',
76
+ 'integer' => 'Types::Strict::Integer',
77
+ 'boolean' => 'Types::Strict::Bool',
78
+ 'float' => 'Types::Strict::Float',
79
+ 'decimal' => 'Types::Strict::Decimal',
80
+ 'date' => 'Types::Strict::Date',
81
+ 'datetime' => 'Types::Strict::Time'
82
+ }
83
+ end
84
+
85
+ def generate_files(action, suffix = '')
86
+ use_case_filename = build_usecase_filename(action, suffix)
87
+ repository_filename = build_repository_filename(action, suffix)
88
+
89
+ @use_case_class = use_case_filename.camelize
90
+ @repository_class = repository_filename.camelize
91
+
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")
93
+ template "domains/core/repositories/#{action + suffix}.rb.tt", File.join("#{root_path_app}/domains/core/repositories/#{@scope_path}", "#{repository_filename}.rb")
94
+ end
95
+
96
+ def copy_builder_and_entity_files
97
+ template 'domains/core/builders/builder.rb.tt', File.join("#{root_path_app}/domains/core/builders", "#{@variable_subject}.rb")
98
+ template 'domains/core/entities/entity.rb.tt', File.join("#{root_path_app}/domains/core/entities", "#{@variable_subject}.rb")
99
+ end
100
+
101
+ def contract_fields
102
+ skip_contract_fields = @skipped_fields.map(&:strip).uniq
103
+ if RiderKick.scope_owner_column.present?
104
+ skip_contract_fields << RiderKick.scope_owner_column.to_s
105
+ end
106
+ @model_class.columns.reject { |column| skip_contract_fields.include?(column.name.to_s) }.map(&:name).map(&:to_s)
107
+ end
108
+
109
+ def get_column_type(field)
110
+ @uploaders.include?(field) ? 'upload' : @model_class.columns_hash[field.to_s].type
111
+ end
112
+
113
+ def root_path_app
114
+ 'app'
115
+ end
116
+
117
+ def build_usecase_filename(action, suffix = '')
118
+ "#{@actor}_#{action}_#{@variable_subject}#{suffix}"
119
+ end
120
+
121
+ def build_repository_filename(action, suffix = '')
122
+ "#{action}_#{@variable_subject}#{suffix}"
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,77 @@
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: 'route_scope:dashboard 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
+ @route_scope_path = arg_settings['route_scope'].downcase
33
+ @route_scope_class = @route_scope_path.camelize
34
+
35
+ @type_mapping = {
36
+ 'uuid' => ':string',
37
+ 'string' => ':string',
38
+ 'text' => ':string',
39
+ 'integer' => ':integer',
40
+ 'boolean' => ':bool',
41
+ 'float' => ':float',
42
+ 'decimal' => ':float',
43
+ 'date' => ':date',
44
+ 'upload' => 'Types::File',
45
+ 'datetime' => ':string'
46
+ }
47
+ @entity_type_mapping = {
48
+ 'uuid' => 'Types::Strict::String',
49
+ 'string' => 'Types::Strict::String',
50
+ 'text' => 'Types::Strict::String',
51
+ 'integer' => 'Types::Strict::Integer',
52
+ 'boolean' => 'Types::Strict::Bool',
53
+ 'float' => 'Types::Strict::Float',
54
+ 'decimal' => 'Types::Strict::Decimal',
55
+ 'date' => 'Types::Strict::Date',
56
+ 'datetime' => 'Types::Strict::Time'
57
+ }
58
+ end
59
+
60
+ def generate_files(action)
61
+ template 'db/structures/example.yaml.tt', File.join("db/structures/#{action}_structure.yaml")
62
+ end
63
+
64
+ def contract_fields
65
+ @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)
66
+ end
67
+
68
+ def get_column_type(field)
69
+ uploaders.include?(field) ? 'upload' : @model_class.columns_hash[field].type
70
+ end
71
+
72
+ def uploaders
73
+ return [] unless arg_settings['uploader_filed'].present?
74
+ arg_settings['uploader_filed'].split(',').map(&:strip)
75
+ end
76
+ end
77
+ 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
@@ -0,0 +1,5 @@
1
+ --require spec_helper
2
+ --require rails_helper
3
+ --color
4
+ --profile
5
+ --format documentation