Sha256: 99e116b3531f53b44af0b26686947dc96479567bbacaca4f4b74e1cc892023d5

Contents?: true

Size: 908 Bytes

Versions: 8

Compression:

Stored size: 908 Bytes

Contents

module Magent
  class AsyncChannel < GenericChannel
    def push(target, method_chain, priority)
      if target.kind_of?(Class)
        enqueue([target.to_s, nil, method_chain], priority)
      elsif target.class.respond_to?(:find) && target.respond_to?(:id)
        enqueue([target.class.to_s, target.id, method_chain], priority)
      else
        raise ArgumentError, "I don't know how to handle #{target.inspect}"
      end
    end

    def process!(message)
      klass, id, method_chain = message

      return false if method_chain.nil?

      target = resolve_target(klass, id)

      method_chain.each do |c|
        target = target.send(c[0], *c[1])
      end

      true
    end

    private
    def resolve_target(klass, id)
      klass = Object.module_eval(klass) if klass.kind_of?(String)

      if id
        klass.find(id)
      else
        klass
      end
    end
  end # AsyncChannel
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
magent-0.6.2 lib/magent/async_channel.rb
magent-0.6.1 lib/magent/async_channel.rb
magent-0.6.0 lib/magent/async_channel.rb
magent-0.5.4 lib/magent/async_channel.rb
magent-0.5.3 lib/magent/async_channel.rb
magent-0.5.2 lib/magent/async_channel.rb
magent-0.5.1 lib/magent/async_channel.rb
magent-0.5.0 lib/magent/async_channel.rb