Sha256: 3d04bf71b2ba8cf05dc2dc903d7f20721a660e085703567921eb84ecb102c64d

Contents?: true

Size: 855 Bytes

Versions: 1

Compression:

Stored size: 855 Bytes

Contents

# frozen_string_literal: true

require "singleton"

module Miau
  class PolicyStorage
    include Singleton

    attr_reader :policies

    def initialize
      @policies = {}
    end

    def run(klass, action, user, resource)
      policy = policy(klass, user, resource)
      return policy.send(action) if policy.respond_to?(action)

      msg = "class <#{klass} action <#{action}>"
      raise Miau::NotDefinedError, msg
    end

    private

    def policy(klass, user, resource)
      result = @policies[klass]
      if result
        result.user = user
        result.resource = resource
        return result
      end

      create_policy(klass, user, resource)
    end

    def create_policy(klass, user, resource)
      str = "#{klass}Policy"
      result = str.constantize.new(user, resource)
      @policies[klass] = result
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
miau-0.1.2 lib/miau/storage.rb