Sha256: 22de8b497672e6b49d3fb48d1691cf5ea3724bc845dccd07f95961b924bdf36a

Contents?: true

Size: 1.82 KB

Versions: 13

Compression:

Stored size: 1.82 KB

Contents

# frozen_string_literal: true

module ActionPolicy
  module Policy
    # Adds rules aliases support and ability to specify
    # the default rule.
    #
    #   class ApplicationPolicy
    #     include ActionPolicy::Policy::Core
    #     include ActionPolicy::Policy::Aliases
    #
    #     # define which rule to use if `authorize!` called with
    #     # unknown rule
    #     default_rule :manage?
    #
    #     alias_rule :publish?, :unpublish?, to: :update?
    #   end
    #
    # Aliases are used only during `authorize!` call (and do not act like _real_ aliases).
    #
    # Aliases useful when combined with `CachedApply` (since we can cache only the target rule).
    module Aliases
      DEFAULT = :__default__

      class << self
        def included(base)
          base.extend ClassMethods
        end
      end

      def resolve_rule(activity)
        self.class.lookup_alias(activity) ||
          (activity if respond_to?(activity)) ||
          self.class.lookup_default_rule ||
          super
      end

      module ClassMethods # :nodoc:
        def default_rule(val)
          rules_aliases[DEFAULT] = val
        end

        def alias_rule(*rules, to:)
          rules.each do |rule|
            rules_aliases[rule] = to
          end
        end

        def lookup_alias(rule)
          rules_aliases[rule]
        end

        def lookup_default_rule
          rules_aliases[DEFAULT]
        end

        def rules_aliases
          return @rules_aliases if instance_variable_defined?(:@rules_aliases)

          @rules_aliases =
            if superclass.respond_to?(:rules_aliases)
              superclass.rules_aliases.dup
            else
              {}
            end
        end

        def method_added(name)
          rules_aliases.delete(name) if public_method_defined?(name)
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
action_policy-0.4.4 lib/action_policy/policy/aliases.rb
action_policy-0.4.3 lib/action_policy/policy/aliases.rb
action_policy-0.4.2 lib/action_policy/policy/aliases.rb
action_policy-0.4.1 lib/action_policy/policy/aliases.rb
action_policy-0.4.0 lib/action_policy/policy/aliases.rb
action_policy-0.3.4 lib/action_policy/policy/aliases.rb
action_policy-0.3.3 lib/action_policy/policy/aliases.rb
action_policy-0.3.2 lib/action_policy/policy/aliases.rb
action_policy-0.3.1 lib/action_policy/policy/aliases.rb
action_policy-0.3.0 lib/action_policy/policy/aliases.rb
action_policy-0.3.0.beta1 lib/action_policy/policy/aliases.rb
action_policy-0.2.4 lib/action_policy/policy/aliases.rb
action_policy-0.2.3 lib/action_policy/policy/aliases.rb