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

refs #38

File:
1 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
Note: See TracChangeset for help on using the changeset viewer.