Changeset 120 for ruby/trunk/lib/models
- Timestamp:
- Apr 27, 2009, 10:52:33 PM (15 years ago)
- Location:
- ruby/trunk/lib/models
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
ruby/trunk/lib/models/assumed_library_types.rb
r83 r120 2 2 require 'date' 3 3 require 'time' 4 require 'parsedate' 4 5 5 6 module OpenEHR … … 109 110 end # end of TIME_DEFINITIONS 110 111 111 class ISO8601_DATE < TIME_DEFINITIONS112 module ISO8601_DATE_MODULE 112 113 attr_reader :year, :month, :day 113 def initialize(year = nil, month = nil, day = nil)114 @year = @month = @day = nil115 if !year.nil?116 self.year = year117 end118 if !month.nil?119 self.month = month120 end121 if !day.nil?122 self.day = day123 end124 end125 114 def year=(year) 126 raise ArgumentError, "Year is not valid" if !ISO8601_DATE.valid_year?(year)115 raise ArgumentError, "Year is not valid" unless ISO8601_DATE.valid_year?(year) 127 116 @year = year 128 117 end 129 118 def month=(month) 130 raise ArgumentError, "Month is not valid" if !ISO8601_DATE.valid_month?(month)119 raise ArgumentError, "Month is not valid" unless month.nil? or ISO8601_DATE.valid_month?(month) 131 120 @month = month 132 121 end 133 122 def day=(day) 134 raise ArgumentError, "Day is not valid" if !ISO8601_DATE.valid_day?(@year, @month, day)123 raise ArgumentError, "Day is not valid" unless day.nil? or ISO8601_DATE.valid_day?(@year, @month, day) 135 124 @day = day 136 125 end … … 156 145 month_unknown? or day_unknown? 157 146 end 147 end 148 149 class ISO8601_DATE < TIME_DEFINITIONS 150 include ISO8601_DATE_MODULE 151 def initialize(string) 152 /(\d{4})(?:-(\d{2})(?:-(\d{2})?)?)?/ =~ string 153 if $1.nil? 154 raise ArgumentError, 'data invalid' 155 else 156 self.year = $1.to_i 157 end 158 if $2.nil? 159 self.month = nil 160 else 161 self.month = $2.to_i 162 end 163 if $3.nil? 164 self.day = nil 165 else 166 self.day = $3.to_i 167 end 168 end 158 169 def self.valid_iso8601_date?(string) 159 170 begin … … 164 175 true 165 176 end 166 167 177 end # end of ISO8601_DATE 168 178 169 class ISO8601_TIME < TIME_DEFINITIONS179 module ISO8601_TIME_MODULE 170 180 attr_reader :hour, :minute, :second, :fractional_second, :timezone 171 def initialize(hh, mm = nil, ss = nil, msec = nil, tz = nil) 172 raise ArgumentError, "Not valid hour format" if !ISO8601_TIME.valid_hour?(hh,mm,ss) 173 @hour = hh; @minute = mm; @second = ss 174 @fractional_second = msec; @timezone = tz 175 end 181 176 182 def hour=(hour) 177 183 raise ArgumentError, "hour is not valid" if !ISO8601_TIME.valid_hour?(hour, @minute, @second) … … 189 195 end 190 196 def second=(second) 191 raise ArgumentError, "minute not defined" if @minute.nil? 197 raise ArgumentError, "minute not defined" if @minute.nil? and !second.nil? 192 198 raise ArgumentError, "second is not valid" if !second.nil? and !ISO8601_TIME.valid_second?(second) 193 199 @second = second 194 200 end 195 201 def fractional_second=(fractional_second) 196 raise ArgumentError, "minute not defined" if minute_unknown? 197 raise ArgumentError, "second not defined" if second_unknown? 198 raise ArgumentError, "fractional second should be lower than 1.0" if fractional_second >= 1.0202 raise ArgumentError, "minute not defined" if minute_unknown? and !fractional_second.nil? 203 raise ArgumentError, "second not defined" if second_unknown? and !fractional_second.nil? 204 raise ArgumentError, "fractional second should be lower than 1.0" if !fractional_second.nil? and fractional_second >= 1.0 199 205 @fractional_second = fractional_second 200 206 end … … 204 210 else 205 211 return true 212 end 213 end 214 def timezone=(timezone) 215 unless timezone.nil? or timezone == 'Z' 216 if /[+-](\d{2}):?(\d{2})/ =~ timezone 217 @timezone = timezone 218 else 219 raise ArgumentError, "timezone invalid" 220 end 221 else 222 @timezone = nil 206 223 end 207 224 end … … 231 248 s 232 249 end 250 end 251 252 class ISO8601_TIME < TIME_DEFINITIONS 253 include ISO8601_TIME_MODULE 254 def initialize(string) 255 /(\d{2}):?(\d{2})?(:?)(\d{2})?((\.|,)(\d+))?(Z|([+-](\d{2}):?(\d{2})))?/ =~ string 256 if $2.nil? 257 self.minute = nil 258 else 259 self.minute = $2.to_i 260 end 261 if $4.nil? 262 self.second = nil 263 else 264 self.second = $4.to_i 265 end 266 if $1.nil? 267 raise ArgumentError, 'data invalid' 268 else 269 self.hour = $1.to_i 270 end 271 if $7.nil? 272 self.fractional_second = nil 273 else 274 self.fractional_second = ("0." + $7).to_f 275 end 276 if $8.nil? 277 self.timezone = nil 278 else 279 self.timezone = $8 280 end 281 end 233 282 def self.valid_iso8601_time?(s) 234 283 if /(\d{2}):?(\d{2})?(:?)(\d{2})?((\.|,)(\d+))?(Z|([+-](\d{2}):?(\d{2})))?/ =~ s … … 273 322 end # end of ISO8601_TIME 274 323 324 class ISO8601_DATE_TIME < ISO8601_DATE 325 include ISO8601_DATE_MODULE, ISO8601_TIME_MODULE 326 def initialize(string) 327 /(\d{4})(?:-(\d{2})(?:-(\d{2})(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d))?)?(Z|([+-]\d{2}):(\d{2}))?)?)?)?/ =~ string 328 if $1.empty? 329 raise ArgumentError, 'format invalid' 330 else 331 self.year = $1.to_i 332 end 333 if $2.nil? 334 self.month = nil 335 else 336 self.month = $2.to_i 337 end 338 if $3.nil? 339 self.day = nil 340 else 341 self.day = $3.to_i 342 end 343 if $5.nil? 344 self.minute = nil 345 else 346 self.minute = $5.to_i 347 end 348 if $6.nil? 349 self.second = nil 350 else 351 self.second = $6.to_i 352 end 353 if $4.nil? 354 self.hour = nil 355 else 356 self.hour = $4.to_i 357 end 358 if $7.nil? 359 self.fractional_second = nil 360 else 361 self.fractional_second = ("0."+$7).to_f 362 end 363 if $8.nil? 364 self.timezone = nil 365 else 366 self.timezone = $8+$9+$10 367 end 368 end 369 end 370 275 371 class ISO8601_TIMEZONE 276 372 attr_accessor :sign, :hour, :minute -
ruby/trunk/lib/models/rm/data_types/quantity.rb
r104 r120 58 58 end 59 59 end 60 61 autoload :Date_Time, "rm/data_types/quantity/date_time.rb" 62 60 63 end # of Quantity 61 64 end # of Data_Types -
ruby/trunk/lib/models/rm/data_types/quantity/date_time.rb
r119 r120 7 7 module Quantity 8 8 module Date_Time 9 class DV_Temporal < OpenEHR::RM::Data_Types::Quantity::DV_Absolute_Quantity 10 attr_reader :value 11 def initialize(value) 12 self.value = value 13 end 14 def value=(value) 15 if value.empty? or value.nil? 16 raise ArgumentError, 'invalid value' 17 end 18 @value = value 19 end 20 def diff(value) 21 raise NotImplementedError, 'diff must be implemented' 22 end 23 end 24 9 25 class DV_Date < DV_Temporal 26 def initialize 27 end 10 28 end 11 end 29 end # of Date_Time 12 30 end # of Quantity 13 31 end # of Data_Types -
ruby/trunk/lib/models/tests/rm/test_data_types.rb
r119 r120 159 159 end 160 160 end 161 162 class QuantityDateTimeTest < Test::Unit::TestCase 163 def setup 164 assert_nothing_raised(Exception){@dv_temporal = OpenEHR::RM::Data_Types::Quantity::Date_Time::DV_Temporal.new('2008')} 165 end 166 def test_init 167 assert_instance_of OpenEHR::RM::Data_Types::Quantity::Date_Time::DV_Temporal, @dv_temporal 168 end 169 def test_dv_temporal 170 assert_equal '2008', @dv_temporal.value 171 assert_raise(NotImplementedError){@dv_temporal.diff('2009')} 172 end 173 end -
ruby/trunk/lib/models/tests/test_assumed_library_types.rb
r89 r120 6 6 assert_nothing_raised(Exception){@interval = OpenEHR::Assumed_Library_Types::Interval.new(1,2)} 7 7 assert_nothing_raised(Exception){@time_definition = OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.new} 8 assert_nothing_raised(Exception){@iso8601_date = OpenEHR::Assumed_Library_Types::ISO8601_DATE.new} 9 assert_nothing_raised(Exception){@iso8601_time = OpenEHR::Assumed_Library_Types::ISO8601_TIME.new(1)} 8 assert_nothing_raised(Exception){@iso8601_date = OpenEHR::Assumed_Library_Types::ISO8601_DATE.new('2009-04-27')} 9 assert_nothing_raised(Exception){@iso8601_time = OpenEHR::Assumed_Library_Types::ISO8601_TIME.new('15:55:37.32+0900')} 10 assert_nothing_raised(Exception){@iso8601_date_time = OpenEHR::Assumed_Library_Types::ISO8601_DATE_TIME.new('2009-04-27T15:55:37.32+0900')} 11 # assert_nothing_raised(Exception){@iso8601_duration = OpenEHR::Assumed_Library_Types::ISO8601_DURATION.new()} 10 12 assert_nothing_raised(Exception){@iso8601_timezone = OpenEHR::Assumed_Library_Types::ISO8601_TIMEZONE.new} 11 13 end … … 15 17 assert_instance_of OpenEHR::Assumed_Library_Types::ISO8601_DATE, @iso8601_date 16 18 assert_instance_of OpenEHR::Assumed_Library_Types::ISO8601_TIME, @iso8601_time 19 assert_instance_of OpenEHR::Assumed_Library_Types::ISO8601_DATE_TIME, @iso8601_date_time 17 20 assert_instance_of OpenEHR::Assumed_Library_Types::ISO8601_TIMEZONE, @iso8601_timezone 18 21 end … … 62 65 end 63 66 64 def test_ date_time_valid67 def test_time_definition_validity 65 68 assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_year?(2008) 66 69 assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_year?(-20) … … 161 164 end 162 165 def test_iso8601_date 166 assert_equal 2009, @iso8601_date.year 167 assert_equal 4,@iso8601_date.month 168 assert_equal 27,@iso8601_date.day 169 assert_nothing_raised(Exception){@iso8601_date = OpenEHR::Assumed_Library_Types::ISO8601_DATE.new('2008')} 163 170 assert @iso8601_date.day_unknown? 164 171 assert @iso8601_date.month_unknown? … … 166 173 assert @iso8601_date.is_extended? 167 174 assert_nothing_raised(Exception){@iso8601_date.year = 2008} 168 assert_equal 2008, @iso8601_date.year169 175 assert_raise(ArgumentError){@iso8601_date.year = -1} 170 176 assert_equal "2008", @iso8601_date.as_string … … 187 193 188 194 def test_iso8601_time 195 assert_equal 15, @iso8601_time.hour 196 assert_equal 55, @iso8601_time.minute 197 assert_equal 37, @iso8601_time.second 198 assert_equal 0.32, @iso8601_time.fractional_second 199 assert_equal '+0900', @iso8601_time.timezone 200 201 # assert_nothing_raised(Exception){@iso8601_time = OpenEHR::Assumed_Library_Types::ISO8601_TIME.new('15:55:37.32+0900')} 202 203 assert_nothing_raised(Exception){@iso8601_time = OpenEHR::Assumed_Library_Types::ISO8601_TIME.new('01')} 189 204 assert_equal 1, @iso8601_time.hour 190 205 assert @iso8601_time.is_partial? … … 240 255 assert !OpenEHR::Assumed_Library_Types::ISO8601_TIME.valid_iso8601_time?("240000.011Z") 241 256 end 257 258 def test_iso_8601_date_time 259 assert_equal 2009, @iso8601_date_time.year 260 261 # assert_nothing_raised(Exception){@iso8601_date_time = OpenEHR::Assumed_Library_Types::ISO8601_DATE_TIME.new('2009-04-27T15:55:37.32+0900')} 262 end 263 242 264 def test_iso8601_timezone 243 265 @iso8601_timezone.sign = "+1"
Note:
See TracChangeset
for help on using the changeset viewer.