class Orchestra::Conductor
Attributes
observers[RW]
Public Class Methods
new(services = {})
click to toggle source
# File lib/orchestra/conductor.rb, line 5 def initialize services = {} @services = services @thread_pool = ThreadPool.new @observers = Set.new self.thread_count = Configuration.thread_count if block_given? raise ArgumentError, "Supplied block to Conductor.new; did you mean to invoke Orchestra::Operation.new do … end?" end end
Public Instance Methods
add_observer(observer)
click to toggle source
# File lib/orchestra/conductor.rb, line 33 def add_observer observer observers << observer end
build_registry(observable)
click to toggle source
# File lib/orchestra/conductor.rb, line 46 def build_registry observable hsh = { :conductor => self } services.each_with_object hsh do |(service_name, _), hsh| service = resolve_service observable, service_name hsh[service_name] = service if service end end
copy_observers(observable)
click to toggle source
# File lib/orchestra/conductor.rb, line 41 def copy_observers observable add_observer = observable.method :add_observer observers.each &add_observer end
delete_observer(observer)
click to toggle source
# File lib/orchestra/conductor.rb, line 37 def delete_observer observer observers.delete observer end
execute(operation, input = {}) { |execution| ... }
click to toggle source
# File lib/orchestra/conductor.rb, line 15 def execute operation, input = {} operation.execute self, input do |execution| copy_observers execution yield execution if block_given? end end
record(*args)
click to toggle source
# File lib/orchestra/conductor.rb, line 22 def record *args recording = Recording.fresh add_observer recording execute *args do |execution| execution.add_observer recording end recording ensure delete_observer recording end
resolve_service(observable, service_name)
click to toggle source
# File lib/orchestra/conductor.rb, line 54 def resolve_service observable, service_name return nil unless services.has_key? service_name service = Util.to_lazy_thunk services[service_name] recording = ServiceRecorder.new observable, service_name recording.wrap service.call self end
thread_count()
click to toggle source
# File lib/orchestra/conductor.rb, line 61 def thread_count @thread_pool.count end
thread_count=(new_count)
click to toggle source
# File lib/orchestra/conductor.rb, line 65 def thread_count= new_count @thread_pool.count = new_count end