Class: Erlnixify::Settings

Inherits:
Object
  • Object
show all
Defined in:
lib/erlnixify/settings.rb

Overview

Provides a library for settings to be accessed from accross the system

Constant Summary collapse

STARTUP_TIMEOUT =
60
CHECK_INTERVAL =
30
CHECK_TIMEOUT =
30
CHECK_COMMAND =
"erlang statistics [reductions]"
CHECK_REGEX =
"^{\\d+, \\d+}$"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Settings

Returns a new instance of Settings.



17
18
19
20
21
22
23
24
25
# File 'lib/erlnixify/settings.rb', line 17

def initialize(options)
  config = options[:config]

  @settings = self.default_settings

  self.load! config if config
  self.merge(options)
  self.post_settings_setup
end

Instance Attribute Details

#optionsObject

Returns the value of attribute options.



9
10
11
# File 'lib/erlnixify/settings.rb', line 9

def options
  @options
end

#settingsObject

Returns the value of attribute settings.



8
9
10
# File 'lib/erlnixify/settings.rb', line 8

def settings
  @settings
end

Instance Method Details

#[](key) ⇒ Object



57
58
59
# File 'lib/erlnixify/settings.rb', line 57

def [](key)
  return @settings[key]
end

#default_settingsObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/erlnixify/settings.rb', line 27

def default_settings
  defaults = {release: nil,
    erlang: nil,
    home: ENV["HOME"],
    name: nil,
    fullnode: nil,
    command: nil,
    check: CHECK_COMMAND,
    checkregex: CHECK_REGEX,
    cookiefile: nil,
    cookie: nil,
    startuptimeout: STARTUP_TIMEOUT,
    checkinterval: CHECK_INTERVAL,
    checktimeout: CHECK_TIMEOUT,
    config: nil}
  defaults
end


93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/erlnixify/settings.rb', line 93

def find_cookie
  cookie_file = @settings[:cookiefile]
  if @settings[:cookie]
    @settings[:cookie]
  elsif cookie_file
    if File.exists? cookie_file
      IO.read cookie_file
    else
      raise RuntimeError, "Cookie file does not exist"
    end
  end
end

#find_erl_interfaceObject



116
117
118
119
120
121
122
123
124
# File 'lib/erlnixify/settings.rb', line 116

def find_erl_interface
  erlang_root = @settings[:erlang]
  release_root = @settings[:release]
  if erlang_root && (File.directory? erlang_root)
    Dir.glob("#{erlang_root}/lib/erl_interface-*").first
  elsif release_root && (File.directory? release_root)
    Dir.glob("#{release_root}/lib/erl_interface-*").first
  end
end

#find_erlang_rootObject



82
83
84
85
86
87
88
89
90
# File 'lib/erlnixify/settings.rb', line 82

def find_erlang_root
  if @settings[:erlang]
    @settings[:erlang]
  elsif File.directory? "/usr/local/lib/erlang"
    "/usr/local/lib/erlang"
  elsif File.directory? "/usr/lib/erlang"
    "/usr/lib/erlang"
  end
end

#find_full_nodeObject



106
107
108
109
110
111
112
113
114
# File 'lib/erlnixify/settings.rb', line 106

def find_full_node
  if @settings[:fullnode]
    @settings[:fullnode]
  else
    hostname = `hostname -f`.strip
    node = @settings[:name]
    "#{node}@#{hostname}"
  end
end

#load!(filename, options = {}) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/erlnixify/settings.rb', line 45

def load!(filename, options = {})
  newsets = YAML::load_file(filename)

  env = options[:env].to_sym if options[:env]

  if env
    newsets = newsets[env] if newsets[env]
  end

  self.merge(newsets)
end

#merge(data) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/erlnixify/settings.rb', line 61

def merge(data)
  @settings = @settings.inject({}) do |newhash, (key, value)|
    symkey = key.to_sym
    data_value = data[symkey]
    data_value = data[key.to_s] unless data_value
    if data_value
      newhash[symkey] = data_value
    else
      newhash[symkey] = value
    end
    newhash
  end
end

#post_settings_setupObject



75
76
77
78
79
80
# File 'lib/erlnixify/settings.rb', line 75

def post_settings_setup
  @settings[:erlang] = self.find_erlang_root
  @settings[:cookie] = self.find_cookie
  @settings[:erl_interface] = self.find_erl_interface
  @settings[:fullnode] = self.find_full_node
end