source: ruby/trunk/lib/open_ehr/am/archetype/assertion.rb@ 390

Last change on this file since 390 was 390, checked in by KOBAYASHI, Shinji, 14 years ago

fixed #73

File size: 4.8 KB
Line 
1module OpenEHR
2 module AM
3 module Archetype
4 module Assertion
5 class Assertion
6 attr_reader :expression, :tag
7 attr_accessor :string_expression, :variables
8
9 def initialize(args = { })
10 self.expression = args[:expression]
11 self.tag = args[:tag]
12 self.string_expression = args[:string_expression]
13 self.variables = args[:variables]
14 end
15
16 def expression=(expression)
17 if expression.nil? or expression.type.upcase != 'BOOLEAN'
18 raise ArgumentError, 'invalid expression'
19 end
20 @expression = expression
21 end
22
23 def tag=(tag)
24 if !tag.nil? && tag.empty?
25 raise ArgumentError, 'tag should not be empty'
26 end
27 @tag = tag
28 end
29 end
30
31 class ExprItem
32 attr_reader :type
33
34 def initialize(args = { })
35 self.type = args[:type]
36 end
37
38 def type=(type)
39 if type.nil? or type.empty?
40 raise ArgumentError, 'type is mandatory'
41 end
42 @type = type
43 end
44 end
45
46 class ExprLeaf < ExprItem
47 attr_reader :item, :reference_type
48
49 def initialize(args = { })
50 super
51 self.item = args[:item]
52 self.reference_type = args[:reference_type]
53 end
54
55 def item=(item)
56 if item.nil?
57 raise ArgumentError, 'item is mandatory'
58 end
59 @item = item
60 end
61
62 def reference_type=(reference_type)
63 if reference_type.nil?
64 raise ArgumentError, 'reference_type is mandatory'
65 end
66 @reference_type = reference_type
67 end
68 end
69
70 class ExprOperator < ExprItem
71 attr_accessor :operator, :precedence_overridden
72
73 def initialize(args = { })
74 super
75 self.operator = args[:operator]
76 self.precedence_overridden = args[:precedence_overridden]
77 end
78 end
79
80 class ExprUnaryOperator < ExprOperator
81 attr_reader :operand
82
83 def initialize(args = { })
84 super
85 self.operand = args[:operand]
86 end
87
88 def operand=(operand)
89 if operand.nil?
90 raise ArgumentError, 'operand is mandatory'
91 end
92 @operand = operand
93 end
94 end
95
96 class ExprBinaryOperator < ExprOperator
97 attr_reader :right_operand, :left_operand
98
99 def initialize(args = { })
100 super
101 self.right_operand = args[:right_operand]
102 self.left_operand = args[:left_operand]
103 end
104
105 def right_operand=(right_operand)
106 if right_operand.nil?
107 raise ArgumentError, 'right_operand is mandatory'
108 end
109 @right_operand = right_operand
110 end
111
112 def left_operand=(left_operand)
113 if left_operand.nil?
114 raise ArgumentError, 'left_operand is mandatory'
115 end
116 @left_operand = left_operand
117 end
118 end
119
120 class AssertionVariable
121 attr_reader :name, :definition
122
123 def initialize(args = { })
124 self.name = args[:name]
125 self.definition = args[:definition]
126 end
127
128 def name=(name)
129 if name.nil?
130 raise ArgumentError, 'name is mandatory'
131 end
132 @name = name
133 end
134
135 def definition=(definition)
136 if definition.nil?
137 raise ArgumentError, 'definition is mandatory'
138 end
139 @definition = definition
140 end
141 end
142
143 class OperatorKind
144 OP_EQ = 2001
145 OP_NE = 2002
146 OP_LE = 2003
147 OP_LT = 2004
148 OP_GE = 2005
149 OP_GT = 2006
150 OP_MATCHES = 2007
151
152 OP_NOT = 2010
153 OP_AND = 2011
154 OP_OR = 2012
155 OP_XOR = 2013
156 OP_IMPLIES = 2014
157 OP_FOR_ALL = 2015
158 OP_EXISTS = 2016
159
160 OP_PLUS = 2020
161 OP_MINUS = 2021
162 OP_MULTIPLY = 2022
163 OP_DIVIDE = 2023
164 OP_EXP = 2024
165
166 attr_reader :value
167
168 def initialize(args = { })
169 self.value = args[:value]
170 end
171
172 def value=(value)
173 unless OperatorKind.valid_operator? value
174 raise ArgumentError, 'invalid value'
175 end
176 @value = value
177 end
178
179 def self.valid_operator?(value)
180 if value >= OP_EQ && value <= OP_EXP
181 return true
182 else
183 return false
184 end
185 end
186 end
187 end # of Assetion
188 end # of Archtype
189 end #of AM
190end # of OpenEHR
Note: See TracBrowser for help on using the repository browser.