Class: Wye::Switch

Inherits:
Object
  • Object
show all
Defined in:
lib/wye/switch.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_class) ⇒ Switch

Returns a new instance of Switch.



5
6
7
8
9
# File 'lib/wye/switch.rb', line 5

def initialize(base_class)
  @base_class = base_class
  @thread_to_class_to_alternate = {}
  @mutex = Mutex.new
end

Instance Attribute Details

#base_classObject (readonly)

Returns the value of attribute base_class.



3
4
5
# File 'lib/wye/switch.rb', line 3

def base_class
  @base_class
end

Instance Method Details

#current_alternate(klass, cta = nil) ⇒ Object



11
12
13
14
15
16
17
18
19
20
# File 'lib/wye/switch.rb', line 11

def current_alternate(klass, cta = nil)
  return nil unless klass

  cta ||= class_to_alternate
  alternate = cta[klass]

  return alternate.first unless alternate.nil? || alternate.empty?
  return nil if klass == base_class
  current_alternate(klass.superclass, cta)
end

#on(klass, alternate) ⇒ Object



22
23
24
25
26
27
28
29
# File 'lib/wye/switch.rb', line 22

def on(klass, alternate)
  class_to_alternate[klass] ||= []
  class_to_alternate[klass].unshift(alternate)
  yield
ensure
  class_to_alternate[klass].shift
  clean_up_after_dead_threads
end