module Coin

Constants

VERSION

Attributes

port[W]
remote_uri[R]
uri[W]

Public Class Methods

clear() click to toggle source
# File lib/coin.rb, line 35
def clear
  server.clear
end
delete(key) click to toggle source
# File lib/coin.rb, line 27
def delete(key)
  server.delete key
end
length() click to toggle source
# File lib/coin.rb, line 31
def length
  server.length
end
pid() click to toggle source
# File lib/coin.rb, line 92
def pid
  File.read(Coin.pid_file) if File.exist?(Coin.pid_file)
end
pid_file() click to toggle source
# File lib/coin.rb, line 88
def pid_file
  "/tmp/coin-pid-63f95cb5-0bae-4f66-88ec-596dfbac9244"
end
port() click to toggle source
# File lib/coin.rb, line 40
def port
  @port ||= 8955
end
read(key, lifetime=300) { || ... } click to toggle source
# File lib/coin.rb, line 10
def read(key, lifetime=300)
  value = server.read(key)
  if value.nil? && block_given?
    value = yield
    write(key, value, lifetime)
  end
  value
end
read_and_delete(key) click to toggle source
# File lib/coin.rb, line 19
def read_and_delete(key)
  server.read_and_delete key
end
remote_server() click to toggle source
# File lib/coin.rb, line 83
def remote_server
  DRb.start_service
  @server = DRbObject.new_with_uri(remote_uri)
end
remote_uri=(value) click to toggle source
# File lib/coin.rb, line 50
def remote_uri=(value)
  @remote_uri = value
end
server() click to toggle source
# File lib/coin.rb, line 54
def server
  return remote_server if remote_uri
  return nil unless ENV["COIN_URI"].nil?

  if server_running?
    if @server
      begin
        @server.ok? if @server
      rescue DRb::DRbConnError => ex
        @server = nil
      end
    end

    if @server.nil?
      begin
        @server = DRbObject.new_with_uri(uri)
        @server.ok?
      rescue DRb::DRbConnError => ex
        @server = nil
      end
    end
  end

  return @server if @server && server_running?

  start_server
  @server = DRbObject.new_with_uri(uri)
end
server_running?() click to toggle source
# File lib/coin.rb, line 96
def server_running?
  @pid = pid
  return false unless @pid
  begin
    Process.kill(0, @pid.to_i)
  rescue Errno::ESRCH => ex
    return false
  end
  true
end
start_server(force=nil) click to toggle source
# File lib/coin.rb, line 107
def start_server(force=nil)
  return if server_running? && !force
  stop_server if force
  ruby = "#{RbConfig::CONFIG["bindir"]}/ruby"
  script = File.expand_path(File.join(File.dirname(__FILE__), "..", "bin", "coin"))
  env = {
    "COIN_URI" => Coin.uri
  }
  pid = spawn(env, "#{ruby} #{script}")
  Process.detach(pid)

  sleep 0.1 while !server_running?
  DRb.start_service
  true
end
stop_server() click to toggle source
# File lib/coin.rb, line 123
def stop_server
  Process.kill("HUP", @pid.to_i) if server_running?
  sleep 0.1 while server_running?
  DRb.stop_service
  true
end
uri() click to toggle source
# File lib/coin.rb, line 45
def uri
  @uri ||= "druby://localhost:#{port}"
end
write(key, value, lifetime=300) click to toggle source
# File lib/coin.rb, line 23
def write(key, value, lifetime=300)
  server.write key, value, lifetime
end