Sha256: 108f68177a835e561a044b3a16e2e8da7ad536702d84a444d1b3a3571bc31a8f

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

# frozen_string_literal: true

require "singleton"
require "yaml"

module Miau
  class PolicyRun
    include Singleton

    # return method[s]
    # klass and action are symbols
    # Priority:
    #   - method of <klass>Policy
    #   - method of <klass>Policy specified by "miau action, method"
    #   - method of ApplicationPolicy (independent of klass)
    #   - method of ApplicationPolicy specified by "miau action, method"
    #   - nil
    # returns method_name[s]

    def find_methods(policy, klass, action)
      return action if policy.respond_to?(action)

      hsh = PolicyStorage.instance.policies[klass]
      return nil unless hsh

      hsh[action]
    end

    def runs(policy, actions)
      [actions].flatten.each { |action|
        raise_undef(policy, action) unless policy&.respond_to?(action)

        return false unless policy.send(action)
      }
      true
    end

    def raise_undef(policy, action)
      msg = "NotDefined policy <#{policy}> action <#{action}>"
      raise NotDefinedError, msg
    end

    def raise_authorize(controller, action)
      msg = "NotAuthorized controller <#{controller}> action <#{action}>"
      raise NotAuthorizedError, msg
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
miau-1.1.6 lib/miau/run.rb