Sha256: 5a19ab53528422ab09f95d2b97790a733b12f76e45c08911555e7c978f09daaf

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

module CanTango
  class Engine
    class Permits < CanTango::Ability::Executor::Base
      include CanTango::Ability::Helper::User

      def initialize ability
        super
      end

      def calc_rules
        # push result of each permit type execution into main ability rules array
        permits.each_pair do |type, permits|
          perm_rules = executor(type, permits).execute!
          rules << perm_rules if !perm_rules.blank?
        end
      end

      def executor type, permits
        CanTango::Ability::Executor::PermitType.new self, type, permits_of(type)
      end

      def engine_name
        :permit
      end

      def valid?
        return false if !valid_mode?
        permits.empty? ? invalid : true
      end

      # by default, only execute permits for which the user
      # has a role or a role group
      # also execute any permit marked as special
      def permits_of type
        @permits ||= permit_factory(type).create
      end

      def permit_class_names
        @permit_class_names ||= permits.map{|p| p.class.to_s}
      end

      protected

      alias_method :cache_key, :engine_name

      def start_execute
        debug "Permit Engine executing..."
      end

      def end_execute
        debug "Done executing Permit Engine"
      end

      def invalid
        debug "No permits found!"
        false
      end

      def permit_factory type
        @permit_factory ||= CanTango::Factory::Permit.new self, type
      end

      def key_method_names
        permits.keys.map do |permit|
          permit_class = available_permits_for permit
          permit_class.hash_key if permit_class && permit_class.respond_to?(:hash_key)
        end.compact
      end
    
      def available_permits_for type
        CanTango.config.permits.types.available
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cantango-permits-0.1.1 lib/cantango/permits_ext/engine/permits.rb