rails_app_generator 0.0.2 → 0.0.3

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