class RedisBrowser::Browser

Public Class Methods

new(conn = {}) click to toggle source
# File lib/redis-browser/browser.rb, line 3
def initialize(conn = {})
  @conn = conn
end

Public Instance Methods

delete(pattern) click to toggle source
# File lib/redis-browser/browser.rb, line 109
def delete(pattern)
  redis.del(redis.keys(pattern))
end
get(key, opts = {}) click to toggle source
# File lib/redis-browser/browser.rb, line 113
def get(key, opts = {})
  type = redis.type(key)
  data = case type
  when "string"
    type, value = item_type(redis.get(key))
    {:value => value, :type => type}
  when "list"
    get_list(key, opts)
  when "set"
    get_set(key)
  when "zset"
    get_zset(key)
  when "hash"
    get_hash(key)
  else
    get_keys(key)
  end

  {
    :full => key,
    :type => type
  }.merge(data)
end
get_hash(key) click to toggle source
# File lib/redis-browser/browser.rb, line 89
def get_hash(key)
  value = Hash[redis.hgetall(key).map do |k,v|
    type, value = item_type(v)
    [k, {:type => type, :value => value}]
  end]

  {:value => value}
end
get_keys(key) click to toggle source
# File lib/redis-browser/browser.rb, line 98
def get_keys(key)
  key ||= ""
  key << "*" unless key.end_with?("*")

  values = redis.keys(key).map do |k|
    {:name => k, :full => k}
  end

  {:values => values}
end
get_list(key, opts = {}) click to toggle source
# File lib/redis-browser/browser.rb, line 58
def get_list(key, opts = {})
  start = opts[:start] ? opts[:start].to_i : 0
  stop  = opts[:stop] ? opts[:stop].to_i : 99

  length = redis.llen(key)
  values = redis.lrange(key, start, stop).map.with_index do |e, i|
    type, value = item_type(e)
    {:type => type, :value => value, :index => start + i}
  end

  {:length => length, :values => values}
end
get_set(key) click to toggle source
# File lib/redis-browser/browser.rb, line 71
def get_set(key)
  values = redis.smembers(key).map do |e|
    type, value = item_type(e)
    {:type => type, :value => value}
  end

  {:values => values }
end
get_zset(key) click to toggle source
# File lib/redis-browser/browser.rb, line 80
def get_zset(key)
  values = redis.zrange(key, 0, -1, :withscores => true).map do |e, score|
    type, value = item_type(e)
    {:type => type, :value => value, :score => score}
  end

  {:values => values }
end
item_type(e) click to toggle source
# File lib/redis-browser/browser.rb, line 50
def item_type(e)
  begin
    ["json", MultiJson.decode(e)]
  rescue MultiJson::LoadError
    ["string", e]
  end
end
keys(namespace = nil) click to toggle source
# File lib/redis-browser/browser.rb, line 17
def keys(namespace = nil)
  begin
    if namespace.to_s.strip.empty?
      pattern = "*"
      namespace = ""
    else
      pattern = namespace + "*"
    end
  rescue ArgumentError
    pattern, namespace = "*", ""
  end

  redis.keys(pattern).inject({}) do |acc, key|
    key.slice!(namespace) if namespace

    ns, sep = split_key(key)

    begin
      unless ns.strip.empty?
        acc[ns] ||= {
          :name => ns,
          :full => namespace + ns + sep.to_s,
          :count => 0
        }
        acc[ns][:count] += 1
      end
    rescue ArgumentError
    end

    acc
  end.values.sort_by {|e| e[:name] }
end
ping() click to toggle source
# File lib/redis-browser/browser.rb, line 137
def ping
  redis.ping == "PONG"
  {:ok => 1}
rescue => ex
  {:error => ex.message}
end
redis() click to toggle source
# File lib/redis-browser/browser.rb, line 144
def redis
  @redis ||= begin
    r = Redis.new(@conn)
    auth = @conn['auth']
    r.auth(auth) if auth
    r
  end
end
split_key(key) click to toggle source
# File lib/redis-browser/browser.rb, line 7
def split_key(key)
  if key =~ /^(.+?)(:+|\/+|\.+).+$/
    [$1, $2]
  else
    [key, nil]
  end
rescue ArgumentError
  [key, nil]
end