rails_app_generator 0.1.26 → 0.2.0

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.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -1
  3. data/CHANGELOG.md +23 -0
  4. data/after_templates/addons/acts_as_list/_.rb +0 -14
  5. data/after_templates/addons/mini_magick/_.rb +1 -1
  6. data/docs/last_run/app_generator_class.json +406 -0
  7. data/docs/last_run/app_generator_data.json +44 -0
  8. data/docs/last_run/rails_options_class.json +406 -0
  9. data/docs/last_run/rails_options_data.json +53 -0
  10. data/exe/rag +2 -0
  11. data/lib/rails_app_generator/{add_on.rb → addon.rb} +3 -26
  12. data/lib/rails_app_generator/addon_util.rb +21 -0
  13. data/lib/rails_app_generator/addons/acts_as_list.rb +1 -1
  14. data/lib/rails_app_generator/addons/annotate.rb +1 -1
  15. data/lib/rails_app_generator/addons/browser.rb +1 -1
  16. data/lib/rails_app_generator/addons/chartkick.rb +1 -1
  17. data/lib/rails_app_generator/addons/continuous_integration.rb +1 -1
  18. data/lib/rails_app_generator/addons/devise.rb +1 -1
  19. data/lib/rails_app_generator/addons/docker.rb +1 -1
  20. data/lib/rails_app_generator/addons/docker_compose.rb +1 -1
  21. data/lib/rails_app_generator/addons/dotenv.rb +1 -1
  22. data/lib/rails_app_generator/addons/factory_bot.rb +1 -1
  23. data/lib/rails_app_generator/addons/faker.rb +1 -1
  24. data/lib/rails_app_generator/addons/foreman.rb +1 -1
  25. data/lib/rails_app_generator/addons/generators.rb +1 -1
  26. data/lib/rails_app_generator/addons/groupdate.rb +1 -1
  27. data/lib/rails_app_generator/addons/hexapdf.rb +1 -1
  28. data/lib/rails_app_generator/addons/high_voltage.rb +1 -1
  29. data/lib/rails_app_generator/addons/honeybadger.rb +1 -1
  30. data/lib/rails_app_generator/addons/httparty.rb +1 -1
  31. data/lib/rails_app_generator/addons/inline_svg.rb +1 -1
  32. data/lib/rails_app_generator/addons/irbrc.rb +1 -1
  33. data/lib/rails_app_generator/addons/lograge.rb +1 -1
  34. data/lib/rails_app_generator/addons/mini_magick.rb +1 -1
  35. data/lib/rails_app_generator/addons/pundit.rb +1 -1
  36. data/lib/rails_app_generator/addons/rails_html_sanitizer.rb +1 -1
  37. data/lib/rails_app_generator/addons/rspec.rb +1 -1
  38. data/lib/rails_app_generator/addons/rubocop.rb +1 -1
  39. data/lib/rails_app_generator/addons/scaffold.rb +1 -1
  40. data/lib/rails_app_generator/addons/services.rb +1 -1
  41. data/lib/rails_app_generator/addons/sidekiq.rb +2 -2
  42. data/lib/rails_app_generator/addons/stimulus.rb +1 -1
  43. data/lib/rails_app_generator/addons/stimulus_components.rb +1 -1
  44. data/lib/rails_app_generator/addons/tailwind.rb +1 -1
  45. data/lib/rails_app_generator/addons/twilio_ruby.rb +13 -0
  46. data/lib/rails_app_generator/addons/views.rb +1 -1
  47. data/lib/rails_app_generator/app_generator.rb +39 -172
  48. data/lib/rails_app_generator/cli/profile.rb +3 -1
  49. data/lib/rails_app_generator/configuration/rag_configuration.rb +18 -0
  50. data/lib/rails_app_generator/configuration/rag_configuration_extension.rb +14 -0
  51. data/lib/rails_app_generator/context.rb +1 -1
  52. data/lib/rails_app_generator/dependencies.rb +2 -2
  53. data/lib/rails_app_generator/options/build_option.rb +14 -9
  54. data/lib/rails_app_generator/options/options_builder.rb +67 -44
  55. data/lib/rails_app_generator/options/rails_options.rb +6 -68
  56. data/lib/rails_app_generator/rag_initializer.rb +250 -0
  57. data/lib/rails_app_generator/util.rb +26 -0
  58. data/lib/rails_app_generator/version.rb +1 -1
  59. data/lib/rails_app_generator.rb +8 -3
  60. data/package-lock.json +2 -2
  61. data/package.json +1 -1
  62. data/profiles/addons/mini_magick.json +2 -1
  63. data/tasks/addon.thor +4 -4
  64. data/templates/thor_task/addon/addon.tt +3 -7
  65. metadata +26 -7
  66. data/lib/rails_app_generator/addons/xmen.rb +0 -17
  67. data/lib/rails_app_generator/generators/advisories_generator.rb +0 -18
  68. data/lib/rails_app_generator/generators/base.rb +0 -60
  69. data/lib/rails_app_generator/generators/foo_generator.rb +0 -17
@@ -13,39 +13,84 @@ module RailsAppGenerator
13
13
  end
14
14
 
15
15
  class << self
16
- def registered_options
17
- @registered_options ||= []
16
+ def class_options
17
+ @class_options ||= []
18
18
  end
19
19
 
20
- def registered_options_lookup
21
- @registered_options_lookup ||= {}
20
+ def class_options_lookup
21
+ @class_options_lookup ||= {}
22
22
  end
23
23
 
24
- # Future options are placeholders for options that are not yet implemented
25
- def future_option(name, **args); end
24
+ # Register an option with the builder, this method has the same signature as Thor.
25
+ #
26
+ # This is so options can be used interchangeably between OptionsBuilder and Thor.
27
+ def class_option(name, **args)
28
+ option = BuildOption.new(name, args)
26
29
 
27
- def register_option(name, **args)
28
- return if registered_options_lookup.key?(name)
30
+ add_class_option(option)
31
+ end
32
+
33
+ def add_class_option(option)
34
+ if class_options_lookup.key?(option.name)
35
+ # raise ArgumentError, "Option #{option.name} already registered"
36
+ puts "Option #{option.name} already registered"
37
+ return
38
+ end
39
+
40
+ class_options_lookup[option.name.to_sym] = option
41
+ class_options << option
42
+ end
29
43
 
30
- option = BuildOption.new(**{ name: name }.merge(args))
44
+ def add_thor_class_option(thor_option)
45
+ args = {
46
+ description: thor_option.description,
47
+ type: thor_option.type,
48
+ default: thor_option.default,
49
+ required: thor_option.required
50
+ }
51
+ option = BuildOption.new(thor_option.name, args)
31
52
 
32
- registered_options_lookup[name] = option
33
- registered_options << option
53
+ add_class_option(option)
34
54
  end
35
55
 
36
56
  def reset
37
- @registered_options = nil
38
- @registered_options_lookup = nil
57
+ @class_options = nil
58
+ @class_options_lookup = nil
59
+ end
60
+
61
+ def to_h
62
+ {
63
+ class_option_keys: class_options.map(&:name),
64
+ class_options: class_options.map(&:to_h)
65
+ }
39
66
  end
40
67
  end
41
68
 
69
+ # rubocop:disable Metrics/AbcSize
42
70
  def cmd_line_options
43
- self.class.registered_options.map do |option|
71
+ available_options = options.clone
72
+
73
+ result = self.class.class_options.map do |option|
44
74
  mapper = option.mapper
45
- value = options[option.name]
75
+ key = option.name.to_sym
76
+ value = options[key]
77
+ available_options.delete(key)
78
+ # if available_options.delete(option.name.to_sym)
79
+ # puts "option IS registered: #{option.name}"
80
+ # else
81
+ # puts "option not registered: #{option.name}"
82
+ # end
83
+
46
84
  mapper.map(option.name, value)
47
85
  end.reject(&:blank?)
86
+
87
+ return result if available_options.empty?
88
+
89
+ puts "options not registered: #{available_options.keys.join(', ')}"
90
+ result
91
+ # raise 'Unknown options'
48
92
  end
93
+ # rubocop:enable Metrics/AbcSize
49
94
 
50
95
  def debug
51
96
  puts '[ Options JSON ]----------------------------------------------------'
@@ -54,38 +99,16 @@ module RailsAppGenerator
54
99
  puts cmd_line_options
55
100
  end
56
101
 
102
+ def to_h
103
+ {
104
+ options: options
105
+ }
106
+ end
107
+
57
108
  private
58
109
 
59
110
  def default_options
60
- self.class.registered_options.to_h { |option| [option.name, option.default] }
111
+ self.class.class_options.to_h { |option| [option.name.to_sym, option.default] }
61
112
  end
62
113
  end
63
-
64
- # opts = [
65
- # "--skip-namespace",
66
- # "--skip-collision-check",
67
- # "--skip-git",
68
- # "--skip-keeps",
69
- # "--skip-action-mailer",
70
- # "--skip-action-mailbox",
71
- # "--skip-action-text",
72
- # "--skip-active-record",
73
- # "--skip-active-job",
74
- # "--skip-active-storage",
75
- # "--skip-action-cable",
76
- # "--skip-asset-pipeline",
77
- # "--skip-javascript",
78
- # "--skip-hotwire",
79
- # "--skip-jbuilder",
80
- # "--skip-test",
81
- # "--skip-system-test",
82
- # "--skip-bootsnap",
83
- # "--skip-bundle"
84
- # ]
85
-
86
- # opts = [
87
- # "--skip-git",
88
- # "--skip-test",
89
- # "--skip-bundle"
90
- # ]
91
114
  end
@@ -2,74 +2,12 @@
2
2
 
3
3
  module RailsAppGenerator
4
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
- register_option :template , type: :string # , desc: "Path to some #{name} template (can be a filesystem path or URL)"
8
- future_option :database , type: :string , default: 'sqlite3' # , desc: "Preconfigure for selected database (options: #{DATABASES.join('/')})"
9
- register_option :skip_git , type: :boolean, default: false # , desc: "Skip .gitignore file"
10
- future_option :skip_keeps , type: :boolean, default: false # , desc: "Skip source control .keep files"
11
- future_option :skip_action_mailer , type: :boolean, default: false # , desc: "Skip Action Mailer files"
12
- future_option :skip_action_mailbox , type: :boolean, default: false # , desc: "Skip Action Mailbox gem"
13
- future_option :skip_action_text , type: :boolean, default: false # , desc: "Skip Action Text gem"
14
- future_option :skip_active_record , type: :boolean, default: false # , desc: "Skip Active Record files"
15
- future_option :skip_active_job , type: :boolean, default: false # , desc: "Skip Active Job"
16
- future_option :skip_active_storage , type: :boolean, default: false # , desc: "Skip Active Storage files"
17
- future_option :skip_action_cable , type: :boolean, default: false # , desc: "Skip Action Cable files"
18
- future_option :skip_asset_pipeline , type: :boolean, default: false #
19
- future_option :asset_pipeline , type: :string , default: 'sprockets' # , desc: "Choose your asset pipeline [options: sprockets (default), propshaft]"
20
- future_option :skip_javascript , type: :boolean, default: false # name == 'plugin' # , desc: "Skip JavaScript files"
21
- future_option :skip_hotwire , type: :boolean, default: false # , desc: "Skip Hotwire integration"
22
- future_option :skip_jbuilder , type: :boolean, default: false # , desc: "Skip jbuilder gem"
23
- register_option :skip_test , type: :boolean, default: false # , desc: "Skip test files"
24
- register_option :test , type: :string , default: 'rspec' # , desc: "minitest or rspec (default: rspec)"
25
- future_option :skip_system_test , type: :boolean, default: false # , desc: "Skip system test files"
26
- future_option :skip_bootsnap , type: :boolean, default: false # , desc: "Skip bootsnap gem"
27
- future_option :dev , type: :boolean, default: false # , desc: "Set up the #{name} with Gemfile pointing to your Rails checkout"
28
- future_option :edge , type: :boolean, default: false # , desc: "Set up the #{name} with Gemfile pointing to Rails repository"
29
- future_option :main , type: :boolean, default: false # , desc: "Set up the #{name} with Gemfile pointing to Rails repository main branch"
30
- future_option :rc , type: :string , default: nil # , desc: "Path to file containing extra configuration options for rails command"
31
- future_option :no_rc , type: :boolean, default: false # , desc: "Skip loading of extra configuration options from .railsrc file"
32
- future_option :help , type: :boolean # , group: :rails # , desc: "Show this help message and quit"
33
- future_option :version , type: :boolean # , group: :rails, desc: "Show Rails version number and quit"
34
- future_option :api , type: :boolean # , desc: "Preconfigure smaller stack for API only apps"
35
- future_option :minimal , type: :boolean # , desc: "Preconfigure a minimal rails app"
36
- future_option :javascript , type: :string , default: 'importmap' # , desc: "Choose JavaScript approach [options: importmap (default), webpack, esbuild, rollup]"
37
- register_option :css , type: :string # , desc: "Choose CSS processor [options: tailwind, bootstrap, bulma, postcss, sass... check https://github.com/rails/cssbundling-rails]"
38
- register_option :skip_bundle , type: :boolean, default: false # , desc: "Don't run bundle install"
39
-
40
- register_option :add_irbrc , type: :boolean, default: false
41
- register_option :add_foreman , type: :boolean, default: false
42
- register_option :add_devise , type: :boolean, default: false
43
- register_option :add_dotenv , type: :boolean, default: false
44
- register_option :add_docker , type: :boolean, default: false
45
- register_option :add_docker_compose , type: :boolean, default: false
46
- register_option :add_rubocop , type: :boolean, default: false
47
- register_option :add_annotate , type: :boolean, default: false
48
- register_option :add_continuous_integration , type: :boolean, default: false
49
- register_option :add_high_voltage , type: :boolean, default: false
50
- register_option :add_generators , type: :boolean, default: false
51
- register_option :add_lograge , type: :boolean, default: false
52
- register_option :add_pundit , type: :boolean, default: false
53
- register_option :add_services , type: :boolean, default: false
54
- register_option :add_sidekiq , type: :boolean, default: false
55
- register_option :add_views , type: :boolean, default: false
56
- register_option :add_errors , type: :boolean, default: false
57
- register_option :add_scaffold , type: :boolean, default: false
58
- register_option :add_factory_bot , type: :boolean, default: false
59
- register_option :add_shoulda , type: :boolean, default: false
60
-
61
- # NEW GEM ADDONS
62
- register_option :add_acts_as_list , type: :boolean, default: false
63
- register_option :add_browser , type: :boolean, default: false
64
- register_option :add_chartkick , type: :boolean, default: false
65
- register_option :add_faker , type: :boolean, default: false
66
- register_option :add_groupdate , type: :boolean, default: false
67
- register_option :add_hexapdf , type: :boolean, default: false
68
- register_option :add_httparty , type: :boolean, default: false
69
- register_option :add_honeybadger , type: :boolean, default: false
70
- register_option :add_mini_magick , type: :boolean, default: false
71
- register_option :add_rails_html_sanitizer , type: :boolean, default: false
72
- register_option :add_twilio_ruby , type: :boolean, default: false
5
+ # FIND MORE TEMPLATES HERE
6
+ # https://railsbytes.com/public/templates
7
+ # http://www.railscomposer.com/
8
+ # https://github.com/RailsApps/rails-composer
9
+ # https://github.com/carbonfive/raygun-rails
10
+ # https://github.com/abhaynikam/boring_generators
73
11
 
74
12
  # if options[:minimal]
75
13
  # self.options = options.merge(
@@ -0,0 +1,250 @@
1
+ # frozen_string_literal: true
2
+
3
+ # frozen__tring_literal: true
4
+
5
+ KConfig.configure do |config|
6
+ # https://railsbytes.com/public/templates
7
+ # http://www.railscomposer.com/
8
+ # https://github.com/RailsApps/rails-composer
9
+ # https://github.com/carbonfive/raygun-rails
10
+ # https://github.com/abhaynikam/boring_generators
11
+
12
+ # config.rag.add_option :test , type: :string , default: 'rspec'
13
+
14
+ # # Gem Current Latest Requested Groups
15
+ # # aws-sdk
16
+ # # capistrano-bundler 1.6.0 2.1.0 ~> 1.2 development, test
17
+ # # capybara 3.33.0 3.37.1 = 3.33.0 development, test
18
+ # # clamby 1.6.6 1.6.8 = 1.6.6 default
19
+ # # createsend 5.1.1 6.0.0 ~> 5.1 default
20
+ # # database_cleaner 1.7.0 2.0.1 = 1.7.0 development, test
21
+ # # erubi 1.10.0 1.11.0
22
+ # # factory_bot 5.2.0 6.2.1
23
+ # # factory_bot_rails 5.2.0 6.2.0 = 5.2.0 development, test
24
+ # # guard-bundler 2.2.1 3.0.0 = 2.2.1 development, test
25
+ # # guard-rubocop 1.4.0 1.5.0 = 1.4.0 development, test
26
+ # # http-accept 1.7.0 2.2.0
27
+ # # net-ssh 6.1.0 7.0.1
28
+ # # oauth2 1.4.10 2.0.6
29
+ # # omniauth-oauth2 1.7.3 1.8.0
30
+ # # paper_trail 10.3.1 12.3.0 ~> 10.3 default
31
+ # # pg 0.21.0 1.4.2 ~> 0.20 default
32
+ # # pg_search 2.3.0 2.3.6 ~> 2.0 default
33
+ # # pry 0.13.1 0.14.1
34
+ # # public_suffix 2.0.5 5.0.0 ~> 2.0 default
35
+ # # pusher 1.4.3 2.0.2 ~> 1.3 default
36
+ # # rack-mini-profiler 0.10.7 3.0.0 ~> 0.10 default
37
+ # # rack-test 0.6.3 2.0.2
38
+ # # rails 5.0.7.2 7.0.3.1 = 5.0.7.2 default
39
+ # # railties 5.0.7.2 7.0.3.1
40
+ # # ransack 1.8.10 3.2.1 ~> 1.8 default
41
+ # # redis 3.3.5 4.7.1 ~> 3.3 default
42
+ # # redis-store 1.6.0 1.9.1
43
+ # # regexp_parser 1.8.2 2.5.0
44
+ # # rspec 3.10.0 3.11.0
45
+ # # rspec-core 3.10.1 3.11.0 = 3.10.1 development, test
46
+ # # rspec-expectations 3.10.1 3.11.0 = 3.10.1 development, test
47
+ # # rspec-mocks 3.10.2 3.11.1 = 3.10.2 development, test
48
+ # # rspec-rails 4.1.2 5.1.2 = 4.1.2 development, test
49
+ # # rspec-support 3.10.2 3.11.0 = 3.10.2 development, test
50
+ # # rubyzip 1.3.0 2.3.2 ~> 1.3 default
51
+ # # scenic 1.5.4 1.6.0 = 1.5.4 default
52
+ # # scout_apm 4.1.2 5.2.0 ~> 4.1 default
53
+ # # selenium-webdriver 3.142.7 4.3.0 = 3.142.7 development, test
54
+ # # shoulda-matchers 4.0.1 5.1.0 = 4.0.1 development, test
55
+ # # sidekiq 4.2.10 6.5.1 ~> 4.2 default
56
+ # # sidekiq-pool 1.9.3 2.0.1 ~> 1.8 default
57
+ # # sidekiq-unique-jobs 6.0.25 7.1.27 ~> 6.0 default
58
+ # # spring 2.1.1 4.0.0 ~> 2.0 development, test
59
+ # # sprockets 3.7.2 4.1.1 ~> 3.7 default
60
+ # # sprockets-rails 3.2.2 3.4.2
61
+ # # timecop 0.8.1 0.9.5 = 0.8.1 development, test
62
+ # # tzinfo 1.2.10 2.0.5
63
+ # # uglifier 3.2.0 4.2.0 ~> 3.2 default
64
+ # # unicorn 5.8.0 6.1.0 ~> 5.3 default
65
+ # # webmock 3.13.0 3.16.0 = 3.13.0 development, test
66
+ # # websocket-driver 0.6.5 0.7.5
67
+
68
+ # # acts_as_list 0.9.19 1.0.4 ~> 0.9 default
69
+ # # arel 7.1.4 9.0.0
70
+ # # bigdecimal 1.4.4 3.1.2 ~> 1.4 development, test
71
+ # # binding_of_caller 0.8.0 1.0.0 ~> 0.8 default
72
+ # # browser 2.7.1 5.3.1 ~> 2.3 default
73
+ # # capistrano-bundler 1.6.0 2.1.0 ~> 1.2 development, test
74
+ # # capybara 3.33.0 3.37.1 = 3.33.0 development, test
75
+ # # chartkick 2.3.5 4.2.0 ~> 2.3 default
76
+ # # childprocess 3.0.0 4.1.0
77
+ # # clamby 1.6.6 1.6.8 = 1.6.6 default
78
+ # # createsend 5.1.1 6.0.0 ~> 5.1 default
79
+ # # database_cleaner 1.7.0 2.0.1 = 1.7.0 development, test
80
+ # # factory_bot 5.2.0 6.2.1
81
+ # # factory_bot_rails 5.2.0 6.2.0 = 5.2.0 development, test
82
+ # # faker 1.9.6 2.22.0 ~> 1.7 default
83
+ # # groupdate 4.3.0 6.1.0 ~> 4.1 default
84
+ # # guard-bundler 2.2.1 3.0.0 = 2.2.1 development, test
85
+ # # guard-rubocop 1.4.0 1.5.0 = 1.4.0 development, test
86
+ # # hashie 3.6.0 5.0.0
87
+ # # http-accept 1.7.0 2.1.1
88
+ # # k_log 0.0.18 0.0.33 = 0.0.18 development, test
89
+ # # net-ssh 6.1.0 7.0.1
90
+ # # oauth2 1.4.10 2.0.6
91
+ # # omniauth-oauth2 1.7.3 1.8.0
92
+ # # paper_trail 10.3.1 12.3.0 ~> 10.3 default
93
+ # # pg 0.21.0 1.4.2 ~> 0.20 default
94
+ # # pg_search 2.3.0 2.3.6 ~> 2.0 default
95
+ # # pry 0.13.1 0.14.1
96
+ # # public_suffix 2.0.5 5.0.0 ~> 2.0 default
97
+ # # pusher 1.4.3 2.0.2 ~> 1.3 default
98
+ # # rack-mini-profiler 0.10.7 3.0.0 ~> 0.10 default
99
+ # # rack-test 0.6.3 2.0.2
100
+ # # rails 5.0.7.2 7.0.3.1 = 5.0.7.2 default
101
+ # # railties 5.0.7.2 7.0.3.1
102
+ # # ransack 1.8.10 3.2.1 ~> 1.8 default
103
+ # # redis 3.3.5 4.7.1 ~> 3.3 default
104
+ # # redis-store 1.6.0 1.9.1
105
+ # # regexp_parser 1.8.2 2.5.0
106
+ # # rspec 3.10.0 3.11.0
107
+ # # rspec-core 3.10.1 3.11.0 = 3.10.1 development, test
108
+ # # rspec-expectations 3.10.1 3.11.0 = 3.10.1 development, test
109
+ # # rspec-mocks 3.10.2 3.11.1 = 3.10.2 development, test
110
+ # # rspec-rails 4.1.2 5.1.2 = 4.1.2 development, test
111
+ # # rspec-support 3.10.2 3.11.0 = 3.10.2 development, test
112
+ # # rubyzip 1.3.0 2.3.2 ~> 1.3 default
113
+ # # scenic 1.5.4 1.6.0 = 1.5.4 default
114
+ # # scout_apm 4.1.2 5.2.0 ~> 4.1 default
115
+ # # selenium-webdriver 3.142.7 4.3.0 = 3.142.7 development, test
116
+ # # shoulda-matchers 4.0.1 5.1.0 = 4.0.1 development, test
117
+ # # sidekiq 4.2.10 6.5.1 ~> 4.2 default
118
+ # # sidekiq-pool 1.9.3 2.0.1 ~> 1.8 default
119
+ # # sidekiq-unique-jobs 6.0.25 7.1.27 ~> 6.0 default
120
+ # # spring 2.1.1 4.0.0 ~> 2.0 development, test
121
+ # # sprockets 3.7.2 4.1.1 ~> 3.7 default
122
+ # # sprockets-rails 3.2.2 3.4.2
123
+ # # timecop 0.8.1 0.9.5 = 0.8.1 development, test
124
+ # # tzinfo 1.2.10 2.0.5
125
+ # # uglifier 3.2.0 4.2.0 ~> 3.2 default
126
+ # # unicorn 5.8.0 6.1.0 ~> 5.3 default
127
+ # # webmock 3.13.0 3.14.0 = 3.13.0 development, test
128
+ # # websocket-driver 0.6.5 0.7.5
129
+
130
+ # config.rag.add_option :skip_namespace , type: :boolean , default: false , description: "Skip namespace (affects only isolated engines)"
131
+ # config.rag.add_option :skip_collision_check , type: :boolean , default: false , description: "Skip collision check"
132
+ config.rag.add_option :force , type: :boolean , default: nil , description: 'Overwrite files that already exist'
133
+ # XXX config.rag.add_option :pretend , type: :boolean , default: nil , description: "Run but do not make any changes"
134
+ # XXX config.rag.add_option :quiet , type: :boolean , default: nil , description: "Suppress status output"
135
+ # XXX config.rag.add_option :skip , type: :boolean , default: nil , description: "Skip files that already exist"
136
+ # config.rag.add_option :ruby , type: :string , default: "/Users/davidcruwys/.asdf/installs/ruby/2.7.6/bin/ruby" , description: "Path to the Ruby binary of your choice"
137
+ # XXX config.rag.add_option :template , type: :string , default: nil , description: "Path to some application template (can be a filesystem path or URL)"
138
+ # config.rag.add_option :database , type: :string , default: "sqlite3" , description: "Preconfigure for selected database (options: mysql/postgresql/sqlite3/oracle/sqlserver/jdbcmysql/jdbcsqlite3/jdbcpostgresql/jdbc)"
139
+ # config.rag.add_option :skip_git , type: :boolean , default: false , description: "Skip .gitignore file"
140
+ # config.rag.add_option :skip_keeps , type: :boolean , default: false , description: "Skip source control .keep files"
141
+ # config.rag.add_option :skip_action_mailer , type: :boolean , default: false , description: "Skip Action Mailer files"
142
+ # config.rag.add_option :skip_action_mailbox , type: :boolean , default: false , description: "Skip Action Mailbox gem"
143
+ # config.rag.add_option :skip_action_text , type: :boolean , default: false , description: "Skip Action Text gem"
144
+ # config.rag.add_option :skip_active_record , type: :boolean , default: false , description: "Skip Active Record files"
145
+ # config.rag.add_option :skip_active_job , type: :boolean , default: false , description: "Skip Active Job"
146
+ # config.rag.add_option :skip_active_storage , type: :boolean , default: false , description: "Skip Active Storage files"
147
+ # config.rag.add_option :skip_action_cable , type: :boolean , default: false , description: "Skip Action Cable files"
148
+ # config.rag.add_option :skip_asset_pipeline , type: :boolean , default: false , description: "Indicates when to generate skip asset pipeline"
149
+ # config.rag.add_option :asset_pipeline , type: :string , default: "sprockets" , description: "Choose your asset pipeline [options: sprockets (default), propshaft]"
150
+ # config.rag.add_option :skip_javascript , type: :boolean , default: false , description: "Skip JavaScript files"
151
+ # config.rag.add_option :skip_hotwire , type: :boolean , default: false , description: "Skip Hotwire integration"
152
+ # config.rag.add_option :skip_jbuilder , type: :boolean , default: false , description: "Skip jbuilder gem"
153
+ # config.rag.add_option :skip_test , type: :boolean , default: false , description: "Skip test files"
154
+ # config.rag.add_option :skip_system_test , type: :boolean , default: false , description: "Skip system test files"
155
+ # config.rag.add_option :skip_bootsnap , type: :boolean , default: false , description: "Skip bootsnap gem"
156
+ # config.rag.add_option :dev , type: :boolean , default: false , description: "Set up the application with Gemfile pointing to your Rails checkout"
157
+ # config.rag.add_option :edge , type: :boolean , default: false , description: "Set up the application with Gemfile pointing to Rails repository"
158
+ # config.rag.add_option :main , type: :boolean , default: false , description: "Set up the application with Gemfile pointing to Rails repository main branch"
159
+ # config.rag.add_option :rc , type: :string , default: nil , description: "Path to file containing extra configuration options for rails command"
160
+ # config.rag.add_option :no_rc , type: :boolean , default: false , description: "Skip loading of extra configuration options from .railsrc file"
161
+ # config.rag.add_option :help , type: :boolean , default: nil , description: "Show this help message and quit"
162
+ # config.rag.add_option :version , type: :boolean , default: nil , description: "Show Rails version number and quit"
163
+ # config.rag.add_option :api , type: :boolean , default: false , description: "Preconfigure smaller stack for API only apps"
164
+ # config.rag.add_option :minimal , type: :boolean , default: nil , description: "Preconfigure a minimal rails app"
165
+ # config.rag.add_option :javascript , type: :string , default: "importmap" , description: "Choose JavaScript approach [options: importmap (default), webpack, esbuild, rollup]"
166
+ # config.rag.add_option :css , type: :string , default: nil , description: "Choose CSS processor [options: tailwind, bootstrap, bulma, postcss, sass... check https://github.com/rails/cssbundling-rails]"
167
+ # config.rag.add_option :skip_bundle , type: :boolean , default: false , description: "Don't run bundle install"
168
+
169
+ # future_option :database , type: :string , default: 'sqlite3' # , description: "Preconfigure for selected database (options: #{DATABASES.join('/')})"
170
+ # config.rag.add_option :skip_git , type: :boolean, default: false # , description: "Skip .gitignore file"
171
+ # future_option :skip_keeps , type: :boolean, default: false # , description: "Skip source control .keep files"
172
+ # future_option :skip_action_mailer , type: :boolean, default: false # , description: "Skip Action Mailer files"
173
+ # future_option :skip_action_mailbox , type: :boolean, default: false # , description: "Skip Action Mailbox gem"
174
+ # future_option :skip_action_text , type: :boolean, default: false # , description: "Skip Action Text gem"
175
+ # future_option :skip_active_record , type: :boolean, default: false # , description: "Skip Active Record files"
176
+ # future_option :skip_active_job , type: :boolean, default: false # , description: "Skip Active Job"
177
+ # future_option :skip_active_storage , type: :boolean, default: false # , description: "Skip Active Storage files"
178
+ # future_option :skip_action_cable , type: :boolean, default: false # , description: "Skip Action Cable files"
179
+ # future_option :skip_asset_pipeline , type: :boolean, default: false #
180
+ # future_option :asset_pipeline , type: :string , default: 'sprockets' # , description: "Choose your asset pipeline [options: sprockets (default), propshaft]"
181
+ # future_option :skip_javascript , type: :boolean, default: false # name == 'plugin' # , description: "Skip JavaScript files"
182
+ # future_option :skip_hotwire , type: :boolean, default: false # , description: "Skip Hotwire integration"
183
+ # future_option :skip_jbuilder , type: :boolean, default: false # , description: "Skip jbuilder gem"
184
+ # config.rag.add_option :skip_test , type: :boolean, default: false # , description: "Skip test files"
185
+ config.rag.add_option :test , type: :string , default: 'rspec' # , description: "minitest or rspec (default: rspec)"
186
+ # future_option :skip_system_test , type: :boolean, default: false # , description: "Skip system test files"
187
+ # future_option :skip_bootsnap , type: :boolean, default: false # , description: "Skip bootsnap gem"
188
+ # future_option :dev , type: :boolean, default: false # , description: "Set up the #{name} with Gemfile pointing to your Rails checkout"
189
+ # future_option :edge , type: :boolean, default: false # , description: "Set up the #{name} with Gemfile pointing to Rails repository"
190
+ # future_option :main , type: :boolean, default: false # , description: "Set up the #{name} with Gemfile pointing to Rails repository main branch"
191
+ # future_option :rc , type: :string , default: nil # , description: "Path to file containing extra configuration options for rails command"
192
+ # future_option :no_rc , type: :boolean, default: false # , description: "Skip loading of extra configuration options from .railsrc file"
193
+ # future_option :help , type: :boolean # , group: :rails # , description: "Show this help message and quit"
194
+ # future_option :version , type: :boolean # , group: :rails, description: "Show Rails version number and quit"
195
+ # future_option :api , type: :boolean # , description: "Preconfigure smaller stack for API only apps"
196
+ # future_option :minimal , type: :boolean # , description: "Preconfigure a minimal rails app"
197
+ # future_option :javascript , type: :string , default: 'importmap' # , description: "Choose JavaScript approach [options: importmap (default), webpack, esbuild, rollup]"
198
+ # config.rag.add_option :css , type: :string , description: "Choose CSS processor [options: tailwind, bootstrap, bulma, postcss, sass... check https://github.com/rails/cssbundling-rails]"
199
+ # config.rag.add_option :skip_bundle , type: :boolean, default: false , description: "Don't run bundle install"
200
+
201
+ # config.rag.add_option :add_irbrc , type: :boolean, default: false
202
+ # config.rag.add_option :add_foreman , type: :boolean, default: false
203
+ # config.rag.add_option :add_devise , type: :boolean, default: false
204
+ # config.rag.add_option :add_dotenv , type: :boolean, default: false
205
+ # config.rag.add_option :add_docker , type: :boolean, default: false
206
+ # config.rag.add_option :add_docker_compose , type: :boolean, default: false
207
+ # config.rag.add_option :add_rubocop , type: :boolean, default: false
208
+ # config.rag.add_option :add_annotate , type: :boolean, default: false
209
+ # config.rag.add_option :add_continuous_integration , type: :boolean, default: false
210
+ # config.rag.add_option :add_high_voltage , type: :boolean, default: false
211
+ # config.rag.add_option :add_generators , type: :boolean, default: false
212
+ # config.rag.add_option :add_lograge , type: :boolean, default: false
213
+ # config.rag.add_option :add_pundit , type: :boolean, default: false
214
+ # config.rag.add_option :add_services , type: :boolean, default: false
215
+ # config.rag.add_option :add_sidekiq , type: :boolean, default: false
216
+ # config.rag.add_option :add_views , type: :boolean, default: false
217
+ # config.rag.add_option :add_errors , type: :boolean, default: false
218
+ # config.rag.add_option :add_scaffold , type: :boolean, default: false
219
+ # config.rag.add_option :add_factory_bot , type: :boolean, default: false
220
+ # config.rag.add_option :add_shoulda , type: :boolean, default: false
221
+
222
+ # NEW GEM ADDONS
223
+ config.rag.add_option :add_acts_as_list , type: :boolean, default: false
224
+ config.rag.add_option :add_browser , type: :boolean, default: false
225
+ config.rag.add_option :add_chartkick , type: :boolean, default: false
226
+ config.rag.add_option :add_faker , type: :boolean, default: false
227
+ config.rag.add_option :add_groupdate , type: :boolean, default: false
228
+ config.rag.add_option :add_hexapdf , type: :boolean, default: false
229
+ config.rag.add_option :add_httparty , type: :boolean, default: false
230
+ config.rag.add_option :add_honeybadger , type: :boolean, default: false
231
+ config.rag.add_option :add_mini_magick , type: :boolean, default: false , description: 'Add Mini Magick gem'
232
+ config.rag.add_option :add_rails_html_sanitizer , type: :boolean, default: false
233
+ config.rag.add_option :add_twilio_ruby , type: :boolean, default: false
234
+ end
235
+
236
+ # Make sure that RailsOptions reflect the options available from Railties
237
+ RailsAppGenerator::AppGenerator.class_options.each do |class_option|
238
+ thor_option = class_option[1]
239
+ # puts "Adding railties class_option onto RailsOptions: #{thor_option.name}"
240
+ RailsAppGenerator::RailsOptions.add_thor_class_option(thor_option)
241
+ end
242
+ # Make sure that RailsOptions reflect the options available from custom configuration
243
+ KConfig.configuration.rag.options.each do |option|
244
+ RailsAppGenerator::RailsOptions.add_class_option(option)
245
+ RailsAppGenerator::AppGenerator.add_class_option(option)
246
+ end
247
+
248
+ # Debugging code
249
+ RailsAppGenerator::Util.write_last_run('rails_options_class.json', RailsAppGenerator::RailsOptions.to_h)
250
+ RailsAppGenerator::Util.write_last_run('app_generator_class.json', RailsAppGenerator::AppGenerator.to_h)
@@ -21,6 +21,32 @@ module RailsAppGenerator
21
21
  heading = "- [ #{heading} ]"
22
22
  puts heading.length > len ? heading : heading.ljust(len, '-')
23
23
  end
24
+
25
+ def write_last_run(file, data)
26
+ file = File.join('~/dev/kgems/rails_app_generator/docs/last_run/', file)
27
+ write_json(file, data)
28
+ end
29
+
30
+ def write_json(file, data)
31
+ file = File.expand_path(file)
32
+ puts "Write to #{file}"
33
+ FileUtils.mkdir_p(File.dirname(file))
34
+ File.write(file, JSON.pretty_generate(data))
35
+ end
36
+
37
+ # Take array of Thor::Option and extract the data as a hash
38
+ #
39
+ # You can find the array on the class_options reader
40
+ def thor_options_to_hash(thor_options)
41
+ common_keys = thor_options.flat_map(&:instance_variables).uniq
42
+ common_keys = common_keys.map { |k| k.to_s.delete_prefix('@').to_sym }
43
+
44
+ thor_options.map do |option|
45
+ common_keys.each_with_object({}) do |key, result|
46
+ result[key] = option.send(key) if option.respond_to?(key)
47
+ end
48
+ end
49
+ end
24
50
  end
25
51
  end
26
52
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsAppGenerator
4
- VERSION = '0.1.26'
4
+ VERSION = '0.2.0'
5
5
  end
@@ -6,11 +6,14 @@ require 'rails/generators'
6
6
  require 'rails/generators/app_name'
7
7
  require 'rails/generators/rails/app/app_generator'
8
8
  require 'bundler'
9
+ require 'k_config'
9
10
 
10
11
  require 'rails_app_generator/version'
12
+ require 'rails_app_generator/util'
13
+ require 'rails_app_generator/configuration/rag_configuration'
14
+ require 'rails_app_generator/configuration/rag_configuration_extension'
11
15
  require 'rails_app_generator/cli/diff'
12
16
  require 'rails_app_generator/cli/profile'
13
- require 'rails_app_generator/util'
14
17
  require 'rails_app_generator/diff/file_pair'
15
18
  require 'rails_app_generator/diff/compare_info'
16
19
  require 'rails_app_generator/diff/processor'
@@ -25,13 +28,15 @@ require 'rails_app_generator/options/options_builder'
25
28
  require 'rails_app_generator/options/rails_options'
26
29
  require 'rails_app_generator/context'
27
30
  require 'rails_app_generator/dependencies'
28
- require 'rails_app_generator/add_on'
29
- Dir[File.join(__dir__, 'rails_app_generator', 'addons', '*.rb')].sort.each { |file| require file }
31
+ require 'rails_app_generator/addon'
32
+ require 'rails_app_generator/addon_util'
30
33
  require 'rails_app_generator/formatted_gem_entry'
31
34
  require 'rails_app_generator/app_builder'
32
35
  require 'rails_app_generator/app_generator'
33
36
  require 'rails_app_generator/starter'
34
37
 
38
+ Dir[File.join(__dir__, 'rails_app_generator', 'addons', '*.rb')].sort.each { |file| require file }
39
+
35
40
  module RailsAppGenerator
36
41
  # raise RailsAppGenerator::Error, 'Sample message'
37
42
  Error = Class.new(StandardError)
data/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "rails_app_generator",
3
- "version": "0.1.26",
3
+ "version": "0.2.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "rails_app_generator",
9
- "version": "0.1.26",
9
+ "version": "0.2.0",
10
10
  "dependencies": {
11
11
  "daisyui": "^2.20.0"
12
12
  },
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rails_app_generator",
3
- "version": "0.1.26",
3
+ "version": "0.2.0",
4
4
  "description": "Create new Rails Application with custom opinions",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
@@ -7,6 +7,7 @@
7
7
  "skip_git": true,
8
8
  "skip_test": true,
9
9
  "template": "/Users/davidcruwys/dev/kgems/rails_app_generator/after_templates/addons/mini_magick/_.rb",
10
- "add_mini_magick": true
10
+ "add_mini_magick": true,
11
+ "force": true
11
12
  }
12
13
  }
data/tasks/addon.thor CHANGED
@@ -6,8 +6,8 @@ require 'net/http'
6
6
  require 'json'
7
7
  require_relative 'gem_info'
8
8
 
9
- # Thor task to create a new AddOn for Rails App Generator
10
- class AddOn < Thor
9
+ # Thor task to create a new Addon for Rails App Generator
10
+ class Addon < Thor
11
11
  include Thor::Actions
12
12
 
13
13
  source_root(File.expand_path('../templates/thor_task', File.dirname(__FILE__)))
@@ -27,9 +27,9 @@ class AddOn < Thor
27
27
 
28
28
  # method_option :from, :required => true
29
29
  desc 'new', 'Create a new Addon for Rails App Generator'
30
- method_option :gem , type: :string, default: nil, desc: 'Add required_gem helper to the AddOn. Gem name is looked up to find version and description'
30
+ method_option :gem , type: :string, default: nil, desc: 'Add required_gem helper to the Addon. Gem name is looked up to find version and description'
31
31
  method_option :force, type: :boolean, default: false, desc: 'Overwrite existing files'
32
- method_option :depends_on, type: :string, desc: 'This AddOn depends on another AddOn/Gem. active_record is a common dependency'
32
+ method_option :depends_on, type: :string, desc: 'This Addon depends on another Addon/Gem. active_record is a common dependency'
33
33
  def new(name)
34
34
  self.name = snake(name)
35
35
  self.data = build_data
@@ -1,17 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # NEW GEM ADDONS
4
- # lib/rails_app_generator/app_generator.rb
5
- # class_option :add_<%= data.name_snake %>, type: :boolean, default: false
6
- # add_if(:<%= data.name_snake %>)
7
- # lib/rails_app_generator/options/rails_options.rb
8
- # register_option :add_<%= data.name_snake %>, type: :boolean, default: false
3
+ # lib/rails_app_generator/rag_initializer.rb
4
+ # config.rag.add_option :add_<%= data.name_snake %> , type: :boolean, default: false
9
5
 
10
6
  module RailsAppGenerator
11
7
  # Custom add-ons for RailsAppGenerator
12
8
  module AddOns
13
9
  # Add <%= data.name_camel %> to rails application
14
- class <%= data.name_camel %> < AddOn
10
+ class <%= data.name_camel %> < RailsAppGenerator::Addon
15
11
  <%= data.addon_config_code %>
16
12
  def apply
17
13
  say 'Setting up <%= data.name_camel %>'