Sha256: ffbed620b2065f2c39430de5a0114011f8c3dc0cbc8e2de7be5f90b4a2391cf8

Contents?: true

Size: 1 KB

Versions: 9

Compression:

Stored size: 1 KB

Contents

# encoding: utf-8
module Warden
  module Declarable
    
    # Add a declaration and store it in a hash.
    def add(label, declaration = nil, &block)
      base = self.const_get(:Base)

      declaration ||= Class.new(base)
      declaration.class_eval(&block) if block_given?

      check_validity!(label, declaration)
      raise "#{label.inspect} is not a #{base}" unless declaration.ancestors.include?(base)

      _declarations[label] = declaration
    end

    # Update a previously given declaration.
    def update(label, &block)
      declaration = _declarations[label]
      raise "Unknown declaration #{label.inspect}" unless declaration
      add(label, declaration, &block)
    end

    # Provides access to declarations by label
    # :api: public
    def [](label)
      _declarations[label]
    end

    # Clears all declared.
    # :api: public
    def clear!
      _declarations.clear
    end

    # :api: private
    def _declarations
      @declarations ||= {}
    end
    
  end # Declarable
end # Warden

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
warden-0.8.1 lib/warden/declarable.rb
warden-0.8.0 lib/warden/declarable.rb
warden-0.7.0 lib/warden/declarable.rb
warden-0.6.5 lib/warden/declarable.rb
warden-0.6.4 lib/warden/declarable.rb
warden-0.6.3 lib/warden/declarable.rb
warden-0.6.2 lib/warden/declarable.rb
warden-0.6.1 lib/warden/declarable.rb
warden-0.6.0 lib/warden/declarable.rb