Sha256: 9bbaa440acd6136c519b10e26f78f229b93ddc66b6f40b487d6a0a122a52061f

Contents?: true

Size: 1.49 KB

Versions: 2

Compression:

Stored size: 1.49 KB

Contents

require "rails/generators"
require "fileutils"

module Generators
  module Avo
    class ToolGenerator < ::Rails::Generators::Base
      argument :name, type: :string, required: true

      source_root File.expand_path("templates", __dir__)

      namespace "avo:tool"

      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
  def #{file_name}
    @page_title = "#{human_name}"
    add_breadcrumb "#{human_name}"
  end
          METHOD
        end

        # Add view file
        template "tool/view.tt", "app/views/avo/tools/#{file_name}.html.erb"

        route <<-ROUTE
namespace :#{::Avo.configuration.root_path.gsub('/', '')} do
  get "#{file_name}", to: "tools##{file_name}"
end
        ROUTE
      end

      no_tasks do
        def file_name
          name.to_s.underscore
        end

        def controller_name
          file_name.to_s
        end

        def human_name
          file_name.humanize
        end

        def in_code(text)
          "<code class='p-1 rounded bg-gray-500 text-white text-sm'>#{text}</code>"
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
avo-1.3.0.pre.1 lib/generators/avo/tool_generator.rb
avo-1.2.2 lib/generators/avo/tool_generator.rb