Changeset 70


Ignore:
Timestamp:
Jun 29, 2008, 10:52:16 PM (16 years ago)
Author:
(none)
Message:

refs #38

Location:
ruby/trunk/lib/models
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • ruby/trunk/lib/models/assumed_library_types.rb

    r69 r70  
     1require 'date'
     2
    13module OpenEHR
    24  module Assumed_Library_Types
     
    7678      NOMINAL_DAYS_IN_YEAR = 365.24
    7779      SECONDS_IN_MINUTE = 60
     80
     81      def self.valid_year?(year)
     82        year >= 0
     83      end
     84
     85      def self.valid_day?(y, m, d)
     86        Date.valid_date?(y,m,d) and valid_year? y
     87      end
     88
     89      def self.valid_hour?(h,m,s)
     90        valid_minute?(m) and valid_second?(s) and ((h >= 0 and h < HOURS_IN_DAY) or (h == HOURS_IN_DAY and m == 0 and s == 0))
     91      end
     92      def self.valid_minute?(m)
     93        m >= 0 and m < MINUTES_IN_HOUR
     94      end
     95      def self.valid_second?(s)
     96        s >= 0 and s < SECONDS_IN_MINUTE
     97      end
     98      def self.valid_month?(m)
     99        m >= 1 and m <= MONTH_IN_YEAR
     100      end
    78101    end # end of TIME_DEFINITIONS
    79102
    80     class ISO_8601_DATE < TIME_DEFINITIONS
    81      
     103    class ISO8601_DATE < TIME_DEFINITIONS
     104      attr_reader :year, :month, :day
     105      def initialize(year = nil, month = nil, day = nil)
     106        @year = @month = @day = nil
     107        if !year.nil?
     108          self.year = year
     109        end
     110        if !month.nil?
     111          self.month = month
     112        end
     113        if !day.nil?
     114          self.day = day
     115        end
     116      end
     117      def year=(year)
     118        raise ArgumentError, "Year is not valid" if !ISO8601_DATE.valid_year?(year)
     119        @year = year
     120      end
     121      def month=(month)
     122        raise ArgumentError, "Month is not valid" if !ISO8601_DATE.valid_month?(month)
     123        @month = month
     124      end
     125      def day=(day)
     126        raise ArgumentError, "Day is not valid" if !ISO8601_DATE.valid_day?(@year, @month, day)
     127        @day = day
     128      end
     129      def as_string
     130        if (!@year.nil? and !@month.nil? and !@day.nil?)
     131          Date.new(@year, @month, @day).to_s
     132        elsif (!@year.nil? and !@month.nil? and @day.nil?)
     133          Date.new(@year, @month).to_s[0,7]
     134        elsif (!@year.nil? and @month.nil? and @day.nil?)
     135          Date.new(@year).to_s[0,4]
     136        end         
     137      end
     138      def month_unknown?
     139        @month.nil?
     140      end
     141      def day_unknown?
     142        @day.nil?
     143      end
     144      def is_extended?
     145        true
     146      end
     147      def is_partial?
     148        month_unknown? or day_unknown?
     149      end
     150      def valid_iso8601_date(string)
     151        begin
     152          date = Date.parse(string)
     153        rescue
     154          return false
     155        end
     156        true
     157      end
    82158    end # end of ISO_8601_DATE
    83159  end # end of Assumed_Types
  • ruby/trunk/lib/models/tests/test_assumed_library_types.rb

    r69 r70  
    66    @interval = OpenEHR::Assumed_Library_Types::Interval.new(1,2)
    77    @time_definition = OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.new
     8    @iso8601_date = OpenEHR::Assumed_Library_Types::ISO8601_DATE.new
     9    @iso8601_time = OpenEHR::Assumed_Library_Types::ISO8601_TIME.new
    810  end
    911  def test_initialize
    1012    assert_instance_of OpenEHR::Assumed_Library_Types::Interval, @interval
    1113    assert_instance_of OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS, @time_definition
     14    assert_instance_of OpenEHR::Assumed_Library_Types::ISO8601_DATE, @iso8601_date
     15    assert_instance_of OpenEHR::Assumed_Library_Types::ISO8601_TIME, @iso8601_time
    1216  end
    1317  def test_limits_comparable
     
    4145    assert !@interval.upper_included
    4246  end
    43   def test_definitions
     47
     48  def test_time_definitions
    4449    assert_equal OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS::DAYS_IN_LEAP_YEAR, 366
    4550    assert_equal OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS::DAYS_IN_WEEK, 7
     
    5459    assert_equal OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS::SECONDS_IN_MINUTE, 60
    5560  end
     61
     62  def test_date_time_valid
     63    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_year?(2008)
     64    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_year?(-20)
     65    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_year?(0)
     66# today
     67    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,6,19)
     68# test valid_day lower limit
     69    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(0,0,0)
     70    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(0,1,1)
     71    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(-1,1,1)
     72    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(0,1,0)
     73# test valid_day upper and lowerlimit of each month
     74    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(0,0,1)
     75    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,1,1)
     76    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,1,0)
     77    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,0,1)
     78    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,1,31)
     79    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,1,32)
     80    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,2,1)
     81    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,2,0)
     82    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,2,31)
     83    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,3,1)
     84    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,3,0)
     85    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,3,31)
     86    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,3,32)
     87    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,4,1)
     88    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,4,0)
     89    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,4,30)
     90    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,4,31)
     91    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,5,1)
     92    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,5,0)
     93    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,5,31)
     94    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,5,32)
     95    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,6,1)
     96    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,6,0)
     97    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,6,30)
     98    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,6,31)
     99    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,7,1)
     100    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,7,0)
     101    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,7,31)
     102    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,7,32)
     103    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,8,1)
     104    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,8,0)
     105    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,8,31)
     106    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,8,32)
     107    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,9,1)
     108    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,9,0)
     109    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,9,30)
     110    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,9,31)
     111    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,10,1)
     112    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,10,0)
     113    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,10,31)
     114    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,10,32)
     115    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,11,1)
     116    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,11,0)
     117    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,11,30)
     118    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,11,31)
     119    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,12,1)
     120    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,12,0)
     121    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,12,31)
     122    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,12,32)
     123# test valid_day leap year
     124    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(1900,2,28)
     125    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(1900,2,29)
     126    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2000,2,29)
     127    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_day?(2008,2,29)
     128# test valid_hour lower limit
     129    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_hour?(0,0,0)
     130    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_hour?(-1,0,0)
     131    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_hour?(0,-1,0)
     132    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_hour?(0,0,-1)
     133# test valid_hour upper limit
     134    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_hour?(0,59,0)
     135    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_hour?(0,60,0)
     136    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_hour?(0,0,59)
     137    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_hour?(0,0,60)
     138    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_hour?(24,0,0)
     139    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_hour?(24,0,1)
     140    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_hour?(24,1,0)
     141# test valid_minute method lower limit
     142    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_minute?(0)
     143    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_minute?(-1)
     144# test valid_minute method upper limit
     145    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_minute?(59)
     146    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_minute?(60)
     147# test valid_second method lower limit
     148    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_second?(0)
     149    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_second?(-1)
     150# test valid_second method upper limit
     151    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_second?(59)
     152    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_second?(60)
     153# test valid_month method lower limit
     154    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_month?(1)
     155    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_month?(0)
     156# test valid_month method upper limit
     157    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_month?(12)
     158    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_month?(13)
     159  end
     160  def test_iso8601_date
     161    assert @iso8601_date.day_unknown?
     162    assert @iso8601_date.month_unknown?
     163    assert @iso8601_date.is_partial?
     164    assert @iso8601_date.is_extended?
     165    @iso8601_date.year = 2008
     166    assert_equal 2008, @iso8601_date.year
     167    assert_raise(ArgumentError){@iso8601_date.year = -1}
     168    assert_equal "2008", @iso8601_date.as_string
     169    @iso8601_date.month = 6
     170    assert_equal 6, @iso8601_date.month
     171    assert_raise(ArgumentError){@iso8601_date.month = 13}
     172    assert_raise(ArgumentError){@iso8601_date.month = 0}
     173    assert !@iso8601_date.month_unknown?
     174    assert_equal "2008-06", @iso8601_date.as_string
     175    @iso8601_date.day = 14
     176    assert_equal 14, @iso8601_date.day
     177    assert_raise(ArgumentError){@iso8601_date.day = 0}
     178    assert_raise(ArgumentError){@iso8601_date.day = 31}
     179    assert !@iso8601_date.day_unknown?
     180    assert !@iso8601_date.is_partial?
     181    assert_equal "2008-06-14", @iso8601_date.as_string
     182    assert @iso8601_date.valid_iso8601_date("2006-06-14")
     183    assert !@iso8601_date.valid_iso8601_date("ABCDEFG")
     184  end
     185
     186  def test_iso8601_time
     187    assert @iso8601_time.
     188  end
    56189end
Note: See TracChangeset for help on using the changeset viewer.