rails_app_generator 0.1.26 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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 %>'