rails_app_generator 0.0.2 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d89c170613dfb0e417f3ffd838fe43054131e448217472168598dcafff90b127
4
- data.tar.gz: eb356aed6b4f8abb01599f0b4e1433c38b147b47b88548b9543a13d1dbf65ee7
3
+ metadata.gz: af4adc7a1c56e1146ad7c09a5de8e937a9dcf9c6dbe9c44b5792e498c5432050
4
+ data.tar.gz: bfb7e1727d74d4090ad8ee9f5bad62091abfce6631e22164483527ae9cafa486
5
5
  SHA512:
6
- metadata.gz: efaf6e2c86116e185492707cc553f33d2dfe6a10739f9f7db4132f62f064a3d923da48c5b016a754e12d44a330e73b8461930fc33737e5d12ae1b1ba6100737b
7
- data.tar.gz: 1ba8f9198b73bedfbb6b0835c72f690a15dfa0e1fb6c5a83e576c2a17fbe8f7e6f1fdec7ae04cbad983a195c44ef66f2bc5cd338df9fe3ee5dbfbc96c4b95482
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
@@ -32,7 +32,6 @@ See all [stories](./STORIES.md)
32
32
 
33
33
 
34
34
  ## Usage
35
- xxxxxxxxxxxxxxxx <help name="blah blah" />
36
35
  See all [usage examples](./USAGE.md)
37
36
 
38
37
 
@@ -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,10 @@
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 BaseMapOption
6
+ def option_name(name)
7
+ "--#{name.to_s.gsub('_', '-')}"
8
+ end
9
+ end
10
+ end
@@ -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,10 @@
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 MapOptionIgnore < BaseMapOption
6
+ def map(_name, _value)
7
+ nil
8
+ end
9
+ end
10
+ 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
- # Build options for RailsAppGenerator::Starter
5
- class BuildOptions
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 register(name, **args)
20
- registered_options << BuildOption.new(**{ name: name }.merge(args))
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 rails_options
29
- build_options
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
- # opts = [
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
- opts = [
76
- '--skip-git',
77
- '--skip-test',
78
- '--skip-bundle'
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
- RailsAppGenerator::AppGenerator.start ['.'] + opts, destination_root: destination_root
88
+ [app_path] + opts
82
89
  end
83
90
  end
84
91
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsAppGenerator
4
- VERSION = '0.0.2'
4
+ VERSION = '0.0.5'
5
5
  end
@@ -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/build_option'
14
- require 'rails_app_generator/build_options'
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.2",
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.2",
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rails_app_generator",
3
- "version": "0.0.2",
3
+ "version": "0.0.5",
4
4
  "description": "Create new Rails Application with custom opinions",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
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.2
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