Sha256: 7f4a0789c7ea2e0e9ad19ef4a4bc4fc0901d1877c37b563d5853bfa640ddd7f3

Contents?: true

Size: 1.67 KB

Versions: 2

Compression:

Stored size: 1.67 KB

Contents

module Rhoconnect
  module Handler
    module Changes
      class Runner
      	attr_accessor :source,:client,:engine,:model,:params,:operations

        def initialize(operations,model,client,route_handler, params = {})
          raise ArgumentError.new(UNKNOWN_CLIENT) unless client
          raise ArgumentError.new(UNKNOWN_SOURCE) unless (model and model.source)
          raise ArgumentError.new('Invalid app for source') unless model.source.app

     	    @source,@client = model.source,client
          @model = model
     	    @client.last_sync = Time.now if @client
     	    @params = params
          @operations = operations
     	    @engine = Rhoconnect::Handler::Changes::Engine.new(@operations, @model, route_handler, @params)
        end

        def run
          _process_blobs(params)
          processed = 0
          operations.each do |op|
            key,value = op,params[op]
            processed += _receive_cud(key,value) if value
          end
          @engine.do_cud
        end

        private
        def _receive_cud(operation,params)
          return 0 if not operations.include?(operation)
          @source.push_queue(operation,@client.id,params,true)
          return 1
        end
        
        def _process_blobs(params)
          unless params[:blob_fields].nil?
            [:create,:update].each do |utype|
              objects = params[utype] || {}
              objects.each do |id,obj|
                params[:blob_fields].each do |field|
                  blob = params["#{field}-#{id}"]
                  obj[field] = @model.store_blob(obj,field,blob)
                end
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rhoconnect-4.0.0.beta.10 lib/rhoconnect/handler/changes/runner.rb
rhoconnect-4.0.0.beta.12 lib/rhoconnect/handler/changes/runner.rb