Sha256: 20239e14b04404224c18137892587d13a89071582181c34bbd2afafb11e23c46

Contents?: true

Size: 1.54 KB

Versions: 3

Compression:

Stored size: 1.54 KB

Contents

begin
  require "remcached"
rescue LoadError => error
  raise "Missing EM-Synchrony dependency: gem install remcached"
end

module Memcached
  class << self

    def connect(servers)
      Memcached.servers = servers

      f = Fiber.current
      @t = EM::PeriodicTimer.new(0.01) do
        if Memcached.usable?
          @t.cancel
          f.resume(self)
        end
      end

      Fiber.yield
    end

    %w[add get set delete].each do |type|
      class_eval %[
        def a#{type}(contents, &callback)
          df = EventMachine::DefaultDeferrable.new
          df.callback &callback

          cb = Proc.new { |res| df.succeed(res) }
          operation Request::#{type.capitalize}, contents, &cb

            df
        end

        def #{type}(contents, &callback)
          fiber = Fiber.current

          df = a#{type}(contents, &Proc.new { |res| fiber.resume(res) })
          df.callback &callback

          Fiber.yield
        end
      ]
    end

    %w[add get set delete].each do |type|
       class_eval %[
         def amulti_#{type}(contents, &callback)
           df = EventMachine::DefaultDeferrable.new
           df.callback &callback

           cb = Proc.new { |res| df.succeed(res) }
           multi_operation Request::#{type.capitalize}, contents, &cb

             df
         end

         def multi_#{type}(contents, &callback)
           fiber = Fiber.current

           df = amulti_#{type}(contents, &Proc.new { |res| fiber.resume(res) })
           df.callback &callback

           Fiber.yield
         end
       ]
     end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
em-synchrony-0.3.0.beta.1 lib/em-synchrony/em-remcached.rb
em-synchrony-0.2.0 lib/em-synchrony/em-remcached.rb
em-synchrony-0.1.5 lib/em-synchrony/em-remcached.rb