Sha256: 8dae434e69c9d5ad0d31abebd2b5d9cd4ac0c48d1cff7625bf915eeb97990136

Contents?: true

Size: 1.42 KB

Versions: 2

Compression:

Stored size: 1.42 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}
  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.1.0 lib/generators/avo/tool_generator.rb
avo-1.1.0.pre.1 lib/generators/avo/tool_generator.rb