Class/Module Index [+]

Quicksearch

Tins::Deflect

See examples/recipe.rb and examples/recipe2.rb how this works at the moment.

Public Class Methods

deflect?(from, id) click to toggle source

Return true if method id is deflected from class from, otherwise return false.

# File lib/tins/dslkit.rb, line 384
def self.deflect?(from, id)
  Deflect.deflecting && Deflect.deflecting.member?(from, id)
end

Public Instance Methods

deflect(from, id, deflector) click to toggle source

Start deflecting method calls named id to the from class using the Deflector instance deflector. After that yield to the given block and stop deflecting again.

# File lib/tins/dslkit.rb, line 397
def deflect(from, id, deflector)
  @@sync.synchronize do
    begin
      deflect_start(from, id, deflector)
      yield
    ensure
      deflect_stop(from, id)
    end
  end
end
deflect?(from, id) click to toggle source

Return true if method id is deflected from class from, otherwise return false.

# File lib/tins/dslkit.rb, line 390
def deflect?(from, id)
  Deflect.deflect?(from, id)
end
deflect_start(from, id, deflector) click to toggle source

Start deflecting method calls named id to the from class using the Deflector instance deflector.

# File lib/tins/dslkit.rb, line 364
def deflect_start(from, id, deflector)
  @@sync.synchronize do
    Deflect.deflecting ||= DeflectorCollection.new
    Deflect.deflecting.member?(from, id) and
      raise DeflectError, "#{from}##{id} is already deflected"
    Deflect.deflecting.add(from, id, deflector)
    from.class_eval do
      define_method(id) do |*args|
        if Deflect.deflecting and d = Deflect.deflecting.find(self.class, id)
          d.call(self, id, *args)
        else
          super(*args)
        end
      end
    end
  end
end
deflect_stop(from, id) click to toggle source

Stop deflection method calls named id to class from.

# File lib/tins/dslkit.rb, line 409
def deflect_stop(from, id)
  @@sync.synchronize do
    Deflect.deflecting.delete(from, id) or
      raise DeflectError, "#{from}##{id} is not deflected from"
    from.instance_eval { remove_method id }
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.