lib/pione/global.rb in pione-0.3.0 vs lib/pione/global.rb in pione-0.3.1

- old
+ new

@@ -1,128 +1,13 @@ module Pione # Global is a table of global variables in PIONE system. It defines variable # names, initial values, and configuration conditions. You can set and get # value by calling item named method. - module Global - # - # variables - # - - # these variables should be with prefix and postfix because of name colloision - @__names__ = Array.new # variable names - @__configurable__ = Hash.new # variable configurability - @__lazy_initializer__ = Hash.new # variable initializers - @__dependencies__ = Hash.new {|h, k| h[k] = []} # dependency table - @__updater__ = Hash.new # updaters for computed item - - class << self - # Define an internal item. The item cannot be configured by user. - def define_internal_item(name, initial_value=nil, &initializer) - define_item(name, false, initial_value, :initializer => initializer) - end - - # Define an external item. The item can be configured by user. - def define_external_item(name, initial_value=nil, &initializer) - define_item(name, true, initial_value, :initializer => initializer) - end - - # Define a computed item. The item cannote be configured by user. - def define_computed_item(name, dependencies, &updater) - define_item(name, false, nil, :dependencies => dependencies, :updater => updater) - end - - # Get value of the variable. - def get(name) - val = instance_variable_get("@%s" % name) - if val.nil? - # call lazy initializer - if @__lazy_initializer__.has_key?(name) - set(name, @__lazy_initializer__[name].call) - end - - # call initial updater - if @__updater__.has_key?(name) - update(name) - end - - # get value - get(name) - else - return val - end - end - - # Set value of the variable. - def set(name, val) - # set value - instance_variable_set("@%s" % name, val) - - # update dependecies - @__dependencies__[name].each do |dependency| - update(dependency) - end - end - - # Update the computed item. - def update(name) - set(name, @__updater__[name].call) - end - - # Return true if the variable is configurable. - def configurable?(name) - @__configurable__[name] - end - - # Return all variable names. - def all_names - @__names__ - end - - private - - # Define a new global variable. - def define_item(name, configurable, initial_value=nil, option) - # setup informations - @__names__ << name - @__configurable__[name]= configurable - @__lazy_initializer__[name] = option[:initializer] if option[:initializer] - @__updater__[name] = option[:updater] if option[:updater] - - # build dependency table for computed items - if option[:dependencies] - option[:dependencies].each do |dependency| - @__dependencies__[dependency] << name - end - end - - # set reader and writer - define_variable_reader(name) - define_variable_writer(name) - - # set initial value - unless initial_value.nil? - set(name, initial_value) - end - end - - # Define reader method of the variable. - def define_variable_reader(name) - singleton_class.module_eval do |mod| - define_method(name) {get(name)} - end - end - - # Define writer method of the variable. - def define_variable_writer(name) - singleton_class.module_eval do |mod| - define_method("set_%s" % name) {|val| set(name, val)} - define_method("%s=" % name) {|val| set(name, val)} - end - end - end - end + module Global; end end +require 'pione/global/item' +require 'pione/global/config' require 'pione/global/system-variable' require 'pione/global/path-variable' require 'pione/global/network-variable' require 'pione/global/log-variable' require 'pione/global/relay-variable'