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 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