Class: Commands::Create
- Inherits:
-
Object
- Object
- Commands::Create
- Extended by:
- Forwardable
- Defined in:
- lib/nextgen/commands/create.rb
Overview
rubocop:disable Metrics/ClassLength
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(app_path, _options) ⇒ Create
constructor
A new instance of Create.
-
#run ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity.
Constructor Details
#initialize(app_path, _options) ⇒ Create
Returns a new instance of Create.
21 22 23 24 |
# File 'lib/nextgen/commands/create.rb', line 21 def initialize(app_path, ) @app_path = File.(app_path) @app_name = File.basename(@app_path).gsub(/\W/, "_").squeeze("_").camelize end |
Class Method Details
.run(app_path, options) ⇒ Object
17 18 19 |
# File 'lib/nextgen/commands/create.rb', line 17 def self.run(app_path, ) new(app_path, ).run end |
Instance Method Details
#run ⇒ Object
rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/nextgen/commands/create.rb', line 26 def run # rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity say <<~BANNER Welcome to nextgen, the interactive Rails app generator! You are about to create a Rails app named "#{cyan(app_name)}" in the following directory: #{cyan(app_path)} You'll be asked ~10 questions about database, test framework, and other options. The standard Rails "omakase" experience will be selected by default. BANNER continue_if "Ready to start?" rails_version = ask_rails_version @rails_opts = RailsOptions.new(version: rails_version) ask_database ask_full_stack_or_api ask_frontend_management unless rails_opts.api? ask_css unless rails_opts.api? || rails_opts.skip_asset_pipeline? ask_javascript unless rails_opts.api? || rails_opts.skip_asset_pipeline? ask_rails_features ask_rails_frameworks ask_test_framework ask_system_testing if rails_opts.frontend? && rails_opts.test_framework? reload_generators ask_optional_enhancements ask_js_package_manager if node? reload_generators say <<~SUMMARY OK! Your Rails app is ready to be created. The following options will be passed to `rails new`: #{rails_new_args.join("\n ")} The following nextgen enhancements will also be applied in individual git commits via `rails app:template`: #{selected_generators.join(", ").scan(/\S.{0,75}(?:,|$)/).join("\n ")} SUMMARY if node? say <<~NODE Based on the options you selected, your app will require a JavaScript runtime. For reference, you are using: node: #{capture_version("node")} yarn: #{capture_version("yarn")} npm: #{capture_version("npm")} NODE end continue_if "Continue?" create_package_json if node? Nextgen::RailsCommand.run "new", *rails_new_args Dir.chdir(app_path) do Nextgen::RailsCommand.run "app:template", "LOCATION=#{write_generators_script}" end say <<~DONE.gsub(/^/, " ") #{green("Done!")} A Rails #{rails_opts.version_label} app was generated in #{cyan(app_path)}. Run #{yellow("bin/setup")} in that directory to get started. DONE end |