class TaskJuggler::AttributeBase
This class is the base for all property attribute types. Each property can have multiple attributes of different type. For each type, there must be a special Ruby class. Each of these classes must be derived from this class. The class holds information like a reference to the property that owns the attribute and the type of the attribute.
The class can track wheter the attribute value was provided by the project file, inherited from another property or computed during scheduling.
Attributes that are of an inherited type will be copied from a parent property or the global scope.
Attributes
Public Class Methods
We overwrite this for ListAttributeBase.
# File lib/taskjuggler/AttributeBase.rb, line 127 def AttributeBase::isList? false end
Return the current attribute setting mode.
# File lib/taskjuggler/AttributeBase.rb, line 71 def AttributeBase.mode @@mode end
Create a new AttributeBase object. type specifies the specific type of the object. property is the PropertyTreeNode object this attribute belongs to.
# File lib/taskjuggler/AttributeBase.rb, line 37 def initialize(property, type, container) @type = type @property = property @container = container reset end
Change the @@mode. 0 means values are provided, 1 means values are inherited, any other value means calculated.
# File lib/taskjuggler/AttributeBase.rb, line 77 def AttributeBase.setMode(mode) @@mode = mode end
Public Instance Methods
Return the attribute value.
# File lib/taskjuggler/AttributeBase.rb, line 106 def get @container.instance_variable_get(('@' + type.id).intern) end
Return the ID of the attribute.
# File lib/taskjuggler/AttributeBase.rb, line 82 def id type.id end
Call this function to inherit value from the parent property. It is very important that the values are deep copied as they may be modified later on.
# File lib/taskjuggler/AttributeBase.rb, line 65 def inherit(value) @inherited = true @container.instance_variable_set(('@' + type.id).intern, value.deep_clone) end
# File lib/taskjuggler/AttributeBase.rb, line 122 def isList? false end
Return the name of the attribute.
# File lib/taskjuggler/AttributeBase.rb, line 87 def name type.name end
Check whether the value is uninitialized or nil.
# File lib/taskjuggler/AttributeBase.rb, line 114 def nil? if (v = get).is_a?(Array) v.empty? else v.nil? end end
Reset the attribute value to the default value.
# File lib/taskjuggler/AttributeBase.rb, line 46 def reset @inherited = false # Flag that marks whether the value of this attribute was provided by the # user (in contrast to being calculated). @provided = false # If type is an AttributeDefinition, create the initial value according # to the specified default for this type. Otherwise type is the initial # value. if @type.is_a?(AttributeDefinition) @container.instance_variable_set(('@' + type.id).intern, @type.default.deep_clone) else @container.instance_variable_set(('@' + type.id).intern, @type) end end
Set the value of the attribute. Depending on the mode we are in, the flags are updated accordingly.
# File lib/taskjuggler/AttributeBase.rb, line 93 def set(value) case @@mode when 0 @provided = true when 1 @inherited = true end # Store the value in an instance variable in the PropertyTreeNode or # ScenarioData object referred to by @container. @container.instance_variable_set(('@' + type.id).intern, value) end
# File lib/taskjuggler/AttributeBase.rb, line 136 def to_num v = get if v.is_a?(Fixnum) || v.is_a?(Bignum) || v.is_a?(Float) v else nil end end
# File lib/taskjuggler/AttributeBase.rb, line 156 def to_rti(query) get.is_a?(RichTextIntermediate) ? !value : nil end
Return the value as String.
# File lib/taskjuggler/AttributeBase.rb, line 132 def to_s(query = nil) get.to_s end
# File lib/taskjuggler/AttributeBase.rb, line 145 def to_sort v = get if v.is_a?(Fixnum) || v.is_a?(Bignum) || v.is_a?(Float) v elsif v.respond_to?('to_s') v.to_s else nil end end
Return the value in TJP file syntax.
# File lib/taskjuggler/AttributeBase.rb, line 161 def to_tjp @type.id + " " + get.to_s end
Private Instance Methods
# File lib/taskjuggler/AttributeBase.rb, line 167 def quotedString(str) if str.include?("\n") "-8<-\n#{str}\n->8-" else "\"#{str.gsub("\"", '\"')}\"" end end