class Rabbitmq::Async::Service

Attributes

arg_list[R]
klass[R]
method[R]
object[R]
object_method[R]

Public Class Methods

new(params) click to toggle source
# File lib/rabbitmq/async/service.rb, line 6
def initialize(params)
  @object = params["object"] || (raise "Object Name Missing")
  @method = params["method"] || (raise "Method Name Missing")
  @arg_list = params["arg_list"] || (raise "Argument List Misisng")
  @object_method = params["object_method"] || false
  @klass = params["class"] || nil
  @arg_list = parse_arg(@arg_list)
end

Public Instance Methods

perform() click to toggle source
# File lib/rabbitmq/async/service.rb, line 15
def perform
  object_method ? perform_object_method : perform_class_method
end
perform_class_method() click to toggle source
# File lib/rabbitmq/async/service.rb, line 19
def perform_class_method
  object.constantize.send(method.to_sym, *arg_list)
end
perform_object_method() click to toggle source
# File lib/rabbitmq/async/service.rb, line 23
def perform_object_method
  obj = klass.constantize.send(:find, object["id"])
  obj.send(method.to_sym, *arg_list)
end

Private Instance Methods

parse_arg(arg_list) click to toggle source
# File lib/rabbitmq/async/service.rb, line 30
def parse_arg(arg_list)
  models = ActiveRecord::Base.subclasses.collect { |type| type.name }.sort
  new_arg_list = []
  arg_list.each do |arg|
    if arg.class == ActiveSupport::HashWithIndifferentAccess
      klass_key = arg.keys.first
      if models.include? klass_key
        #TODO  add validation for Hash of object
        if arg[klass_key].class == Array 
          new_arg_list << arg[klass_key].map{ |x| klass_key.constantize.find(x["id"])}
        else
          new_arg_list << klass_key.constantize.find(arg[klass_key]["id"])
        end
      else
        new_arg_list << arg
      end
    else
      new_arg_list << arg
    end
  end
  new_arg_list
end