Class: ExoBasic::Settings

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

Constant Summary collapse

DEFAULT_FILENAME =
'./settings.json'
@@app_name =
'Untitled'
@@load_observers =
[]
@@loaded =
Settings.load

Class Method Summary collapse

Class Method Details

.add_on_load_observer(observer) ⇒ Object



18
19
20
# File 'lib/exobasic/settings.rb', line 18

def self.add_on_load_observer(observer)
  @@load_observers.push(observer)
end

.get_app_confObject



103
104
105
# File 'lib/exobasic/settings.rb', line 103

def self.get_app_conf
  @@loaded[@@app_name]
end

.get_app_nameObject



11
12
13
# File 'lib/exobasic/settings.rb', line 11

def self.get_app_name
  @@app_name
end

.get_conf(filename = nil) ⇒ Object



61
62
63
64
65
66
67
68
69
# File 'lib/exobasic/settings.rb', line 61

def self.get_conf(filename=nil)
  f = filename
  if f.nil?
    f = Settings::DEFAULT_FILENAME
  end

  js = JSON.load(File.read(f))
  Settings.post_load(js)
end

.get_conf_with_rem(filename = nil) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/exobasic/settings.rb', line 44

def self.get_conf_with_rem(filename=nil)
  f = filename
  if f.nil?
    f = Settings::DEFAULT_FILENAME
  end

  if File.exist?(f)
    js = JSON.load(
      File.readlines(f)
          .select { |line| !line.strip.start_with?('//') }
          .join())
    Settings.post_load(js)
  else
    {}
  end
end

.get_loggerObject



107
108
109
# File 'lib/exobasic/settings.rb', line 107

def self.get_logger
  Logger.new(STDOUT)
end

.loadObject



88
89
90
# File 'lib/exobasic/settings.rb', line 88

def self.load
  Settings.get_conf_with_rem
end

.loadedObject



94
95
96
# File 'lib/exobasic/settings.rb', line 94

def self.loaded
  @@loaded
end

.post_load(js) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/exobasic/settings.rb', line 22

def self.post_load(js)
  merged = {}
  if js.key?('_include')
    to_include = []
    if js['_include'].is_a?(Array)
      to_include = js['_include']
    else
      to_include = [js['_include']]
    end

    to_include.each do |i|
      h = Settings.get_conf_with_rem(i)
      merged = merged.deep_merge(h)
    end
    merged = merged.deep_merge(js)
  else
    merged = js
  end

  merged
end

.reload(filename = nil) ⇒ Object



98
99
100
101
# File 'lib/exobasic/settings.rb', line 98

def self.reload(filename=nil)
  @@loaded = Settings.get_conf_with_rem(filename)
  @@load_observers.each { |observer| observer.settings_reloaded }
end

.set_app_name(appname) ⇒ Object



14
15
16
# File 'lib/exobasic/settings.rb', line 14

def self.set_app_name(appname)
  @@app_name = appname
end

.try_get_key(conf, default_value = false, k) ⇒ Object



71
72
73
# File 'lib/exobasic/settings.rb', line 71

def self.try_get_key(conf, default_value=false, k)
  conf.key?(k) ? conf[k] : default_value
end

.try_get_nested_key(conf, default_value = false, ks) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/exobasic/settings.rb', line 75

def self.try_get_nested_key(conf, default_value=false, ks)
  if ks.empty?
    default_value
  else
    v = Settings.try_get_key(conf, default_value, ks[0])
    if v != default_value && ks.length > 1
      Settings.try_get_nested_key(v, default_value, ks[1..-1])
    else
      v
    end
  end
end