lib/generators/coupdoeil/install/install_generator.rb
class Coupdoeil::InstallGenerator < Rails::Generators::Base Coupdoeil::InstallGenerator.source_root Coupdoeil::Engine.root.join("lib/generators/coupdoeil/install/templates") desc "Create base class for hovercards and default layout." def create_base_class create_file "app/hovercards/application_hovercard.rb", <<~RUBY class ApplicationHovercard < Coupdoeil::Hovercard end RUBY end def insert_default_layout template "layout.html.erb.tt", "app/hovercards/layouts/hovercard.html.erb" end def install_javascripts puts "" if Rails.root.join("config/importmap.rb").exist? append_to_importmap elsif Rails.root.join("package.json").exist? add_with_node else puts "You must either be running with node (package.json) or importmap-rails (config/importmap.rb) to use this gem." end end def install_stylesheets puts "" import_stylesheet hidden_class_requirement end private def append_to_importmap puts "Using importmap" puts "Pin Coupdoeil" append_to_file "config/importmap.rb", %(pin "coupdoeil", to: "coupdoeil.min.js", preload: true\n) puts "Import Coupdoeil" append_to_file "app/javascript/application.js", %(import "coupdoeil"\n) end def add_with_node if Rails.root.join("app/javascript/application.js").exist? say "Import Coupdoeil" append_to_file "app/javascript/application.js", %(import "coupdoeil"\n) else say "You must import coupdoeil in your JavaScript entrypoint file", :red end say "Install Coupdoeil" run "yarn add coupdoeil" end def import_stylesheet puts "To use Coupdoeil hovercard style, add to your layout's head:" puts "" puts <<-ERB <%= stylesheet_link_tag "coupdoeil/hovercard" %> ERB puts "" puts "Or one of two:" puts "" puts <<-ERB <%= stylesheet_link_tag "coupdoeil/hovercard-arrow" %> <%= stylesheet_link_tag "coupdoeil/hovercard-animation" %> ERB end def hidden_class_requirement puts "" puts "Also make sure you have a CSS implementation of .hidden class:" puts "" puts <<-CSS .hidden { display: none; } CSS puts "" end end