Module: RubyUI::Generators::JavascriptUtils
- Included in:
- ComponentGenerator, InstallGenerator
- Defined in:
- lib/generators/ruby_ui/javascript_utils.rb
Constant Summary collapse
- TW_ANIMATE_CSS_VERSION =
"1.4.0"
Instance Method Summary collapse
- #install_js_package(package) ⇒ Object
- #pin_motion ⇒ Object
- #pin_tippy_js ⇒ Object
- #pin_tw_animate_css ⇒ Object
- #pin_with_importmap(package) ⇒ Object
- #rails_root ⇒ Object
- #using_bun? ⇒ Boolean
- #using_importmap? ⇒ Boolean
- #using_npm? ⇒ Boolean
- #using_pnpm? ⇒ Boolean
- #using_yarn? ⇒ Boolean
Instance Method Details
#install_js_package(package) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/generators/ruby_ui/javascript_utils.rb', line 6 def install_js_package(package) if using_importmap? pin_with_importmap(package) elsif using_bun? run "bun add #{package}" elsif using_yarn? run "yarn add #{package}" elsif using_npm? run "npm install #{package}" elsif using_pnpm? run "pnpm install #{package}" else say "Could not detect the package manager, you need to install '#{package}' manually", :red end end |
#pin_motion ⇒ Object
58 59 60 61 62 63 64 65 66 |
# File 'lib/generators/ruby_ui/javascript_utils.rb', line 58 def pin_motion say <<~TEXT WARNING: Installing motion from CDN because `bin/importmap pin motion` doesn't download the correct file. TEXT inject_into_file rails_root.join("config/importmap.rb"), <<~RUBY pin "motion", to: "https://cdn.jsdelivr.net/npm/motion@11.11.17/+esm"\n RUBY end |
#pin_tippy_js ⇒ Object
68 69 70 71 72 73 74 75 76 77 |
# File 'lib/generators/ruby_ui/javascript_utils.rb', line 68 def pin_tippy_js say <<~TEXT WARNING: Installing tippy.js from CDN because `bin/importmap pin tippy.js` doesn't download the correct file. TEXT inject_into_file rails_root.join("config/importmap.rb"), <<~RUBY pin "tippy.js", to: "https://cdn.jsdelivr.net/npm/tippy.js@6.3.7/+esm" pin "@popperjs/core", to: "https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/+esm"\n RUBY end |
#pin_tw_animate_css ⇒ Object
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/generators/ruby_ui/javascript_utils.rb', line 47 def pin_tw_animate_css say <<~TEXT WARNING: Installing tw-animate-css as a CSS asset because Importmap cannot pin CSS-only package exports. TEXT empty_directory rails_root.join("vendor/javascript") # CDN serves "tw-animate.css"; we save as "tw-animate-css.css" to match package name. Do not "correct" the URL. get "https://cdn.jsdelivr.net/npm/tw-animate-css@#{TW_ANIMATE_CSS_VERSION}/dist/tw-animate.css", rails_root.join("vendor/javascript/tw-animate-css.css") end |
#pin_with_importmap(package) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/generators/ruby_ui/javascript_utils.rb', line 22 def pin_with_importmap(package) case package when "motion" pin_motion when "tw-animate-css" pin_tw_animate_css when "tippy.js" pin_tippy_js else run "bin/importmap pin #{package}" end end |
#rails_root ⇒ Object
79 |
# File 'lib/generators/ruby_ui/javascript_utils.rb', line 79 def rails_root = Rails.root |
#using_bun? ⇒ Boolean
39 |
# File 'lib/generators/ruby_ui/javascript_utils.rb', line 39 def using_bun? = File.exist?(rails_root.join("bun.lock")) |
#using_importmap? ⇒ Boolean
35 36 37 |
# File 'lib/generators/ruby_ui/javascript_utils.rb', line 35 def using_importmap? File.exist?(rails_root.join("config/importmap.rb")) && File.exist?(rails_root.join("bin/importmap")) end |
#using_npm? ⇒ Boolean
41 |
# File 'lib/generators/ruby_ui/javascript_utils.rb', line 41 def using_npm? = File.exist?(rails_root.join("package-lock.json")) |
#using_pnpm? ⇒ Boolean
43 |
# File 'lib/generators/ruby_ui/javascript_utils.rb', line 43 def using_pnpm? = File.exist?(rails_root.join("pnpm-lock.yaml")) |
#using_yarn? ⇒ Boolean
45 |
# File 'lib/generators/ruby_ui/javascript_utils.rb', line 45 def using_yarn? = File.exist?(rails_root.join("yarn.lock")) |