Sha256: f31e4ce9c265dd1cb7048de025b72c902a0f14f532ca8c60679a14402902e673

Contents?: true

Size: 797 Bytes

Versions: 1

Compression:

Stored size: 797 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)
      raise Miau::NotDefinedError unless policy.respond_to?(action)
      policy.send(action)
    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.1 lib/miau/storage.rb