class Rk::Rk

Build Redis keys of several elements.

rk("user", 10) => "user:10"

Attributes

keys[RW]
prefix[RW]
separator[RW]
suffix[RW]

Public Class Methods

new() click to toggle source

Set defaults

  • separator - :

  • prefix - empty

  • suffix - empty

  • keys - empty

# File lib/rk.rb, line 14
def initialize
  @separator = ":"
  @prefix = ""
  @suffix = ""
  @keys = {}
end

Public Instance Methods

keys=(h) click to toggle source

Define key elements by key/value pairs of a hash, symbols and strings allowed for keys/values.

rk.keys = { user: "user", "statistics" => "stats", "session" => :sess }
# File lib/rk.rb, line 52
def keys=(h)
  # Allow hash only
  raise TypeError, "invalid type" unless h.is_a?(Hash)

  # Call rk.<key> = <val> for each pair of hash
  h.each_pair do |key, val|
    self.send("#{key}=", val)
  end
end
method_missing(method, *arg) click to toggle source

Add methods dynamically to define/access elements.

rk.user = "user"
rk(rk.user, 10) => "user:10"
# File lib/rk.rb, line 29
def method_missing(method, *arg)
  # Raise an error if a method gets accessed which was not defined before
  raise RuntimeError, "'rk.#{method.to_s}' is undefined" unless method.to_s.include?("=")

  # Define a method to return a value as set, for example rk.settings = 'set' defines
  # a method called "settings" which returns the string "set"
  key = method.to_s.sub(/=/, "")
  val = (arg || []).first

  instance_eval(%Q[
    def #{key}
      "#{val}"
    end
  ])

  # Store user-defined key
  @keys[key] = val
end
rk(*elements) click to toggle source

Build a string including prefix/suffix, joining all elements with the separator.

# File lib/rk.rb, line 22
def rk(*elements)
  ([@prefix] + elements + [@suffix]).reject { |element| element.to_s.empty? }.join(@separator)
end