Sha256: 598e35ca6bf6f3d35415b7699f331c532aa38c4f9a5c3e38f0637df9bdd3b30e

Contents?: true

Size: 809 Bytes

Versions: 2

Compression:

Stored size: 809 Bytes

Contents

require 'dicer/context/description'

module Dicer
  class Context
    def self.descriptions
      @descriptions ||=
        self < Dicer::Context ?
          self.superclass.descriptions.dup :
          {}
    end

    def self.describe(klass, &block)
      description = Description.new(klass, &block)
      klass = description.described_class

      if descriptions.has_key?(klass)
        descriptions[klass].merge!(description)
      else
        descriptions[klass] = description
      end
    end

    def supply(object, role = nil)
      description = self.class.descriptions[object.class]
      delegator = description ?
        (role.nil? ?
          description.delegator :
          description.delegator_for(role)) :
        nil

      delegator ? delegator.new(object) : object
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
dicer-0.3.0 lib/dicer/context.rb
dicer-0.2.0 lib/dicer/context.rb