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