Sha256: 7ff77db337ac3890d7258b938843fc118e119e3a442c0c40079fe43b30304b3a

Contents?: true

Size: 726 Bytes

Versions: 1

Compression:

Stored size: 726 Bytes

Contents

module Kan
  class Application
    class InvalidScopeError < StandardError; end

    def initialize(scopes = {})
      raise(InvalidScopeError) unless scopes.is_a?(Hash)
      raise(InvalidScopeError) if scopes.empty?

      @scopes = Hash(scopes)
      @abilities_lists = {}
    end

    def [](ability)
      scope, ability_name = ability.split('.')
      abilities = Array(@scopes[scope.to_sym])

      raise_scope_error(scope) if abilities.empty?
      return @abilities_lists[ability] if @abilities_lists[ability]

      @abilities_lists[ability] = AbilitiesList.new(ability_name, abilities)
    end

    private

    def raise_scope_error(scope)
      raise ArgumentError.new("Invalid scope #{scope}")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kan-0.4.0 lib/kan/application.rb