Sha256: d0b03f926e327f947d84313c5d3267223641301d52160fb9f3a20eb45c933633

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

# Generate a controller, routes and view files for a WebUI instance

require 'katapult/generator'
require 'generators/katapult/views/views_generator'

module Katapult
  module Generators
    class WebUIGenerator < Katapult::Generator

      desc 'Generate a Web User Interface'

      check_class_collision suffix: 'Controller'
      source_root File.expand_path('../templates', __FILE__)


      def create_controller_file
        template 'controller.rb', File.join('app', 'controllers', "#{ model_name(:variables) }_controller.rb")
      end

      def add_route
        route = model_name(:symbols)
        routes = File.read('config/routes.rb')

        if routes =~ /^\s+resources #{ route }/
          say_status :warn, <<MESSAGE, :red
Routes for #{ route } already exist! Not updated.
In order to keep existing routes created by the user, the config/routes.rb file
is not wiped on model transformation. To have Katapult update the #{ route }
route for you, delete it before transforming the application model.
MESSAGE
        elsif web_ui.crud_only?
          route "resources #{ route }"
        else
          route render_partial('_route.rb')
        end
      end

      def generate_views
        Generators::ViewsGenerator.new(web_ui, options).invoke_all
      end

      no_tasks do
        def method_name(name)
          case name
          when :load_collection then "load_#{model_name :variables}"
          when :load_object     then "load_#{model_name :variable}"
          when :build           then "build_#{model_name :variable}"
          when :save            then "save_#{model_name :variable}"
          when :params          then "#{model_name :variable}_params"
          when :scope           then "#{model_name :variable}_scope"
          end
        end

        def model_name(kind = nil)
          web_ui.model_name(kind)
        end
      end

      private

      def web_ui
        @element
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
katapult-0.5.0 lib/generators/katapult/web_ui/web_ui_generator.rb