Sha256: af718dd8a79f1e6b456c579844b832d1c13048aeba400682cadca0557616edba

Contents?: true

Size: 1.42 KB

Versions: 8

Compression:

Stored size: 1.42 KB

Contents

module Puffer
  module Controller
    class Actions < Array
      attr_accessor :controller
      attr_accessor :scope

      def initialize scope
        @scope = scope.to_s
        super()
      end

      %w(match get post put delete).each do |method|
        define_method method do |*route|
          push action_class.new(controller, *route.unshift(method))
        end
      end

      def action_class
        "Puffer::Controller::#{scope.camelize}Action".constantize
      end

    end

    class Action
      attr_accessor :controller, :route

      def initialize controller, *route
        @controller, @route = controller, route
        options = route.extract_options!
        @display = options.key?(:display) ? options.delete(:display) : true
        route.push options
      end

      def method
        @method ||= route.first.to_sym
      end

      def action
        @action ||= route.second.to_sym
      end

      def label
        I18n.t(action, :scope => i18n_scope, :default => action.to_s.humanize)
      end

      def i18n_scope
        [:puffer, controller.controller_path.gsub(/\//, '.'), action_scope]
      end

      def action_scope
        :actions
      end

      def display?
        @display
      end

    end

    class MemberAction < Action

      def action_scope
        :members
      end

    end

    class CollectionAction < Action

      def action_scope
        :collections
      end

    end

  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
puffer-0.1.1 lib/puffer/controller/actions.rb
puffer-0.1.0 lib/puffer/controller/actions.rb
puffer-0.0.32 lib/puffer/controller/actions.rb
puffer-0.0.31 lib/puffer/controller/actions.rb
puffer-0.0.30 lib/puffer/controller/actions.rb
puffer-0.0.29 lib/puffer/controller/actions.rb
puffer-0.0.28 lib/puffer/controller/actions.rb
puffer-0.0.26 lib/puffer/controller/actions.rb