class Pione::Global::Config

Config is a class for setting PIONE system configuration.

Attributes

path[R]

config file path

Public Class Methods

load(path) click to toggle source

Load configuration and apply it to global settings.

# File lib/pione/global/config.rb, line 6
def self.load(path)
  new(path).tap {|x| x.apply}
end
new(path) click to toggle source

Create a new configuration.

# File lib/pione/global/config.rb, line 16
def initialize(path)
  @path = Pathname.new(path)
  @table = Hash.new
  (@path.exist? ? JSON.load(@path.read) : {}).each do |key, val|
    @table[key.to_sym] = val
  end
  raise InvalidConfigFile.new(@path) unless @table.kind_of?(Hash)
end

Public Instance Methods

apply() click to toggle source

Apply config date to global settings.

# File lib/pione/global/config.rb, line 26
def apply
  @table.each do |key, val|
    name = key.to_sym
    if_configurable_item(name) do
      Global.set(name, val)
    end
  end
end
get(name) click to toggle source

Get the global item’s value.

@param name [String]

item name

@return [Object]

item value
# File lib/pione/global/config.rb, line 57
def get(name)
  name = name.to_sym
  if_configurable_item(name) do
    @table[name]
  end
end
save(path=@path) click to toggle source

Save the configuration items to the file.

@param path [Pathname]

file path

@return [void]

# File lib/pione/global/config.rb, line 74
def save(path=@path)
  path.open("w+") do |file|
    file.write(JSON.pretty_generate(@table))
  end
end
set(name, value) click to toggle source

Set the global item.

@param name [String]

item name

@param value [Object]

item value

@return [void]

# File lib/pione/global/config.rb, line 42
def set(name, value)
  raise ArgumentError.new if value.nil?

  name = name.to_sym
  if_configurable_item(name) do
    @table[name] = ValueConverter.convert(Global.item[name].type, value)
  end
end
unset(name) click to toggle source
# File lib/pione/global/config.rb, line 64
def unset(name)
  name = name.to_sym
  @table.delete(name)
end

Private Instance Methods

if_configurable_item(name, &b) click to toggle source
# File lib/pione/global/config.rb, line 82
def if_configurable_item(name, &b)
  if Global.item[name] and Global.item[name].configurable?
    b.call
  else
    raise UnconfigurableVariableError.new(name)
  end
end