Class: PetiteVite::InstallGenerator
- Inherits:
-
Rails::Generators::Base
- Object
- Rails::Generators::Base
- PetiteVite::InstallGenerator
- Defined in:
- lib/generators/petite_vite/install/install_generator.rb
Class Method Summary collapse
Instance Method Summary collapse
- #create_dev_scripts ⇒ Object
- #create_initializer ⇒ Object
- #create_package_json ⇒ Object
- #insert_to_frontend_source_main ⇒ Object
- #insert_to_layout ⇒ Object
- #insert_to_procfile_dev ⇒ Object
- #insert_to_vite_config ⇒ Object
- #verify_frontend_exists ⇒ Object
- #verify_input ⇒ Object
Class Method Details
.exit_on_failure? ⇒ Boolean
5 6 7 |
# File 'lib/generators/petite_vite/install/install_generator.rb', line 5 def self.exit_on_failure? true end |
Instance Method Details
#create_dev_scripts ⇒ Object
48 49 50 51 52 53 54 |
# File 'lib/generators/petite_vite/install/install_generator.rb', line 48 def create_dev_scripts return if File.exist?(File.join(destination_root, "Procfile.dev")) template("Procfile.dev", "Procfile.dev") template("bin/dev", "bin/dev") chmod("bin/dev", 0o755) end |
#create_initializer ⇒ Object
39 40 41 42 |
# File 'lib/generators/petite_vite/install/install_generator.rb', line 39 def create_initializer template("initializer.rb", "config/initializers/petite_vite.rb") template("petite_vite.json", "config/petite_vite.json") end |
#create_package_json ⇒ Object
44 45 46 |
# File 'lib/generators/petite_vite/install/install_generator.rb', line 44 def create_package_json template("package.json", "package.json") end |
#insert_to_frontend_source_main ⇒ Object
60 61 62 |
# File 'lib/generators/petite_vite/install/install_generator.rb', line 60 def insert_to_frontend_source_main prepend_to_file(File.join(destination_root, frontend_root!, frontend_source_main!), "import 'vite/modulepreload-polyfill'\n") end |
#insert_to_layout ⇒ Object
94 95 96 97 98 99 100 101 102 103 |
# File 'lib/generators/petite_vite/install/install_generator.rb', line 94 def insert_to_layout Dir.glob(File.join(destination_root, "app", "views", "layouts", "**.html.erb")).each do |abspath| basename = File.basename(abspath) next if basename == "mailer.html.erb" relpath = Pathname.new(abspath).relative_path_from(destination_root).to_s insert_into_file(relpath, before: %r{^\s*</head>}, verbose: false) do "<%= vite_tags %>\n" end end end |
#insert_to_procfile_dev ⇒ Object
56 57 58 |
# File 'lib/generators/petite_vite/install/install_generator.rb', line 56 def insert_to_procfile_dev append_to_file("Procfile.dev", "vite: cd #{frontend_root!} && yarn dev\n") end |
#insert_to_vite_config ⇒ Object
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 |
# File 'lib/generators/petite_vite/install/install_generator.rb', line 64 def insert_to_vite_config vite_config_path = File.join(destination_root, frontend_root!, frontend_vite_config!) depth = frontend_root!.count("/") + 1 relative_prefix = "../" * depth insert_into_file(vite_config_path, before: %r{^\s*export default defineConfig\b}, verbose: false) do "import shared from '#{relative_prefix}config/petite_vite.json'\n" end injected = <<~SCRIPT.indent(2) clearScreen: false, server: { cors: { origin: shared.viteCorsOrigin, }, origin: shared.viteCorsOrigin, port: shared.viteDevServerPort, strictPort: true, }, build: { manifest: true, rollupOptions: { input: shared.frontendInput, }, }, SCRIPT gsub_file(vite_config_path, %r{(export default defineConfig\s*\(\s*\{\s*\n)}, "\\1#{injected}", verbose: false) end |
#verify_frontend_exists ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/generators/petite_vite/install/install_generator.rb', line 25 def verify_frontend_exists return if skip_frontend_check! path = File.join(destination_root, frontend_root!) unless File.exist?(path) raise "Expected #{path} to exist. Pass --skip-frontend-check to bypass." end path = File.join(destination_root, frontend_root!, "package.json") unless File.exist?(path) raise "Expected #{path} to exist. Pass --skip-frontend-check to bypass." end end |
#verify_input ⇒ Object
18 19 20 21 22 23 |
# File 'lib/generators/petite_vite/install/install_generator.rb', line 18 def verify_input vite_dev_server_port! frontend_root! rails_development_url! skip_frontend_check! end |