class Generators::Avo::ToolGenerator
def controller_name
def controller_name file_name.to_s end
def file_name
def file_name name.to_s.underscore end
def handle
def handle # Sidebar items template "tool/sidebar_item.tt", "app/views/avo/sidebar/items/_#{file_name}.html.erb" # Add controller if it doesn't exist controller_path = "app/controllers/avo/tools_controller.rb" unless File.file?(Rails.root.join(controller_path)) template "tool/controller.tt", controller_path end # Add controller method inject_into_class controller_path, "Avo::ToolsController" do <<-METHOD #{file_name} age_title = "#{human_name}" d_breadcrumb "#{human_name}" METHOD end # Add view file template "tool/view.tt", "app/views/avo/tools/#{file_name}.html.erb" # Add the route in the `routes.rb` file. # The route should be defined inside the Avo engine. # The new tool has a dedicated path helper. # EX: # bin/rails generate avo:tool lolo # will generate the avo.lolo_path helper # THe fact that it will always generate the definded? and Avo::Engine.routes.draw wraps is unfortunate. We'd love a PR to fix that. route_contents = <<~ROUTE if defined? ::Avo Avo::Engine.routes.draw do # This route is not protected, secure it with authentication if needed. get "#{file_name}", to: "tools##{file_name}", as: :#{file_name} end end ROUTE append_to_file "config/routes.rb", route_contents # Restart the server so the new routes go into effect. Rails::Command.invoke "restart" end
def human_name
def human_name file_name.humanize end
def in_code(text)
def in_code(text) "<code class='p-1 rounded bg-gray-500 text-white text-sm'>#{text}</code>" end