# class EventMachine::Hiredis::Client

### Public Class Methods

connect(host = 'localhost', port = 6379) click to toggle source

    # File lib/em-hiredis/client.rb, line 5
    def self.connect(host = 'localhost', port = 6379)
      new(host, port).connect
    end

load_scripts_from(dir) click to toggle source

    # File lib/em-hiredis/client.rb, line 9
    def self.load_scripts_from(dir)
      Dir.glob("#{dir}/*.lua").each do |f|
        name = Regexp.new(/([^\/]*)\.lua$/).match(f)[1]
        lua = File.open(f, 'r').read
        EM::Hiredis.logger.debug { "Registering script: #{name}" }
        EM::Hiredis::Client.register_script(name, lua)
      end
    end

register_script(name, lua) click to toggle source

    # File lib/em-hiredis/client.rb, line 18
    def self.register_script(name, lua)
      sha = Digest::SHA1.hexdigest(lua)
      self.send(:define_method, name.to_sym) { |keys, args=[]|
        eval_script(lua, sha, keys, args)
      }
    end

### Public Instance Methods

eval_script(lua, lua_sha, keys, args) click to toggle source

    # File lib/em-hiredis/client.rb, line 33
    def eval_script(lua, lua_sha, keys, args)
      df = EM::DefaultDeferrable.new
      method_missing(:evalsha, lua_sha, keys.size, *keys, *args).callback(
        &df.method(:succeed)
      ).errback { |e|
        if e.kind_of?(RedisError) && e.redis_error.message.start_with?("NOSCRIPT")
          self.eval(lua, keys.size, *keys, *args)
            .callback(&df.method(:succeed)).errback(&df.method(:fail))
        else
          df.fail(e)
        end
      }
      df
    end

info() { |info| ... } click to toggle source

    # File lib/em-hiredis/client.rb, line 53
    def info
      df = method_missing(:info)
      df.callback { |response|
        info = {}
        response.each_line do |line|
          key, value = line.split(":", 2)
          info[key.to_sym] = value.chomp if value
        end
        df.succeed(info)
      }
      df.callback { |info| yield info } if block_given?
      df
    end

info_commandstats(&blk) click to toggle source

    # File lib/em-hiredis/client.rb, line 67
    def info_commandstats(&blk)
      hash_processor = lambda do |response|
        commands = {}
        response.each_line do |line|
          command, data = line.split(':')
          if data
            c = commands[command.sub('cmdstat_', '').to_sym] = {}
            data.split(',').each do |d|
              k, v = d.split('=')
              c[k.to_sym] = v =~ /\./ ? v.to_f : v.to_i
            end
          end
        end
        blk.call(commands)
      end
      method_missing(:info, 'commandstats', &hash_processor)
    end

monitor(&blk) click to toggle source

    # File lib/em-hiredis/client.rb, line 48
    def monitor(&blk)
      @monitoring = true
      method_missing(:monitor, &blk)
    end

psubscribe(channel) click to toggle source

    # File lib/em-hiredis/client.rb, line 102
    def psubscribe(channel)
      raise "Use pubsub client"
    end

pubsub() click to toggle source

Gives access to a richer interface for pubsub subscriptions on a separate redis connection

    # File lib/em-hiredis/client.rb, line 88
    def pubsub
      @pubsub ||= begin
        PubsubClient.new(@host, @port, @password, @db).connect
      end
    end

punsubscribe(channel) click to toggle source

    # File lib/em-hiredis/client.rb, line 106
    def punsubscribe(channel)
      raise "Use pubsub client"
    end

register_script(name, lua) click to toggle source

    # File lib/em-hiredis/client.rb, line 25
    def register_script(name, lua)
      sha = Digest::SHA1.hexdigest(lua)
      singleton = class << self; self end
      singleton.send(:define_method, name.to_sym) { |keys, args=[]|
        eval_script(lua, sha, keys, args)
      }
    end

subscribe(*channels) click to toggle source

    # File lib/em-hiredis/client.rb, line 94
    def subscribe(*channels)
      raise "Use pubsub client"
    end

unsubscribe(*channels) click to toggle source

    # File lib/em-hiredis/client.rb, line 98
    def unsubscribe(*channels)
      raise "Use pubsub client"
    end