module OpenEhr module AM module Archetype module Constraint_Model module Primitive class C_PRIMITIVE def assumed_value raise NotImplementedError, "assumed_value should be implemented" end def default_value raise NotImplementedError, "assumed_value should be implemented" end def has_assumed_value? assumed_value != nil end def valid_value? raise NotImplementedError, "valid_value? should be implemented" end end class C_BOOLEAN < C_PRIMITIVE attr_reader :true_valid, :false_valid, :assumed_value def initialize(args = { }) @true_valid = args[:true_valid] ? args[:true_valid] : false @false_valid = args[:false_valid] ? args[:false_valid] : false @assumed_value = args[:assumed_value] ? args[:assumed_value] : false binary_consistency(@true_valid, @false_valid) end def true_valid=(true_valid) binary_consistency(true_valid, @false_valid) @true_valid = true_valid end def false_valid=(false_valid) binary_consistency(@true_valid,false_valid) @false_valid = false_valid end def valid_value? end def default_value(a_value = nil) if a_value == nil @true_valid else (a_value && @true_valid) || (!a_value && @false_valid) end end private def binary_consistency(true_valid, false_valid) if !true_valid && !false_valid raise ArgumentError, "Either true_valid or false_valid must be true" end end end # of C_Boolean class C_STRING < C_PRIMITIVE end class C_INTEGER < C_PRIMITIVE end class C_REAL < C_PRIMITIVE end class C_TIME < C_PRIMITIVE end class C_DATE < C_PRIMITIVE end class C_DATE_TIME < C_PRIMITIVE end class C_DURATION < C_PRIMITIVE attr_accessor :years_allowed, :months_allowed, :weeks_allowed, :days_allowed, :hours_allowed, :minutes_allowed, :seconds_allowed, :fractional_seconds_allowed, :range, :assumed_value end end # of Primitive end # of Constraint_Model end # of Archetype end # of AM end # of OpenEHR