Class: WasmRails::Generators::InstallGenerator
- Inherits:
-
Rails::Generators::Base
- Object
- Rails::Generators::Base
- WasmRails::Generators::InstallGenerator
- Defined in:
- lib/generators/wasm_rails/install/install_generator.rb
Instance Method Summary collapse
- #copy_bin_scripts ⇒ Object
- #copy_js_files ⇒ Object
- #copy_public_files ⇒ Object
- #copy_wasm_adapter ⇒ Object
- #copy_wasm_stubs ⇒ Object
- #patch_application_rb ⇒ Object
- #patch_assets_initializer ⇒ Object
- #patch_boot_rb ⇒ Object
- #show_post_install_message ⇒ Object
- #update_package_json ⇒ Object
Instance Method Details
#copy_bin_scripts ⇒ Object
30 31 32 33 34 35 36 37 |
# File 'lib/generators/wasm_rails/install/install_generator.rb', line 30 def copy_bin_scripts copy_file "build_app_bundle.mjs", "bin/build_app_bundle.mjs" copy_file "esbuild_wasm.mjs", "bin/esbuild_wasm.mjs" copy_file "serve_wasm.mjs", "bin/serve_wasm.mjs" chmod "bin/build_app_bundle.mjs", 0o755 chmod "bin/esbuild_wasm.mjs", 0o755 chmod "bin/serve_wasm.mjs", 0o755 end |
#copy_js_files ⇒ Object
25 26 27 28 |
# File 'lib/generators/wasm_rails/install/install_generator.rb', line 25 def copy_js_files copy_file "service_worker.js", "app/javascript/wasm/service_worker.js" copy_file "boot.js", "app/javascript/wasm/boot.js" end |
#copy_public_files ⇒ Object
39 40 41 |
# File 'lib/generators/wasm_rails/install/install_generator.rb', line 39 def copy_public_files copy_file "wasm_shell.html", "public/wasm_shell.html" end |
#copy_wasm_adapter ⇒ Object
11 12 13 14 |
# File 'lib/generators/wasm_rails/install/install_generator.rb', line 11 def copy_wasm_adapter copy_file "wasm_sqlite3_adapter.rb", "lib/active_record/connection_adapters/wasm_sqlite3_adapter.rb" end |
#copy_wasm_stubs ⇒ Object
16 17 18 19 20 21 22 23 |
# File 'lib/generators/wasm_rails/install/install_generator.rb', line 16 def copy_wasm_stubs stubs_src = File.("../../../../../wasm_stubs", __dir__) Dir.glob("#{stubs_src}/**/*").each do |src| next if File.directory?(src) rel = Pathname.new(src).relative_path_from(Pathname.new(stubs_src)) copy_file src, "wasm_stubs/#{rel}" end end |
#patch_application_rb ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/generators/wasm_rails/install/install_generator.rb', line 52 def patch_application_rb application_rb = "config/application.rb" return if File.read(application_rb).include?("wasm_sqlite3_adapter") inject_into_class application_rb, "Application" do <<~RUBY.indent(4) if RUBY_PLATFORM == "wasm32-wasi" require_relative "../../lib/active_record/connection_adapters/wasm_sqlite3_adapter" end RUBY end end |
#patch_assets_initializer ⇒ Object
64 65 66 67 68 69 70 |
# File 'lib/generators/wasm_rails/install/install_generator.rb', line 64 def patch_assets_initializer initializer = "config/initializers/assets.rb" create_file initializer unless File.exist?(initializer) return if File.read(initializer).include?("app/javascript") append_to_file initializer, "\nRails.application.config.assets.paths << Rails.root.join(\"app/javascript\")\n" end |
#patch_boot_rb ⇒ Object
43 44 45 46 47 48 49 50 |
# File 'lib/generators/wasm_rails/install/install_generator.rb', line 43 def patch_boot_rb boot = "config/boot.rb" return unless File.exist?(boot) return if File.read(boot).include?("wasm32-wasi") gsub_file boot, /^(ENV\["BUNDLE_GEMFILE"\].+\nrequire "bundler\/setup"\nrequire "bootsnap\/setup")$/m, "unless RUBY_PLATFORM == \"wasm32-wasi\"\n \\1\nend" end |
#show_post_install_message ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/generators/wasm_rails/install/install_generator.rb', line 93 def say "\n" say " ✓ wasm_rails installed!", :green say "\n" say " Next steps:" say " 1. npm install" say " 2. In config/application.rb, require these before Bundler.require:" say " require 'wasm_rails'" say " require 'turbo-rails'" say " require 'stimulus-rails'" say " 3. npm run build:app && npm run build:wasm" say " 4. node bin/serve_wasm.mjs → http://localhost:3100" say "\n" end |
#update_package_json ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/generators/wasm_rails/install/install_generator.rb', line 72 def update_package_json return unless File.exist?("package.json") pkg = JSON.parse(File.read("package.json")) (pkg["dependencies"] ||= {}).merge!( "@ruby/3.3-wasm-wasi" => "^3.3.0", "@ruby/wasm-wasi" => "^3.3.0", "@sqlite.org/sqlite-wasm" => "^3.0.0", "esbuild" => "^0.25.0" ) { |_k, old, _new| old } (pkg["scripts"] ||= {}).merge!( "build:wasm" => "node bin/esbuild_wasm.mjs", "watch:wasm" => "node bin/esbuild_wasm.mjs --watch", "build:app" => "node bin/build_app_bundle.mjs" ) { |_k, old, _new| old } File.write("package.json", JSON.pretty_generate(pkg)) say_status :update, "package.json" end |