Class: Tins::Deflect::DeflectorCollection

Inherits:
Object
  • Object
show all
Defined in:
lib/tins/dslkit.rb

Overview

This class implements a collection of deflectors, to make them available by emulating Ruby’s message dispatch.

Instance Method Summary collapse

Constructor Details

#initializeDeflectorCollection

Returns a new instance of DeflectorCollection.



318
319
320
# File 'lib/tins/dslkit.rb', line 318

def initialize
  @classes = {}
end

Instance Method Details

#add(klass, id, deflector) ⇒ Object

Add a new deflector deflector for class klass and method name id, and return self.



325
326
327
328
329
330
# File 'lib/tins/dslkit.rb', line 325

def add(klass, id, deflector)
  k = @classes[klass]
  k = @classes[klass] = {} unless k
  k[id.to_s] = deflector
  self
end

#delete(klass, id) ⇒ Object

Delete the deflecotor class klass and method name id. Returns the deflector if any was found, otherwise returns true.



340
341
342
343
344
345
346
# File 'lib/tins/dslkit.rb', line 340

def delete(klass, id)
  if k = @classes[klass]
    d = k.delete id.to_s
    @classes.delete klass if k.empty?
    d
  end
end

#find(klass, id) ⇒ Object

Try to find a deflector for class klass and method id and return it. If none was found, return nil instead.



350
351
352
353
354
355
356
# File 'lib/tins/dslkit.rb', line 350

def find(klass, id)
  klass.ancestors.find do |k|
    if d = @classes[k] and d = d[id.to_s]
      return d
    end
  end
end

#member?(klass, id) ⇒ Boolean

Return true if messages are deflected for class klass and method name id, otherwise return false.

Returns:

  • (Boolean)


334
335
336
# File 'lib/tins/dslkit.rb', line 334

def member?(klass, id)
  !!(k = @classes[klass] and k.key?(id.to_s))
end