class Pione::Global::Item

Attributes

dependencies[R]

item names that the item depends

desc[RW]

item description

init[RW]

initial value

name[R]

item name

orig[R]

original value

record[RW]

record target

type[RW]

type of item value

updater[R]

update process object

value[R]

item value

Public Class Methods

new(name, configurable, option={}) click to toggle source
# File lib/pione/global/item.rb, line 97
def initialize(name, configurable, option={})
  @name = name
  @value = nil
  @configurable = configurable
  @dependencies = option[:dependencies] || []
  @desc = nil
  @init = nil
  @type = nil
  @updater = Proc.new {|val| val}
  @post_action = nil
  @orig = nil
  @record = false
end

Public Instance Methods

configurable?() click to toggle source

Return true if the item is configurable.

# File lib/pione/global/item.rb, line 112
def configurable?
  @configurable
end
define_updater(&b) click to toggle source

Define updater process of the item.

# File lib/pione/global/item.rb, line 158
def define_updater(&b)
  @updater = b
end
post(&b) click to toggle source
# File lib/pione/global/item.rb, line 162
def post(&b)
  @post_action = b
end
register() click to toggle source

Register the item to global system.

# File lib/pione/global/item.rb, line 117
def register
  # register this item
  Global.item[@name] = self

  # build dependency table for computed items
  if @dependencies
    @dependencies.each do |dependency|
      Global.__dependencies__[dependency] << self
    end
  end

  # set reader and writer
  name = @name
  Global.singleton_class.module_eval do |mod|
    define_method(name) {get(name)}
    define_method("set_%s" % name) {|val| set(name, val)}
    define_method("%s=" % name) {|val| set(name, val)}
  end
end
unregister() click to toggle source

Unregister the item from global system.

# File lib/pione/global/item.rb, line 138
def unregister
  Global.item.delete(@name)

  # remove dependency
  if @dependencies
    @dependencies.each do |dependency|
      Global.__dependencies__.delete(dependency)
    end
  end

  # remove accessors
  name = @name
  Global.singleton_class.module_eval do |mod|
    remove_method(name)
    remove_method("set_%s" % name)
    remove_method("%s=" % name)
  end
end
update(val) click to toggle source

Update the item with the value.

# File lib/pione/global/item.rb, line 167
def update(val)
  @orig = val
  @value = @updater.call(ValueConverter.convert(@type, val))
  if @post_action
    @post_action.call(@value)
  end
end