Sha256: 87aa0a34ee9802107a92e3b925331ebb40c8c627662566edb67d9fc33ef21718

Contents?: true

Size: 1.5 KB

Versions: 21

Compression:

Stored size: 1.5 KB

Contents

# frozen_string_literal: true

module ActionPolicy
  module I18n # :nodoc:
    DEFAULT_UNAUTHORIZED_MESSAGE = "You are not authorized to perform this action"

    class << self
      def full_message(policy_class, rule, details = nil)
        candidates = candidates_for(policy_class, rule)

        options = {scope: :action_policy}
        options.merge!(details) unless details.nil?

        ::I18n.t(
          candidates.shift,
          default: candidates,
          **options
        )
      end

      private

      def candidates_for(policy_class, rule)
        policy_hierarchy = policy_class.ancestors.select { |_1| _1.respond_to?(:identifier) }
        [
          *policy_hierarchy.map { |klass| :"policy.#{klass.identifier}.#{rule}" },
          :"policy.#{rule}",
          :unauthorized,
          DEFAULT_UNAUTHORIZED_MESSAGE
        ]
      end
    end

    ActionPolicy::Policy::FailureReasons.prepend(Module.new do
      def full_messages
        reasons.flat_map do |policy_klass, rules|
          rules.flat_map do |rule|
            if rule.is_a?(::Hash)
              rule.map do |key, details|
                ActionPolicy::I18n.full_message(policy_klass, key, details)
              end
            else
              ActionPolicy::I18n.full_message(policy_klass, rule)
            end
          end
        end
      end
    end)

    ActionPolicy::Policy::ExecutionResult.prepend(Module.new do
      def message
        ActionPolicy::I18n.full_message(policy, rule, details)
      end
    end)
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
action_policy-0.7.3 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.7.2 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.7.1 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.7.0 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.6.9 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.6.8 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.6.7 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.6.6 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.6.5 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.6.4 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.6.3 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.6.2 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.6.1 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.6.0 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.5.7 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.5.6 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.5.5 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.5.4 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.5.3 lib/.rbnext/2.7/action_policy/i18n.rb
action_policy-0.5.2 lib/.rbnext/2.7/action_policy/i18n.rb