module Blockhole

Constants

VERSION

Attributes

storage[RW]

Public Class Methods

collapse(name) click to toggle source
# File lib/blockhole.rb, line 38
def collapse(name)
  storage.del name
end
configure() { |self| ... } click to toggle source
# File lib/blockhole.rb, line 9
def configure
  yield self
  self
end
get(name) click to toggle source
# File lib/blockhole.rb, line 29
def get(name)
  value = storage.get(name)
  begin
    return MultiJson.load value
  rescue MultiJson::DecodeError
    return value
  end
end
use_hole(hole_name, lifespan = nil, &block) click to toggle source
# File lib/blockhole.rb, line 14
def use_hole(hole_name, lifespan = nil, &block)
  if lifespan and lifespan < 1
    raise ArgumentError,
      "lifespan (if provided) must be >= 0, got #{lifespan}"
  end

  unless value = storage.get(hole_name)
    value = block.call(hole_name)
    storage.set(hole_name, encode(value))
    storage.expire(hole_name, lifespan) if lifespan
  end

  value
end

Private Class Methods

encode(value) click to toggle source
# File lib/blockhole.rb, line 44
def encode(value)
  return value if value.kind_of? String
  MultiJson.dump value
end