rails_app_generator 0.0.2 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/README.md +0 -1
- data/lib/rails_app_generator/app_generator.rb +15 -0
- data/lib/rails_app_generator/notes/a1.txt +86 -0
- data/lib/rails_app_generator/notes/a2.txt +86 -0
- data/lib/rails_app_generator/notes/register-options.txt +25 -0
- data/lib/rails_app_generator/options/base_map_option.rb +10 -0
- data/lib/rails_app_generator/options/build_option.rb +58 -0
- data/lib/rails_app_generator/options/map_option_boolean_flag.rb +11 -0
- data/lib/rails_app_generator/options/map_option_ignore.rb +10 -0
- data/lib/rails_app_generator/options/map_option_string.rb +12 -0
- data/lib/rails_app_generator/{build_options.rb → options/options_builder.rb} +30 -7
- data/lib/rails_app_generator/options/rails_options.rb +57 -0
- data/lib/rails_app_generator/starter.rb +35 -28
- data/lib/rails_app_generator/version.rb +1 -1
- data/lib/rails_app_generator.rb +7 -2
- data/package-lock.json +2 -2
- data/package.json +1 -1
- metadata +11 -3
- data/lib/rails_app_generator/build_option.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af4adc7a1c56e1146ad7c09a5de8e937a9dcf9c6dbe9c44b5792e498c5432050
|
4
|
+
data.tar.gz: bfb7e1727d74d4090ad8ee9f5bad62091abfce6631e22164483527ae9cafa486
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3e0485f02a267715227db3fd75c9e7b8f02d031661e40d3880edcc07a95f1351f7b94c5456456407d623b0ed3b2d8457e689a4f94cb6d9b5fc57f1ab0d11e68
|
7
|
+
data.tar.gz: 7f7ec8819fb75ba55e0b4e20f5532382e8bca334ea6ee895e2eb73001b34423538ff8876c1e54370c394bc9cac4a2b45e909954cfb9e3d5292092f187619dfcb
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
## [0.0.4](https://github.com/klueless-io/rails_app_generator/compare/v0.0.3...v0.0.4) (2022-07-19)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* add map string options ([50a22ba](https://github.com/klueless-io/rails_app_generator/commit/50a22ba1bdefc7726e687d072009d73bbfd21b83))
|
7
|
+
|
8
|
+
## [0.0.3](https://github.com/klueless-io/rails_app_generator/compare/v0.0.2...v0.0.3) (2022-07-19)
|
9
|
+
|
10
|
+
|
11
|
+
### Bug Fixes
|
12
|
+
|
13
|
+
* add builder option command line mapping ([5cc16b5](https://github.com/klueless-io/rails_app_generator/commit/5cc16b53f3ea2821e226a51dedfa10513307860f))
|
14
|
+
|
15
|
+
## [0.0.2](https://github.com/klueless-io/rails_app_generator/compare/v0.0.1...v0.0.2) (2022-07-19)
|
16
|
+
|
17
|
+
|
18
|
+
### Bug Fixes
|
19
|
+
|
20
|
+
* claim Ruby Gem name ([e15c681](https://github.com/klueless-io/rails_app_generator/commit/e15c6819eda783a345b79db3e22e544b50d9ef7c))
|
21
|
+
|
1
22
|
## [Unreleased]
|
2
23
|
|
3
24
|
## [0.1.0] - 2022-07-16
|
data/README.md
CHANGED
@@ -5,10 +5,14 @@
|
|
5
5
|
module RailsAppGenerator
|
6
6
|
# AppGenerator is a wrapper for Rails::AppGenerator
|
7
7
|
class AppGenerator < Rails::Generators::AppGenerator
|
8
|
+
class_option :test, type: :string, default: 'rspec'
|
9
|
+
|
8
10
|
def initialize(*args)
|
9
11
|
super
|
10
12
|
|
13
|
+
puts '----------------------------------------------------'
|
11
14
|
puts options
|
15
|
+
puts '----------------------------------------------------'
|
12
16
|
|
13
17
|
# return unless options[:api]
|
14
18
|
|
@@ -30,6 +34,17 @@ module RailsAppGenerator
|
|
30
34
|
# add(:rspec) if options[:testing_framework] == 'rspec'
|
31
35
|
end
|
32
36
|
|
37
|
+
# def create_root_files
|
38
|
+
# super
|
39
|
+
|
40
|
+
# # add(:irbrc)
|
41
|
+
# # add(:foreman)
|
42
|
+
# # add(:dotenv)
|
43
|
+
# # add(:docker)
|
44
|
+
# # add(:docker_compose)
|
45
|
+
# # add(:rubocop)
|
46
|
+
# end
|
47
|
+
|
33
48
|
# include KLog::Logging
|
34
49
|
|
35
50
|
# def finish_template
|
@@ -0,0 +1,86 @@
|
|
1
|
+
create
|
2
|
+
create README.md
|
3
|
+
create Rakefile
|
4
|
+
create .ruby-version
|
5
|
+
create config.ru
|
6
|
+
create Gemfile
|
7
|
+
create app
|
8
|
+
create app/assets/config/manifest.js
|
9
|
+
create app/assets/stylesheets/application.css
|
10
|
+
create app/channels/application_cable/channel.rb
|
11
|
+
create app/channels/application_cable/connection.rb
|
12
|
+
create app/controllers/application_controller.rb
|
13
|
+
create app/helpers/application_helper.rb
|
14
|
+
create app/jobs/application_job.rb
|
15
|
+
create app/mailers/application_mailer.rb
|
16
|
+
create app/models/application_record.rb
|
17
|
+
create app/views/layouts/application.html.erb
|
18
|
+
create app/views/layouts/mailer.html.erb
|
19
|
+
create app/views/layouts/mailer.text.erb
|
20
|
+
create app/assets/images
|
21
|
+
create app/assets/images/.keep
|
22
|
+
create app/controllers/concerns/.keep
|
23
|
+
create app/models/concerns/.keep
|
24
|
+
create bin
|
25
|
+
create bin/rails
|
26
|
+
create bin/rake
|
27
|
+
create bin/setup
|
28
|
+
create config
|
29
|
+
create config/routes.rb
|
30
|
+
create config/application.rb
|
31
|
+
create config/environment.rb
|
32
|
+
create config/cable.yml
|
33
|
+
create config/puma.rb
|
34
|
+
create config/storage.yml
|
35
|
+
create config/environments
|
36
|
+
create config/environments/development.rb
|
37
|
+
create config/environments/production.rb
|
38
|
+
create config/environments/test.rb
|
39
|
+
create config/initializers
|
40
|
+
create config/initializers/assets.rb
|
41
|
+
create config/initializers/content_security_policy.rb
|
42
|
+
create config/initializers/cors.rb
|
43
|
+
create config/initializers/filter_parameter_logging.rb
|
44
|
+
create config/initializers/inflections.rb
|
45
|
+
create config/initializers/new_framework_defaults_7_0.rb
|
46
|
+
create config/initializers/permissions_policy.rb
|
47
|
+
create config/locales
|
48
|
+
create config/locales/en.yml
|
49
|
+
create config/master.key
|
50
|
+
create config/boot.rb
|
51
|
+
create config/database.yml
|
52
|
+
create db
|
53
|
+
create db/seeds.rb
|
54
|
+
create lib
|
55
|
+
create lib/tasks
|
56
|
+
create lib/tasks/.keep
|
57
|
+
create lib/assets
|
58
|
+
create lib/assets/.keep
|
59
|
+
create log
|
60
|
+
create log/.keep
|
61
|
+
create public
|
62
|
+
create public/404.html
|
63
|
+
create public/422.html
|
64
|
+
create public/500.html
|
65
|
+
create public/apple-touch-icon-precomposed.png
|
66
|
+
create public/apple-touch-icon.png
|
67
|
+
create public/favicon.ico
|
68
|
+
create public/robots.txt
|
69
|
+
create tmp
|
70
|
+
create tmp/.keep
|
71
|
+
create tmp/pids
|
72
|
+
create tmp/pids/.keep
|
73
|
+
create tmp/cache
|
74
|
+
create tmp/cache/assets
|
75
|
+
create vendor
|
76
|
+
create vendor/.keep
|
77
|
+
create test/system
|
78
|
+
create test/system/.keep
|
79
|
+
create test/application_system_test_case.rb
|
80
|
+
create storage
|
81
|
+
create storage/.keep
|
82
|
+
create tmp/storage
|
83
|
+
create tmp/storage/.keep
|
84
|
+
remove config/initializers/cors.rb
|
85
|
+
remove config/initializers/new_framework_defaults_7_0.rb
|
86
|
+
example at ./spec/lib/rails_app_generator/starter_spec.rb:110
|
@@ -0,0 +1,86 @@
|
|
1
|
+
create
|
2
|
+
create README.md
|
3
|
+
create Rakefile
|
4
|
+
create .ruby-version
|
5
|
+
create config.ru
|
6
|
+
create Gemfile
|
7
|
+
create app
|
8
|
+
create app/assets/config/manifest.js
|
9
|
+
create app/assets/stylesheets/application.css
|
10
|
+
create app/channels/application_cable/channel.rb
|
11
|
+
create app/channels/application_cable/connection.rb
|
12
|
+
create app/controllers/application_controller.rb
|
13
|
+
create app/helpers/application_helper.rb
|
14
|
+
create app/jobs/application_job.rb
|
15
|
+
create app/mailers/application_mailer.rb
|
16
|
+
create app/models/application_record.rb
|
17
|
+
create app/views/layouts/application.html.erb
|
18
|
+
create app/views/layouts/mailer.html.erb
|
19
|
+
create app/views/layouts/mailer.text.erb
|
20
|
+
create app/assets/images
|
21
|
+
create app/assets/images/.keep
|
22
|
+
create app/controllers/concerns/.keep
|
23
|
+
create app/models/concerns/.keep
|
24
|
+
create bin
|
25
|
+
create bin/rails
|
26
|
+
create bin/rake
|
27
|
+
create bin/setup
|
28
|
+
create config
|
29
|
+
create config/routes.rb
|
30
|
+
create config/application.rb
|
31
|
+
create config/environment.rb
|
32
|
+
create config/cable.yml
|
33
|
+
create config/puma.rb
|
34
|
+
create config/storage.yml
|
35
|
+
create config/environments
|
36
|
+
create config/environments/development.rb
|
37
|
+
create config/environments/production.rb
|
38
|
+
create config/environments/test.rb
|
39
|
+
create config/initializers
|
40
|
+
create config/initializers/assets.rb
|
41
|
+
create config/initializers/content_security_policy.rb
|
42
|
+
create config/initializers/cors.rb
|
43
|
+
create config/initializers/filter_parameter_logging.rb
|
44
|
+
create config/initializers/inflections.rb
|
45
|
+
create config/initializers/new_framework_defaults_7_0.rb
|
46
|
+
create config/initializers/permissions_policy.rb
|
47
|
+
create config/locales
|
48
|
+
create config/locales/en.yml
|
49
|
+
create config/master.key
|
50
|
+
create config/boot.rb
|
51
|
+
create config/database.yml
|
52
|
+
create db
|
53
|
+
create db/seeds.rb
|
54
|
+
create lib
|
55
|
+
create lib/tasks
|
56
|
+
create lib/tasks/.keep
|
57
|
+
create lib/assets
|
58
|
+
create lib/assets/.keep
|
59
|
+
create log
|
60
|
+
create log/.keep
|
61
|
+
create public
|
62
|
+
create public/404.html
|
63
|
+
create public/422.html
|
64
|
+
create public/500.html
|
65
|
+
create public/apple-touch-icon-precomposed.png
|
66
|
+
create public/apple-touch-icon.png
|
67
|
+
create public/favicon.ico
|
68
|
+
create public/robots.txt
|
69
|
+
create tmp
|
70
|
+
create tmp/.keep
|
71
|
+
create tmp/pids
|
72
|
+
create tmp/pids/.keep
|
73
|
+
create tmp/cache
|
74
|
+
create tmp/cache/assets
|
75
|
+
create vendor
|
76
|
+
create vendor/.keep
|
77
|
+
create test/system
|
78
|
+
create test/system/.keep
|
79
|
+
create test/application_system_test_case.rb
|
80
|
+
create storage
|
81
|
+
create storage/.keep
|
82
|
+
create tmp/storage
|
83
|
+
create tmp/storage/.keep
|
84
|
+
remove config/initializers/cors.rb
|
85
|
+
remove config/initializers/new_framework_defaults_7_0.rb
|
86
|
+
example at ./spec/lib/rails_app_generator/starter_spec.rb:110
|
@@ -0,0 +1,25 @@
|
|
1
|
+
register_option :template, type: :string , desc: "Path to some #{name} template (can be a filesystem path or URL)"
|
2
|
+
register_option :database, type: :string , default: "sqlite3" , desc: "Preconfigure for selected database (options: #{DATABASES.join('/')})"
|
3
|
+
register_option :skip_git, type: :boolean, default: false , desc: "Skip .gitignore file"
|
4
|
+
register_option :skip_keeps, type: :boolean, default: false , desc: "Skip source control .keep files"
|
5
|
+
register_option :skip_action_mailer, type: :boolean, default: false , desc: "Skip Action Mailer files"
|
6
|
+
register_option :skip_action_mailbox, type: :boolean, default: false , desc: "Skip Action Mailbox gem"
|
7
|
+
register_option :skip_action_text, type: :boolean, default: false , desc: "Skip Action Text gem"
|
8
|
+
register_option :skip_active_record, type: :boolean, default: false , desc: "Skip Active Record files"
|
9
|
+
register_option :skip_active_job, type: :boolean, default: false , desc: "Skip Active Job"
|
10
|
+
register_option :skip_active_storage, type: :boolean, default: false , desc: "Skip Active Storage files"
|
11
|
+
register_option :skip_action_cable, type: :boolean, default: false , desc: "Skip Action Cable files"
|
12
|
+
register_option :skip_asset_pipeline, type: :boolean, default: false
|
13
|
+
register_option :asset_pipeline, type: :string , default: "sprockets" , desc: "Choose your asset pipeline [options: sprockets (default), propshaft]"
|
14
|
+
register_option :skip_javascript, type: :boolean, default: name == "plugin" , desc: "Skip JavaScript files"
|
15
|
+
register_option :skip_hotwire, type: :boolean, default: false , desc: "Skip Hotwire integration"
|
16
|
+
register_option :skip_jbuilder, type: :boolean, default: false , desc: "Skip jbuilder gem"
|
17
|
+
register_option :skip_test, type: :boolean, default: false , desc: "Skip test files"
|
18
|
+
register_option :skip_system_test, type: :boolean, default: false , desc: "Skip system test files"
|
19
|
+
register_option :skip_bootsnap, type: :boolean, default: false , desc: "Skip bootsnap gem"
|
20
|
+
register_option :dev, type: :boolean, default: false , desc: "Set up the #{name} with Gemfile pointing to your Rails checkout"
|
21
|
+
register_option :edge, type: :boolean, default: false , desc: "Set up the #{name} with Gemfile pointing to Rails repository"
|
22
|
+
register_option :main, type: :boolean, default: false , desc: "Set up the #{name} with Gemfile pointing to Rails repository main branch"
|
23
|
+
register_option :rc, type: :string , default: nil , desc: "Path to file containing extra configuration options for rails command"
|
24
|
+
register_option :no_rc, type: :boolean, default: false , desc: "Skip loading of extra configuration options from .railsrc file"
|
25
|
+
register_option :help, type: :boolean, group: :rails , desc: "Show this help message and quit"
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsAppGenerator
|
4
|
+
# Option for the rails generator
|
5
|
+
#
|
6
|
+
# This class maps closely (but not exactly) to Thor's options
|
7
|
+
# The pattern is not exactly the same, it is easy to map the options
|
8
|
+
# you need from other generators such as: railties/lib/rails/generators/app_base.rb
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# class_option :skip_git, type: :boolean, default: false, desc: "Skip .gitignore file"
|
12
|
+
# becomes
|
13
|
+
# register_option :skip_git, type: :boolean, default: false, desc: "Skip .gitignore file"
|
14
|
+
class BuildOption
|
15
|
+
attr_reader :name, :desc, :type, :default, :required, :mapper
|
16
|
+
|
17
|
+
def initialize(**args)
|
18
|
+
@name = args[:name]
|
19
|
+
@desc = args[:desc] || ''
|
20
|
+
@type = args[:type] || :string
|
21
|
+
@required = args.fetch(:required, false)
|
22
|
+
@default = args[:default] || sane_default
|
23
|
+
@mapper = args[:mapper] || sane_mapper
|
24
|
+
|
25
|
+
raise ArgumentError, ':required should not be nil' if @required.nil?
|
26
|
+
end
|
27
|
+
|
28
|
+
def cmd_option(value); end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def sane_default
|
33
|
+
case type
|
34
|
+
when :string
|
35
|
+
''
|
36
|
+
when :boolean
|
37
|
+
false
|
38
|
+
when :integer
|
39
|
+
0
|
40
|
+
when :array
|
41
|
+
[]
|
42
|
+
when :hash
|
43
|
+
{}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def sane_mapper
|
48
|
+
case type
|
49
|
+
when :boolean
|
50
|
+
RailsAppGenerator::MapOptionBooleanFlag.new
|
51
|
+
when :string
|
52
|
+
RailsAppGenerator::MapOptionString.new
|
53
|
+
else
|
54
|
+
RailsAppGenerator::MapOptionIgnore.new
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsAppGenerator
|
4
|
+
# Map a boolean true to a command line flag in the format "--flag-name"
|
5
|
+
# false is ignored
|
6
|
+
class MapOptionBooleanFlag < BaseMapOption
|
7
|
+
def map(name, value)
|
8
|
+
value == true ? option_name(name) : ''
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsAppGenerator
|
4
|
+
# Simple pass through mapper for options that do not yet have a mapper defined
|
5
|
+
class MapOptionString < BaseMapOption
|
6
|
+
def map(name, value)
|
7
|
+
value = value.to_s
|
8
|
+
value = "\"#{value}\"" if value.include?(' ')
|
9
|
+
"#{option_name(name)}=#{value}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -1,8 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module RailsAppGenerator
|
4
|
-
#
|
5
|
-
|
4
|
+
# OptionBuilder can work standalone or as the base class
|
5
|
+
# for application generator options used by RailsAppGenerator::Starter
|
6
|
+
class OptionsBuilder
|
6
7
|
attr_reader :options
|
7
8
|
|
8
9
|
def initialize(opts)
|
@@ -16,19 +17,41 @@ module RailsAppGenerator
|
|
16
17
|
@registered_options ||= []
|
17
18
|
end
|
18
19
|
|
19
|
-
def
|
20
|
-
|
20
|
+
def registered_options_lookup
|
21
|
+
@registered_options_lookup ||= {}
|
22
|
+
end
|
23
|
+
|
24
|
+
# Future options are placeholders for options that are not yet implemented
|
25
|
+
def future_option(name, **args); end
|
26
|
+
|
27
|
+
def register_option(name, **args)
|
28
|
+
return if registered_options_lookup.key?(name)
|
29
|
+
|
30
|
+
option = BuildOption.new(**{ name: name }.merge(args))
|
31
|
+
|
32
|
+
registered_options_lookup[name] = option
|
33
|
+
registered_options << option
|
21
34
|
end
|
22
35
|
|
23
36
|
def reset
|
24
37
|
@registered_options = nil
|
38
|
+
@registered_options_lookup = nil
|
25
39
|
end
|
26
40
|
end
|
27
41
|
|
28
|
-
def
|
29
|
-
|
42
|
+
def cmd_line_options
|
43
|
+
self.class.registered_options.map do |option|
|
44
|
+
mapper = option.mapper
|
45
|
+
value = options[option.name]
|
46
|
+
mapper.map(option.name, value)
|
47
|
+
end.reject(&:blank?)
|
48
|
+
end
|
30
49
|
|
31
|
-
|
50
|
+
def debug
|
51
|
+
puts '[ Options JSON ]----------------------------------------------------'
|
52
|
+
puts JSON.pretty_generate(options)
|
53
|
+
puts '[ Options Command Line ]--------------------------------------------'
|
54
|
+
puts cmd_line_options
|
32
55
|
end
|
33
56
|
|
34
57
|
private
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsAppGenerator
|
4
|
+
class RailsOptions < OptionsBuilder
|
5
|
+
# NOTE: Currently you need to register new options in two places
|
6
|
+
# here and in lib/rails_app_generator/app_generator.rb
|
7
|
+
|
8
|
+
future_option :template , type: :string # , desc: "Path to some #{name} template (can be a filesystem path or URL)"
|
9
|
+
future_option :database , type: :string , default: 'sqlite3' # , desc: "Preconfigure for selected database (options: #{DATABASES.join('/')})"
|
10
|
+
register_option :skip_git , type: :boolean, default: false # , desc: "Skip .gitignore file"
|
11
|
+
future_option :skip_keeps , type: :boolean, default: false # , desc: "Skip source control .keep files"
|
12
|
+
future_option :skip_action_mailer , type: :boolean, default: false # , desc: "Skip Action Mailer files"
|
13
|
+
future_option :skip_action_mailbox , type: :boolean, default: false # , desc: "Skip Action Mailbox gem"
|
14
|
+
future_option :skip_action_text , type: :boolean, default: false # , desc: "Skip Action Text gem"
|
15
|
+
future_option :skip_active_record , type: :boolean, default: false # , desc: "Skip Active Record files"
|
16
|
+
future_option :skip_active_job , type: :boolean, default: false # , desc: "Skip Active Job"
|
17
|
+
future_option :skip_active_storage , type: :boolean, default: false # , desc: "Skip Active Storage files"
|
18
|
+
future_option :skip_action_cable , type: :boolean, default: false # , desc: "Skip Action Cable files"
|
19
|
+
future_option :skip_asset_pipeline , type: :boolean, default: false #
|
20
|
+
future_option :asset_pipeline , type: :string , default: 'sprockets' # , desc: "Choose your asset pipeline [options: sprockets (default), propshaft]"
|
21
|
+
future_option :skip_javascript , type: :boolean, default: false # name == 'plugin' # , desc: "Skip JavaScript files"
|
22
|
+
future_option :skip_hotwire , type: :boolean, default: false # , desc: "Skip Hotwire integration"
|
23
|
+
future_option :skip_jbuilder , type: :boolean, default: false # , desc: "Skip jbuilder gem"
|
24
|
+
register_option :skip_test , type: :boolean, default: false # , desc: "Skip test files"
|
25
|
+
register_option :test , type: :string , default: 'rspec' # , desc: "minitest or rspec (default: rspec)"
|
26
|
+
future_option :skip_system_test , type: :boolean, default: false # , desc: "Skip system test files"
|
27
|
+
future_option :skip_bootsnap , type: :boolean, default: false # , desc: "Skip bootsnap gem"
|
28
|
+
future_option :dev , type: :boolean, default: false # , desc: "Set up the #{name} with Gemfile pointing to your Rails checkout"
|
29
|
+
future_option :edge , type: :boolean, default: false # , desc: "Set up the #{name} with Gemfile pointing to Rails repository"
|
30
|
+
future_option :main , type: :boolean, default: false # , desc: "Set up the #{name} with Gemfile pointing to Rails repository main branch"
|
31
|
+
future_option :rc , type: :string , default: nil # , desc: "Path to file containing extra configuration options for rails command"
|
32
|
+
future_option :no_rc , type: :boolean, default: false # , desc: "Skip loading of extra configuration options from .railsrc file"
|
33
|
+
future_option :help , type: :boolean # , group: :rails # , desc: "Show this help message and quit"
|
34
|
+
future_option :version , type: :boolean # , group: :rails, desc: "Show Rails version number and quit"
|
35
|
+
future_option :api , type: :boolean # , desc: "Preconfigure smaller stack for API only apps"
|
36
|
+
future_option :minimal , type: :boolean # , desc: "Preconfigure a minimal rails app"
|
37
|
+
future_option :javascript , type: :string , default: 'importmap' # , desc: "Choose JavaScript approach [options: importmap (default), webpack, esbuild, rollup]"
|
38
|
+
future_option :css , type: :string # , desc: "Choose CSS processor [options: tailwind, bootstrap, bulma, postcss, sass... check https://github.com/rails/cssbundling-rails]"
|
39
|
+
register_option :skip_bundle , type: :boolean, default: false # , desc: "Don't run bundle install"
|
40
|
+
|
41
|
+
# if options[:minimal]
|
42
|
+
# self.options = options.merge(
|
43
|
+
# skip_action_cable: true,
|
44
|
+
# skip_action_mailer: true,
|
45
|
+
# skip_action_mailbox: true,
|
46
|
+
# skip_action_text: true,
|
47
|
+
# skip_active_job: true,
|
48
|
+
# skip_active_storage: true,
|
49
|
+
# skip_bootsnap: true,
|
50
|
+
# skip_dev_gems: true,
|
51
|
+
# skip_javascript: true,
|
52
|
+
# skip_jbuilder: true,
|
53
|
+
# skip_system_test: true,
|
54
|
+
# skip_hotwire: true).freeze
|
55
|
+
# end
|
56
|
+
end
|
57
|
+
end
|
@@ -31,6 +31,7 @@ module RailsAppGenerator
|
|
31
31
|
attr_reader :destination_root
|
32
32
|
attr_reader :rails_template_path
|
33
33
|
attr_reader :custom_template_path
|
34
|
+
attr_reader :console_output
|
34
35
|
|
35
36
|
def initialize(**args)
|
36
37
|
@app_path = args[:app_path] || '.'
|
@@ -43,42 +44,48 @@ module RailsAppGenerator
|
|
43
44
|
File.expand_path(File.join(destination_root, app_path))
|
44
45
|
end
|
45
46
|
|
46
|
-
def start
|
47
|
+
def start(options = [])
|
47
48
|
puts "Target path: #{target_path}"
|
48
49
|
|
49
50
|
RailsAppGenerator::AppGenerator.source_root(rails_template_path)
|
50
51
|
RailsAppGenerator::AppGenerator.source_paths << rails_template_path
|
51
52
|
RailsAppGenerator::AppGenerator.source_paths << custom_template_path
|
52
53
|
|
53
|
-
|
54
|
-
# '--skip-namespace',
|
55
|
-
# '--skip-collision-check',
|
56
|
-
# '--skip-git',
|
57
|
-
# '--skip-keeps',
|
58
|
-
# '--skip-action-mailer',
|
59
|
-
# '--skip-action-mailbox',
|
60
|
-
# '--skip-action-text',
|
61
|
-
# '--skip-active-record',
|
62
|
-
# '--skip-active-job',
|
63
|
-
# '--skip-active-storage',
|
64
|
-
# '--skip-action-cable',
|
65
|
-
# '--skip-asset-pipeline',
|
66
|
-
# '--skip-javascript',
|
67
|
-
# '--skip-hotwire',
|
68
|
-
# '--skip-jbuilder',
|
69
|
-
# '--skip-test',
|
70
|
-
# '--skip-system-test',
|
71
|
-
# '--skip-bootsnap',
|
72
|
-
# '--skip-bundle'
|
73
|
-
# ]
|
54
|
+
opts = extract_rails_options(app_path, options)
|
74
55
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
56
|
+
@console_output = capture_console do
|
57
|
+
RailsAppGenerator::AppGenerator.start(opts, destination_root: destination_root)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def capture_console
|
64
|
+
$stdout = StringIO.new
|
65
|
+
yield
|
66
|
+
output = $stdout.string
|
67
|
+
$stdout.close
|
68
|
+
output
|
69
|
+
ensure
|
70
|
+
$stdout = STDOUT
|
71
|
+
$stdout.puts output
|
72
|
+
end
|
73
|
+
|
74
|
+
# Rails options returns a flat array of options
|
75
|
+
#
|
76
|
+
# It can work accept a flat array of options or a
|
77
|
+
# an object that implements cmd_line_options such as OptionsBuilder
|
78
|
+
#
|
79
|
+
# @param [Array<String>, OptionsBuilder] options
|
80
|
+
# @return [Array<String>]
|
81
|
+
def extract_rails_options(app_path, options)
|
82
|
+
opts = nil
|
83
|
+
opts = options.cmd_line_options if options.respond_to?(:cmd_line_options)
|
84
|
+
opts = options if options.is_a?(Array)
|
85
|
+
|
86
|
+
raise ArgumentError, 'options is required' unless opts
|
80
87
|
|
81
|
-
|
88
|
+
[app_path] + opts
|
82
89
|
end
|
83
90
|
end
|
84
91
|
end
|
data/lib/rails_app_generator.rb
CHANGED
@@ -10,8 +10,13 @@ require 'rails/generators/rails/app/app_generator'
|
|
10
10
|
require 'bundler'
|
11
11
|
|
12
12
|
require 'rails_app_generator/version'
|
13
|
-
require 'rails_app_generator/
|
14
|
-
require 'rails_app_generator/
|
13
|
+
require 'rails_app_generator/options/base_map_option'
|
14
|
+
require 'rails_app_generator/options/map_option_ignore'
|
15
|
+
require 'rails_app_generator/options/map_option_string'
|
16
|
+
require 'rails_app_generator/options/map_option_boolean_flag'
|
17
|
+
require 'rails_app_generator/options/build_option'
|
18
|
+
require 'rails_app_generator/options/options_builder'
|
19
|
+
require 'rails_app_generator/options/rails_options'
|
15
20
|
require 'rails_app_generator/starter'
|
16
21
|
require 'rails_app_generator/app_builder'
|
17
22
|
require 'rails_app_generator/app_generator'
|
data/package-lock.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "rails_app_generator",
|
3
|
-
"version": "0.0.
|
3
|
+
"version": "0.0.5",
|
4
4
|
"lockfileVersion": 2,
|
5
5
|
"requires": true,
|
6
6
|
"packages": {
|
7
7
|
"": {
|
8
8
|
"name": "rails_app_generator",
|
9
|
-
"version": "0.0.
|
9
|
+
"version": "0.0.5",
|
10
10
|
"devDependencies": {
|
11
11
|
"@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
|
12
12
|
"@semantic-release/changelog": "^6.0.1",
|
data/package.json
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_app_generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Cruwys
|
@@ -49,17 +49,25 @@ files:
|
|
49
49
|
- lib/rails_app_generator.rb
|
50
50
|
- lib/rails_app_generator/app_builder.rb
|
51
51
|
- lib/rails_app_generator/app_generator.rb
|
52
|
-
- lib/rails_app_generator/build_option.rb
|
53
|
-
- lib/rails_app_generator/build_options.rb
|
54
52
|
- lib/rails_app_generator/generators/advisories_generator.rb
|
55
53
|
- lib/rails_app_generator/generators/base.rb
|
56
54
|
- lib/rails_app_generator/generators/foo_generator.rb
|
55
|
+
- lib/rails_app_generator/notes/a1.txt
|
56
|
+
- lib/rails_app_generator/notes/a2.txt
|
57
57
|
- lib/rails_app_generator/notes/commands-list.txt
|
58
58
|
- lib/rails_app_generator/notes/methods-class.txt
|
59
59
|
- lib/rails_app_generator/notes/methods-instance.txt
|
60
60
|
- lib/rails_app_generator/notes/option-rules.txt
|
61
|
+
- lib/rails_app_generator/notes/register-options.txt
|
61
62
|
- lib/rails_app_generator/notes/usage-gem.txt
|
62
63
|
- lib/rails_app_generator/notes/usage-rails.txt
|
64
|
+
- lib/rails_app_generator/options/base_map_option.rb
|
65
|
+
- lib/rails_app_generator/options/build_option.rb
|
66
|
+
- lib/rails_app_generator/options/map_option_boolean_flag.rb
|
67
|
+
- lib/rails_app_generator/options/map_option_ignore.rb
|
68
|
+
- lib/rails_app_generator/options/map_option_string.rb
|
69
|
+
- lib/rails_app_generator/options/options_builder.rb
|
70
|
+
- lib/rails_app_generator/options/rails_options.rb
|
63
71
|
- lib/rails_app_generator/starter.rb
|
64
72
|
- lib/rails_app_generator/version.rb
|
65
73
|
- package-lock.json
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RailsAppGenerator
|
4
|
-
# Option for the rails generator
|
5
|
-
class BuildOption
|
6
|
-
attr_reader :name, :description, :type, :default, :required
|
7
|
-
|
8
|
-
def initialize(**args)
|
9
|
-
@name = args[:name]
|
10
|
-
@description = args[:description] || ''
|
11
|
-
@type = args[:type] || :string
|
12
|
-
@required = args.fetch(:required, false)
|
13
|
-
@default = args[:default] || sane_default
|
14
|
-
|
15
|
-
raise ArgumentError, ':required should not be nil' if @required.nil?
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def sane_default
|
21
|
-
case type
|
22
|
-
when :string
|
23
|
-
''
|
24
|
-
when :boolean
|
25
|
-
false
|
26
|
-
when :integer
|
27
|
-
0
|
28
|
-
when :array
|
29
|
-
[]
|
30
|
-
when :hash
|
31
|
-
{}
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|