Skip to content

Instantly share code, notes, and snippets.

@Toady00
Created June 29, 2014 23:34
Show Gist options
  • Save Toady00/2f596c6fa5b6dfb05a7a to your computer and use it in GitHub Desktop.
Save Toady00/2f596c6fa5b6dfb05a7a to your computer and use it in GitHub Desktop.
Ruby Class for getting and setting Consul KeyValues
require 'base64'
require 'json'
require 'rest_client'
module Consul
class KV
URL = "http://localhost:8500/v1/kv"
attr_reader :key,
:create_index,
:modify_index,
:lock_index,
:flags,
:value
def initialize(key, value_if_unset)
@key = key
@value_if_unset = value_if_unset
parse get
end
def set(value)
client.put url, value
end
def cas(value)
client.put cas_url, value
end
def get
parser.parse(raw_get).first
end
def delete
client.delete url
nil_out_values!
end
private
def parse(data)
@create_index = data["CreateIndex"]
@modify_index = data["ModifyIndex"]
@lock_index = data["LockIndex"]
@flags = data["Flags"]
@value = decode_value data["Value"]
end
def client
RestClient
end
def parser
JSON
end
def decode_value(value)
if value.nil?
nil
else
Base64.decode64(value)
end
end
def nil_out_values!
parse(Hash.new)
end
def raw_get
begin
client.get url
rescue client::ResourceNotFound
cas @value_if_unset
client.get url
end
end
def url
@url ||= "#{URL}/#{key}"
end
def cas_url
index = @modify_index || 0
"#{@url}?cas=#{index}"
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment