Sha256: cd2ed5d94eea62d1bfc25300aca79162fae8a842fa35430acc87a3a2e2a80f47

Contents?: true

Size: 1.82 KB

Versions: 2

Compression:

Stored size: 1.82 KB

Contents

module Carnival
  module Dsl
    extend ActiveSupport::Concern

    included do
      [:index_as, :actions, :batch_actions, :items_per_page,
       :model_names, :fields, :scopes, :forms]
        .each do |variable_name|
        class_variable_set("@@#{variable_name}", {})
      end
    end

    module ClassMethods
      def index_as(type)
        class_variable_get('@@index_as')[presenter_class_name] = type
      end

      def action(name, params = {})
        class_variable_get('@@actions')[presenter_class_name] ||= {}
        class_variable_get('@@actions')[presenter_class_name][name] = Carnival::Action.new(name, params)
      end

      def batch_action(name, params = {})
        class_variable_get('@@batch_actions')[presenter_class_name] ||= {}
        class_variable_get('@@batch_actions')[presenter_class_name][name] = Carnival::BatchAction.new(self.new, name, params)
      end

      def items_per_page(per_page)
        class_variable_get('@@items_per_page')[presenter_class_name] ||= {}
        class_variable_get('@@items_per_page')[presenter_class_name][:items_per_page] = per_page
      end

      def scope(name, params = {})
        instantiate_element(class_variable_get('@@scopes'), Carnival::Scope, name.to_sym, params)
      end

      def field(name, params = {})
        instantiate_element(class_variable_get('@@fields'), Carnival::Field, name.to_sym, params)
      end

      def form(action, params = {})
        instantiate_element(class_variable_get('@@forms'), Carnival::Form, name.to_sym, params)
      end

      def model_name(name)
        class_variable_get('@@model_names')[presenter_class_name] = name
      end

      def instantiate_element(container, klass, name, params)
        container[presenter_class_name] ||= {}
        container[presenter_class_name][name] = klass.new(name, params)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
carnival-0.3.1 app/presenters/carnival/dsl.rb
carnival-0.3.0 app/presenters/carnival/dsl.rb