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