lib/openehr/rm/factory.rb in openehr-1.2.99999 vs lib/openehr/rm/factory.rb in openehr-1.2.999999

- old
+ new

@@ -1,14 +1,45 @@ require 'active_support/inflector' module OpenEHR module RM class Factory - def self.create(type, *param) - type = type.downcase.camelize if type.include? '_' - class_eval("#{type}Factory").create(*param) + def initialize(cobject) + @cobject = cobject end + + class << self + def create(type, *param) + type = type.downcase.camelize if type.include? '_' + class_eval("#{type}Factory").create(*param) + end + end + + def build + Factory.create(type, params) + end + + private + def type + @cobject.rm_type_name + end + + def name + OpenEHR::RM::DataTypes::Text::DvText.new(value: ' ') + end + + def params + @cobject.attributes.inject({}) do |hash, attribute| + if attribute.children + hash[attribute.rm_attribute_name.to_sym] = + attribute.children.map { |child| Factory.new(child).build } + end + hash + end.merge( + { archetype_node_id: @cobject.node_id, + occurrences: @cobject.occurrences }) + end end class DvBooleanFactory def self.create(*param) OpenEHR::RM::DataTypes::Basic::DvBoolean.new(*param) @@ -178,9 +209,21 @@ end class OBSERVATIONFactory def self.create(*param) Composition::Content::Entry::Observation.new(*param) + end + end + + class SECTIONFactory + def self.create(*param) + Composition::Content::Navigation::Section.new(*param) + end + end + + class CLUSTERFactory + def self.create(*param) + DataStructures::ItemStructure::Representation::Cluster.new(*param) end end end end