rails_app_generator 0.0.2 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d89c170613dfb0e417f3ffd838fe43054131e448217472168598dcafff90b127
4
- data.tar.gz: eb356aed6b4f8abb01599f0b4e1433c38b147b47b88548b9543a13d1dbf65ee7
3
+ metadata.gz: a977e13e740b6061b3d3ad51ceb945bb1397d575f10079bdaa990d40736a9238
4
+ data.tar.gz: aec7a7184348cbe4b67b1af22cb8ac4147e647a1b01ade79a0d21fd34fc114ae
5
5
  SHA512:
6
- metadata.gz: efaf6e2c86116e185492707cc553f33d2dfe6a10739f9f7db4132f62f064a3d923da48c5b016a754e12d44a330e73b8461930fc33737e5d12ae1b1ba6100737b
7
- data.tar.gz: 1ba8f9198b73bedfbb6b0835c72f690a15dfa0e1fb6c5a83e576c2a17fbe8f7e6f1fdec7ae04cbad983a195c44ef66f2bc5cd338df9fe3ee5dbfbc96c4b95482
6
+ metadata.gz: de59016f6f5a06e138a3380733a961bfb000e0f838456dc9b8c813747c939d9087ed31d8d295d258c3658e883e188a5fdafa7bfe4e04e8d8eb2907a26cdbc94e
7
+ data.tar.gz: a11097251170838db6e12f32397e2e7df1a8d713cc27b6be96eaa7cda8afc6095b1bd146a73df33933a63fbb7280c06c70b95783b906d2ffab53fade10c131da
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [0.0.2](https://github.com/klueless-io/rails_app_generator/compare/v0.0.1...v0.0.2) (2022-07-19)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * claim Ruby Gem name ([e15c681](https://github.com/klueless-io/rails_app_generator/commit/e15c6819eda783a345b79db3e22e544b50d9ef7c))
7
+
1
8
  ## [Unreleased]
2
9
 
3
10
  ## [0.1.0] - 2022-07-16
@@ -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,56 @@
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
51
+ else
52
+ RailsAppGenerator::MapOptionValue
53
+ end
54
+ end
55
+ end
56
+ end
@@ -16,19 +16,31 @@ module RailsAppGenerator
16
16
  @registered_options ||= []
17
17
  end
18
18
 
19
- def register(name, **args)
20
- registered_options << BuildOption.new(**{ name: name }.merge(args))
19
+ def registered_options_lookup
20
+ @registered_options_lookup ||= {}
21
+ end
22
+
23
+ def register_option(name, **args)
24
+ return if registered_options_lookup.key?(name)
25
+
26
+ option = BuildOption.new(**{ name: name }.merge(args))
27
+
28
+ registered_options_lookup[name] = option
29
+ registered_options << option
21
30
  end
22
31
 
23
32
  def reset
24
33
  @registered_options = nil
34
+ @registered_options_lookup = nil
25
35
  end
26
36
  end
27
37
 
28
- def rails_options
29
- build_options
30
-
31
- []
38
+ def cmd_line_options
39
+ self.class.registered_options.map do |option|
40
+ mapper = option.mapper
41
+ value = options[option.name]
42
+ mapper.map(option.name, value)
43
+ end.reject(&:blank?)
32
44
  end
33
45
 
34
46
  private
@@ -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
7
+ def self.map(name, value)
8
+ value == true ? "--#{name.to_s.gsub('_', '-')}" : ''
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 MapOptionValue
6
+ def self.map(_name, value)
7
+ value
8
+ end
9
+ end
10
+ 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.3'
5
5
  end
@@ -10,8 +10,10 @@ 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/map_option_pass_through'
14
+ require 'rails_app_generator/options/map_option_boolean_flag'
15
+ require 'rails_app_generator/options/build_option'
16
+ require 'rails_app_generator/options/build_options'
15
17
  require 'rails_app_generator/starter'
16
18
  require 'rails_app_generator/app_builder'
17
19
  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.3",
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.3",
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.3",
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.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
@@ -49,8 +49,6 @@ 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
@@ -58,8 +56,13 @@ files:
58
56
  - lib/rails_app_generator/notes/methods-class.txt
59
57
  - lib/rails_app_generator/notes/methods-instance.txt
60
58
  - lib/rails_app_generator/notes/option-rules.txt
59
+ - lib/rails_app_generator/notes/register-options.txt
61
60
  - lib/rails_app_generator/notes/usage-gem.txt
62
61
  - lib/rails_app_generator/notes/usage-rails.txt
62
+ - lib/rails_app_generator/options/build_option.rb
63
+ - lib/rails_app_generator/options/build_options.rb
64
+ - lib/rails_app_generator/options/map_option_boolean_flag.rb
65
+ - lib/rails_app_generator/options/map_option_pass_through.rb
63
66
  - lib/rails_app_generator/starter.rb
64
67
  - lib/rails_app_generator/version.rb
65
68
  - 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