lib/runtime.rb in factor-0.5.06 vs lib/runtime.rb in factor-0.5.07
- old
+ new
@@ -28,12 +28,12 @@
@sockets.each { |s| s.close }
exit
end
@connectors = {}
- connectors.each do |connector_id, connector_url|
- @connectors[connector_id] = Listener.new(connector_url)
+ flat_hash(connectors).each do |key, connector_url|
+ @connectors[key] = Listener.new(connector_url)
end
@credentials = {}
credentials.each do |connector_id, credential_settings|
@credentials[connector_id] = credential_settings
@@ -45,15 +45,19 @@
instance_eval(workflow_definition)
end
end
def listen(service_ref, params = {}, &block)
- service_id, listener_id = service_ref.split('::')
- ws = @connectors[service_id.to_sym].listener(listener_id)
+ service_map = service_ref.split('::')
+ service_id = service_map.first
+ listener_id = service_map.last
+ service_key = service_map[0..-2].map{|k| k.to_sym}
- handle_on_open(service_id, listener_id, 'Listener', ws, params)
+ ws = @connectors[service_key].listener(listener_id)
+ handle_on_open(service_ref, 'Listener', ws, params)
+
ws.on :close do
error 'Listener disconnected'
if @reconnect
warn 'Reconnecting...'
sleep 3
@@ -66,13 +70,13 @@
case listener_response['type']
when'start_workflow'
success "Workflow '#{service_id}::#{listener_id}' triggered"
error_handle_call(listener_response, &block)
when 'return'
- success "Workflow '#{service_id}::#{listener_id}' started"
+ success "Workflow '#{service_ref}' started"
when 'fail'
- error "Workflow '#{service_id}::#{listener_id}' failed to start"
+ error "Workflow '#{service_ref}' failed to start"
when 'log'
listener_response['message'] = " #{listener_response['message']}"
log_message(listener_response)
else
error "Unknown listener response: #{listener_response}"
@@ -98,13 +102,17 @@
@sockets << ws
end
def run(service_ref, params = {}, &block)
- service_id, action_id = service_ref.split('::')
- ws = @connectors[service_id.to_sym].action(action_id)
+ service_map = service_ref.split('::')
+ service_id = service_map.first
+ action_id = service_map.last
+ service_key = service_map[0..-2].map{|k| k.to_sym}
+ ws = @connectors[service_key].action(action_id)
+
handle_on_open(service_id, action_id, 'Action', ws, params)
ws.on :error do
error 'Connection dropped while calling action'
end
@@ -112,16 +120,16 @@
ws.on :message do |event|
action_response = JSON.parse(event.data)
case action_response['type']
when 'return'
ws.close
- success "Action '#{service_id}::#{action_id}' responded"
+ success "Action '#{service_ref}' responded"
error_handle_call(action_response, &block)
when 'fail'
ws.close
error " #{action_response['message']}"
- error "Action '#{service_id}::#{action_id}' failed"
+ error "Action '#{service_ref}' failed"
when 'log'
action_response['message'] = " #{action_response['message']}"
log_message(action_response)
else
error "Unknown action response: #{action_response}"
@@ -133,13 +141,22 @@
@sockets << ws
end
private
- def handle_on_open(service_id, action_id, dsl_type, ws, params)
+ def flat_hash(h,f=[],g={})
+ return g.update({ f=>h }) unless h.is_a? Hash
+ h.each { |k,r| flat_hash(r,f+[k],g) }
+ g
+ end
+
+ def handle_on_open(service_ref, dsl_type, ws, params)
+ service_map = service_ref.split('::')
+ service_id = service_map.first
+
ws.on :open do
params.merge!(@credentials[service_id.to_sym] || {})
- success "#{dsl_type.capitalize} '#{service_id}::#{action_id}' called"
+ success "#{dsl_type.capitalize} '#{service_ref}' called"
ws.send(params.to_json)
end
end
def error_handle_call(listener_response, &block)