Module: Archimate::DataModel::Comparison::ClassMethods

Defined in:
lib/archimate/data_model/comparison.rb

Defined Under Namespace

Classes: AttributeInfo

Instance Method Summary collapse

Instance Method Details

#attr_infoObject



149
150
151
# File 'lib/archimate/data_model/comparison.rb', line 149

def attr_info
  class_variable_defined?(:@@attr_info) ? class_variable_get(:@@attr_info) : {}
end

#attr_namesObject



145
146
147
# File 'lib/archimate/data_model/comparison.rb', line 145

def attr_names
  class_variable_defined?(:@@attr_names) ? class_variable_get(:@@attr_names) : []
end

#comparison_attr_pathsObject



153
154
155
# File 'lib/archimate/data_model/comparison.rb', line 153

def comparison_attr_paths
  class_variable_defined?(:@@comparison_attr_paths) ? class_variable_get(:@@comparison_attr_paths) : []
end

#model_attr(attr_sym, comparison_attr: nil, writable: false, default: :value_required, referenceable_list: false, also_reference: []) ⇒ Object

Define the reader method (or call model_attr) Append the attr_sym to the @@attrs for the class



111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/archimate/data_model/comparison.rb', line 111

def model_attr(attr_sym, comparison_attr: nil, writable: false,
               default: :value_required, referenceable_list: false,
               also_reference: [])
  send(:attr_reader, attr_sym)
  attrs = attr_names << attr_sym
  class_variable_set(:@@attr_names, attrs.uniq)
  class_variable_set(
    :@@attr_info,
    attr_info.merge(attr_sym => AttributeInfo.new(
      comparison_attr, writable, default, referenceable_list, also_reference
    ))
  )
  if comparison_attr != :no_compare
    attrs = comparison_attr_paths << (comparison_attr ? [attr_sym, comparison_attr] : attr_sym)
    class_variable_set(:@@comparison_attr_paths, attrs.uniq)
  end
  return unless writable
  define_method("#{attr_sym}=".to_sym) do |val|
    instance_variable_set(:@hash_key, nil)
    old_val = instance_variable_get("@#{attr_sym}")
    if old_val.is_a?(ReferenceableList)
      old_val.replace_with(val)
    else
      old_val.remove_reference(self) if old_val.is_a?(Referenceable)
      instance_variable_set("@#{attr_sym}".to_sym, val)
      val.add_reference(self) if val.is_a?(Referenceable)
      also_reference.each do |ref_sym|
        ref = send(ref_sym)
        val.add_reference(ref) if ref && val
      end
    end
  end
end