class Consul::KV::Store

Constants

CannotDeleteError
CannotReadError
CannotWriteError

Attributes

conn[R]

Public Class Methods

new(prefix = nil) click to toggle source
# File lib/consul/kv/store.rb, line 11
def initialize(prefix = nil)
  @mutex  = Mutex.new
  @conn   = Connection.new
  @prefix = prefix
end

Public Instance Methods

[](key)
Alias for: get
[]=(key, value)
Alias for: put
delete(key) click to toggle source
# File lib/consul/kv/store.rb, line 45
def delete(key)
  resp = nil
  @mutex.synchronize do
    resp = conn.delete build(key), true
  end
  raise CannotDeleteError unless resp.kind_of?(Net::HTTPSuccess)
  true
end
get(key) click to toggle source
# File lib/consul/kv/store.rb, line 17
def get(key)
  resp = nil
  @mutex.synchronize do
    resp = conn.get build(key), true
  end
  return nil if resp.kind_of?(Net::HTTPNotFound)
  raise CannotReadError unless resp.kind_of?(Net::HTTPSuccess)
  json = JSON.parse(resp.body)
  if json.size > 1 || json.first['Key'] != build(key)
    json.each_with_object({}) do |item, hsh|
      hsh[item['Key'].gsub(/\A#{build(key)}\//, '')] = Base64.decode64(item['Value'])
    end
  else
    Base64.decode64 json.first['Value']
  end
end
Also aliased as: []
put(key, value) click to toggle source
# File lib/consul/kv/store.rb, line 35
def put(key, value)
  resp = nil
  @mutex.synchronize do
    resp = conn.put build(key), value
  end
  raise CannotWriteError unless resp.kind_of?(Net::HTTPSuccess)
  get key
end
Also aliased as: []=

Private Instance Methods

build(key) click to toggle source
# File lib/consul/kv/store.rb, line 58
def build key
  return key unless @prefix
  return @prefix if key == ''
  "#{@prefix}/#{key}"
end