Class: TaskJuggler::AttributeBase

Inherits:
Object
  • Object
show all
Defined in:
lib/taskjuggler/AttributeBase.rb

Overview

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.

Constant Summary collapse

@@mode =

The mode is flag that controls how value assignments affect the flags.

0

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(property, type, container) ⇒ AttributeBase

Create a new AttributeBase object. type specifies the specific type of the object. property is the PropertyTreeNode object this attribute belongs to.



39
40
41
42
43
44
45
# File 'lib/taskjuggler/AttributeBase.rb', line 39

def initialize(property, type, container)
  @type = type
  @property = property
  @container = container

  reset
end

Instance Attribute Details

#inheritedObject (readonly)

Returns the value of attribute inherited.



31
32
33
# File 'lib/taskjuggler/AttributeBase.rb', line 31

def inherited
  @inherited
end

#propertyObject (readonly)

Returns the value of attribute property.



31
32
33
# File 'lib/taskjuggler/AttributeBase.rb', line 31

def property
  @property
end

#providedObject (readonly)

Returns the value of attribute provided.



31
32
33
# File 'lib/taskjuggler/AttributeBase.rb', line 31

def provided
  @provided
end

#typeObject (readonly)

Returns the value of attribute type.



31
32
33
# File 'lib/taskjuggler/AttributeBase.rb', line 31

def type
  @type
end

Class Method Details

.isList?Boolean

We overwrite this for ListAttributeBase.

Returns:

  • (Boolean)


129
130
131
# File 'lib/taskjuggler/AttributeBase.rb', line 129

def AttributeBase::isList?
  false
end

.modeObject

Return the current attribute setting mode.



73
74
75
# File 'lib/taskjuggler/AttributeBase.rb', line 73

def AttributeBase.mode
  @@mode
end

.setMode(mode) ⇒ Object

Change the @@mode. 0 means values are provided, 1 means values are inherited, any other value means calculated.



79
80
81
# File 'lib/taskjuggler/AttributeBase.rb', line 79

def AttributeBase.setMode(mode)
  @@mode = mode
end

Instance Method Details

#getObject Also known as: value

Return the attribute value.



108
109
110
# File 'lib/taskjuggler/AttributeBase.rb', line 108

def get
  @container.instance_variable_get(('@' + type.id).intern)
end

#idObject

Return the ID of the attribute.



84
85
86
# File 'lib/taskjuggler/AttributeBase.rb', line 84

def id
  type.id
end

#inherit(value) ⇒ Object

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.



67
68
69
70
# File 'lib/taskjuggler/AttributeBase.rb', line 67

def inherit(value)
  @inherited = true
  @container.instance_variable_set(('@' + type.id).intern, value.deep_clone)
end

#isList?Boolean

Returns:

  • (Boolean)


124
125
126
# File 'lib/taskjuggler/AttributeBase.rb', line 124

def isList?
  false
end

#nameObject

Return the name of the attribute.



89
90
91
# File 'lib/taskjuggler/AttributeBase.rb', line 89

def name
  type.name
end

#nil?Boolean

Check whether the value is uninitialized or nil.

Returns:

  • (Boolean)


116
117
118
119
120
121
122
# File 'lib/taskjuggler/AttributeBase.rb', line 116

def nil?
  if (v = get).is_a?(Array)
    v.empty?
  else
    v.nil?
  end
end

#resetObject

Reset the attribute value to the default value.



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/taskjuggler/AttributeBase.rb', line 48

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(value) ⇒ Object

Set the value of the attribute. Depending on the mode we are in, the flags are updated accordingly.



95
96
97
98
99
100
101
102
103
104
105
# File 'lib/taskjuggler/AttributeBase.rb', line 95

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

#to_numObject



138
139
140
141
142
143
144
145
# File 'lib/taskjuggler/AttributeBase.rb', line 138

def to_num
  v = get
  if v.is_a?(Integer) || v.is_a?(Float)
    v
  else
    nil
  end
end

#to_rti(query) ⇒ Object



164
165
166
# File 'lib/taskjuggler/AttributeBase.rb', line 164

def to_rti(query)
  get.is_a?(RichTextIntermediate) ? !value : nil
end

#to_s(query = nil) ⇒ Object

Return the value as String.



134
135
136
# File 'lib/taskjuggler/AttributeBase.rb', line 134

def to_s(query = nil)
  get.to_s
end

#to_sortObject



147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/taskjuggler/AttributeBase.rb', line 147

def to_sort
  v = get
  if v.is_a?(Integer) || v.is_a?(Float)
    v
  elsif v.respond_to?('to_s')
    if v.respond_to?('join')
      # If the attribute is an Array we convert it to a comma separated
      # list.
      v.join(', ')
    else
      v.to_s
    end
  else
    nil
  end
end

#to_tjpObject

Return the value in TJP file syntax.



169
170
171
# File 'lib/taskjuggler/AttributeBase.rb', line 169

def to_tjp
  @type.id + " " + get.to_s
end