class ExoBasic::Settings

Constants

DEFAULT_FILENAME

Public Class Methods

add_on_load_observer(observer) click to toggle source
# File lib/exobasic/settings.rb, line 18
def self.add_on_load_observer(observer)
  @@load_observers.push(observer)
end
get_app_conf() click to toggle source
# File lib/exobasic/settings.rb, line 103
def self.get_app_conf
  @@loaded[@@app_name]
end
get_app_name() click to toggle source
# File lib/exobasic/settings.rb, line 11
def self.get_app_name
  @@app_name
end
get_conf(filename=nil) click to toggle source
# 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) click to toggle source
# 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.exists?(f)
    js = JSON.load(
      File.readlines(f)
          .select { |line| !line.strip.start_with?('//') }
          .join())
    Settings.post_load(js)
  else
    {}
  end
end
get_logger() click to toggle source
# File lib/exobasic/settings.rb, line 107
def self.get_logger
  Logger.new(STDOUT)
end
load() click to toggle source
# File lib/exobasic/settings.rb, line 88
def self.load
  Settings.get_conf_with_rem
end
loaded() click to toggle source
# File lib/exobasic/settings.rb, line 94
def self.loaded
  @@loaded
end
post_load(js) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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