module PIM::Attributes
Constants
- DEFAULT_ATTRIBUTE_PARAMETERS
Default definition per type when creating attribute from hash. Used to set default parameters per type, unless set in the definition. Note: Please also adapt the corresponding code in Java ‘com.lansa.lax.pim.datamodel.Attribute’!
- DEFAULT_TO_XML
- MANDATORY_ATTRIBUTE_DEFINITIONS
Mandatory definition per type when creating attribute from hash. Used to set a base_class different from
String
- which is the default - and other mandatory params. Note: Please also adapt the corresponding code in Java ‘com.lansa.lax.pim.datamodel.Attribute’!
Public Instance Methods
add_param(params, name, attribute_hash, value_key)
click to toggle source
# File pim.rb, line 4661 def add_param params, name, attribute_hash, value_key value = PIM.get_value(attribute_hash, value_key) params[PIM.to_sym(name)] = value unless PIM.is_empty?(value) end
additional_attributes(attribute_names_per_module)
click to toggle source
# File pim.rb, line 4707 def additional_attributes attribute_names_per_module additional_attributes = {} attribute_names_per_module.each_pair do |additional_module_name, attribute_names| additional_module = PIM.get_module(additional_module_name) if !additional_module log_warn "Additional module '#{additional_module_name}' is not defined" next end next if is_empty?(attribute_names) attributes = additional_module.included_attributes(attribute_names) additional_attributes[additional_module.to_s] = attributes if !attributes.empty? end additional_attributes end
additional_attributes_as_json(attribute_names_per_module)
click to toggle source
# File pim.rb, line 4722 def additional_attributes_as_json attribute_names_per_module as_json(Hash[additional_attributes(attribute_names_per_module).sort]) end
all_attributes()
click to toggle source
# File pim.rb, line 4666 def all_attributes attributes = {} attributes.merge!(@module_attributes) if @module_attributes add_parent_objects(attributes) { |p| p.module_attributes } attributes end
all_state_dependent_attributes(attribute)
click to toggle source
# File pim.rb, line 4673 def all_state_dependent_attributes attribute attribute_names = [] attribute_names.concat(@module_state_dependent_attributes[attribute]) if @module_state_dependent_attributes add_parent_objects(attribute_names) { |p| p.module_state_dependent_attributes[attribute] } attribute_names end
attribute(name, parent = nil, label = nil, default_value = nil, &block)
click to toggle source
# File pim.rb, line 4548 def attribute name, parent = nil, label = nil, default_value = nil, &block name = to_sym(name) if parent if module_attributes.has_key? name if not data_module.has_option?(:ignore_defined_attributes) raise "Attribute with name '#{name}' is already defined in data model #{self}" else return module_attributes[name] end end attribute = PIM::AttributeBuilder.build_attribute(data_module, name, parent, label, default_value, &block) module_attributes[name] = attribute attribute.states.each_value do |state| state[:dependent_attributes].each do |dependent_attribute| state_dependent_attributes = module_state_dependent_attributes[dependent_attribute] state_dependent_attributes << name if !state_dependent_attributes.include?(name) end end attribute elsif name.is_a? PIM::Attribute name else all_attributes[name] end end
attributes_as_json()
click to toggle source
# File pim.rb, line 4699 def attributes_as_json attributes = {} all_attributes.sort.each do |key, attribute| attributes[key] = attribute if !attribute.param(:exclude_from_json) end as_json(attributes) end
check_attribute!(attribute, message = nil, ignore = false)
click to toggle source
# File pim.rb, line 4688 def check_attribute! attribute, message = nil, ignore = false return if !attribute or attribute.is_a? Class attribute = attribute.name if attribute.is_a? PIM::Attribute if !exists_attribute?(attribute) return false if ignore message = message || "Attribute '#{attribute.to_sym}' is not defined" raise message end return true end
create_attribute(attribute_hash)
click to toggle source
# File pim.rb, line 4600 def create_attribute attribute_hash raise "Must be executed in data module" unless data_module raise "Must not be executed in PIM module itself" if data_module == PIM PIM.execute_in_module(data_module) do name = PIM.get_value(attribute_hash, :name) type_name = PIM.get_value(attribute_hash, :type_name) mandatory_attribute_definition = MANDATORY_ATTRIBUTE_DEFINITIONS[type_name] mandatory_base_class = PIM.get_value(mandatory_attribute_definition, :base_class) mandatory_params = PIM.get_value(mandatory_attribute_definition, :params) default_params = DEFAULT_ATTRIBUTE_PARAMETERS[type_name] if type_name == 'Composite' members = PIM.symbolized_array(PIM.get_value(attribute_hash, :members) || []) base_class = PIM::Composite.new(*members) DataModuleObject.set_data_module(base_class, data_module) elsif type_name == 'MultiDimensional' key_members = PIM.symbolized_array(PIM.get_value(attribute_hash, :key_members) || []) value_members = PIM.symbolized_array(PIM.get_value(attribute_hash, :value_members) || []) base_class = PIM::MultiDimensional.new(data_module, key_members, value_members) DataModuleObject.set_data_module(base_class, data_module) else base_class = mandatory_base_class || PIM.get_value(attribute_hash, :base_class) || String base_class = Object.const_get(base_class) if base_class.is_a?(String) end attribute = attribute(name, base_class) # Set default parameters params = {} params.merge!(default_params) if default_params # Set defined parameters defined_params = PIM.get_value(attribute_hash, :params) if defined_params params.merge!(PIM.symbolized_snakeized_hash(defined_params)) value_class = params[:value_class] if value_class and value_class.is_a?(String) value_class = Object.const_get(value_class) params[:value_class] = value_class end end # Set mandatory parameters params.merge!(mandatory_params) if mandatory_params add_param(params, :label, attribute_hash, :label) add_param(params, :description, attribute_hash, :description) add_param(params, :type_name, attribute_hash, :type_name) attribute.merge_params(params) unless PIM.is_empty?(params) attribute end end
exists_attribute?(attribute)
click to toggle source
# File pim.rb, line 4596 def exists_attribute? attribute attribute and all_attributes.has_key?(to_sym(attribute)) end
has_attribute_states?(attribute_name)
click to toggle source
# File pim.rb, line 4738 def has_attribute_states? attribute_name attribute = attribute(attribute_name) return false if !attribute return !attribute.states.empty? end
included_attributes(attribute_names)
click to toggle source
# File pim.rb, line 4726 def included_attributes attribute_names attributes = {} attribute_names.each do |attribute_name| add_included_attributes(attributes, attribute_name.to_s) end Hash[attributes.sort].values end
included_attributes_as_json(attribute_names)
click to toggle source
# File pim.rb, line 4734 def included_attributes_as_json attribute_names as_json(included_attributes(attribute_names)) end
modify_attribute(name, &block)
click to toggle source
# File pim.rb, line 4581 def modify_attribute name, &block name = to_sym(name) attribute = module_attributes[name] if attribute.nil? if data_module.has_option?(:ignore_defined_attributes) raise "Attribute with name '#{name}' is not defined in data model #{self}" end return nil end attribute.modify &block end
module_attributes()
click to toggle source
# File pim.rb, line 4680 def module_attributes @module_attributes ||= {} end
module_state_dependent_attributes()
click to toggle source
# File pim.rb, line 4684 def module_state_dependent_attributes @module_state_dependent_attributes ||= Hash.new { |k,v| k[v] = [] } end