Module: Coin

Extended by:
Forwardable
Defined in:
lib/coin.rb,
lib/coin/vault.rb,
lib/coin/version.rb

Defined Under Namespace

Classes: Vault

Constant Summary collapse

VERSION =
"0.1.6"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.portObject



24
25
26
# File 'lib/coin.rb', line 24

def port
  @port ||= 8955
end

.remote_uriObject

Returns the value of attribute remote_uri.



33
34
35
# File 'lib/coin.rb', line 33

def remote_uri
  @remote_uri
end

.uriObject



29
30
31
# File 'lib/coin.rb', line 29

def uri
  @uri ||= "druby://localhost:#{port}"
end

Class Method Details

.pidObject



76
77
78
# File 'lib/coin.rb', line 76

def pid
  File.read(Coin.pid_file) if File.exist?(Coin.pid_file)
end

.pid_fileObject



72
73
74
# File 'lib/coin.rb', line 72

def pid_file
  "/tmp/coin-pid-63f95cb5-0bae-4f66-88ec-596dfbac9244"
end

.read(key, lifetime = 300) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/coin.rb', line 14

def read(key, lifetime=300)
  value = server.read(key)
  if value.nil? && block_given?
    value = yield
    write(key, value, lifetime)
  end
  value
end

.remote_serverObject



67
68
69
70
# File 'lib/coin.rb', line 67

def remote_server
  DRb.start_service
  @server = DRbObject.new_with_uri(remote_uri)
end

.serverObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/coin.rb', line 38

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?Boolean

Returns:

  • (Boolean)


80
81
82
83
84
85
86
87
88
89
# File 'lib/coin.rb', line 80

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) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/coin.rb', line 91

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_serverObject



107
108
109
110
111
112
# File 'lib/coin.rb', line 107

def stop_server
  Process.kill("HUP", @pid.to_i) if server_running?
  sleep 0.1 while server_running?
  DRb.stop_service
  true
end