lib/rhosync/source_sync.rb in rhosync-2.1.0.beta.1 vs lib/rhosync/source_sync.rb in rhosync-2.1.0.beta.2
- old
+ new
@@ -20,10 +20,37 @@
def delete(client_id)
_measure_and_process_cud('delete',client_id)
end
+ # Pass through CUD to adapter, no data stored
+ def pass_through_cud(cud_params,query_params)
+ res,processed_objects = {},[]
+ begin
+ ['create','update','delete'].each do |op|
+ key,objects = op,cud_params[op]
+ objects.each do |key,value|
+ case op
+ when 'create'
+ @adapter.send(op.to_sym,value)
+ when 'update'
+ value['id'] = key
+ @adapter.send(op.to_sym,value)
+ when 'delete'
+ @adapter.send(op.to_sym,key)
+ end
+ process_objects << key
+ end if objects
+ end
+ rescue Exception => e
+ log "Error in #{op} pass through method: #{e.message}"
+ res['error'] = { 'operation' => op, 'message' => e.message }
+ end
+ res['processed'] = process_objects
+ res.to_json
+ end
+
# Read Operation; params are query arguments
def read(client_id=nil,params=nil)
_read('query',client_id,params)
end
@@ -57,17 +84,19 @@
do_query(params)
end
end
def do_query(params=nil)
+ result = nil
@source.if_need_refresh do
Stats::Record.update("source:query:#{@source.name}") do
return if _auth_op('login') == false
- self.read(nil,params)
+ result = self.read(nil,params)
_auth_op('logoff')
end
end
+ result
end
# Enqueue a job for the source based on job type
def async(job_type,queue_name,client_id=nil,params=nil)
SourceJob.queue = queue_name
@@ -208,34 +237,37 @@
end
modified.size
end
# Metadata Operation; source adapter returns json
- def _get_metadata
- if @adapter.respond_to?(:metadata)
- metadata = @adapter.metadata
- if metadata
- @source.put_value(:metadata,metadata)
- @source.put_value(:metadata_sha1,Digest::SHA1.hexdigest(metadata))
+ def _get_data(method)
+ if @adapter.respond_to?(method)
+ data = @adapter.send(method)
+ if data
+ @source.put_value(method,data)
+ @source.put_value("#{method}_sha1",Digest::SHA1.hexdigest(data))
end
end
end
# Read Operation; params are query arguments
def _read(operation,client_id,params=nil)
errordoc = nil
+ result = nil
begin
if operation == 'search'
client = Client.load(client_id,{:source_name => @source.name})
errordoc = client.docname(:search_errors)
compute_token(client.docname(:search_token))
- @adapter.search(params)
+ result = @adapter.search(params)
@adapter.save(client.docname(:search))
else
errordoc = @source.docname(:errors)
- _get_metadata
- @adapter.do_query(params)
+ [:metadata,:schema].each do |method|
+ _get_data(method)
+ end
+ result = @adapter.do_query(params)
end
# operation,sync succeeded, remove errors
Store.lock(errordoc) do
Store.flash_data(errordoc)
end
@@ -244,9 +276,9 @@
log "SourceAdapter raised #{operation} exception: #{e}"
Store.lock(errordoc) do
Store.put_data(errordoc,{"#{operation}-error"=>{'message'=>e.message}},true)
end
end
- true
+ result
end
end
end