Class: DSLKit::Deflect::DeflectorCollection

Inherits:
Object
  • Object
show all
Defined in:
lib/dslkit/polite.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.



416
417
418
# File 'lib/dslkit/polite.rb', line 416

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.



423
424
425
426
427
428
# File 'lib/dslkit/polite.rb', line 423

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.



438
439
440
441
442
443
444
# File 'lib/dslkit/polite.rb', line 438

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.



448
449
450
451
452
453
454
# File 'lib/dslkit/polite.rb', line 448

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)


432
433
434
# File 'lib/dslkit/polite.rb', line 432

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