Changeset 120


Ignore:
Timestamp:
Apr 27, 2009, 10:52:33 PM (15 years ago)
Author:
KOBAYASHI, Shinji
Message:

refs #36, #49

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

Legend:

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

    r83 r120  
    22require 'date'
    33require 'time'
     4require 'parsedate'
    45
    56module OpenEHR
     
    109110    end # end of TIME_DEFINITIONS
    110111
    111     class ISO8601_DATE < TIME_DEFINITIONS
     112    module ISO8601_DATE_MODULE
    112113      attr_reader :year, :month, :day
    113       def initialize(year = nil, month = nil, day = nil)
    114         @year = @month = @day = nil
    115         if !year.nil?
    116           self.year = year
    117         end
    118         if !month.nil?
    119           self.month = month
    120         end
    121         if !day.nil?
    122           self.day = day
    123         end
    124       end
    125114      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)
    127116        @year = year
    128117      end
    129118      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)
    131120        @month = month
    132121      end
    133122      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)
    135124        @day = day
    136125      end
     
    156145        month_unknown? or day_unknown?
    157146      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
    158169      def self.valid_iso8601_date?(string)
    159170        begin
     
    164175        true
    165176      end
    166 
    167177    end # end of ISO8601_DATE
    168178
    169     class ISO8601_TIME < TIME_DEFINITIONS
     179    module ISO8601_TIME_MODULE
    170180      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
    176182      def hour=(hour)
    177183        raise ArgumentError, "hour is not valid" if !ISO8601_TIME.valid_hour?(hour, @minute, @second)
     
    189195      end
    190196      def second=(second)
    191         raise ArgumentError, "minute not defined" if @minute.nil?
     197        raise ArgumentError, "minute not defined" if @minute.nil? and !second.nil?
    192198        raise ArgumentError, "second is not valid" if !second.nil? and !ISO8601_TIME.valid_second?(second)
    193199        @second = second
    194200      end
    195201      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.0
     202        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
    199205        @fractional_second = fractional_second
    200206      end
     
    204210        else
    205211          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
    206223        end
    207224      end
     
    231248        s
    232249      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
    233282      def self.valid_iso8601_time?(s)
    234283        if /(\d{2}):?(\d{2})?(:?)(\d{2})?((\.|,)(\d+))?(Z|([+-](\d{2}):?(\d{2})))?/ =~ s
     
    273322    end # end of ISO8601_TIME
    274323
     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
    275371    class ISO8601_TIMEZONE
    276372      attr_accessor :sign, :hour, :minute
  • ruby/trunk/lib/models/rm/data_types/quantity.rb

    r104 r120  
    5858          end
    5959        end
     60
     61        autoload :Date_Time, "rm/data_types/quantity/date_time.rb"
     62       
    6063      end # of Quantity
    6164    end # of Data_Types
  • ruby/trunk/lib/models/rm/data_types/quantity/date_time.rb

    r119 r120  
    77      module Quantity
    88        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
    925          class DV_Date < DV_Temporal
     26            def initialize
     27            end
    1028          end
    11         end
     29        end # of Date_Time
    1230      end # of Quantity
    1331    end # of Data_Types
  • ruby/trunk/lib/models/tests/rm/test_data_types.rb

    r119 r120  
    159159  end
    160160end
     161
     162class 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
     173end
  • ruby/trunk/lib/models/tests/test_assumed_library_types.rb

    r89 r120  
    66    assert_nothing_raised(Exception){@interval = OpenEHR::Assumed_Library_Types::Interval.new(1,2)}
    77    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()}
    1012    assert_nothing_raised(Exception){@iso8601_timezone = OpenEHR::Assumed_Library_Types::ISO8601_TIMEZONE.new}
    1113  end
     
    1517    assert_instance_of OpenEHR::Assumed_Library_Types::ISO8601_DATE, @iso8601_date
    1618    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
    1720    assert_instance_of OpenEHR::Assumed_Library_Types::ISO8601_TIMEZONE, @iso8601_timezone
    1821  end
     
    6265  end
    6366
    64   def test_date_time_valid
     67  def test_time_definition_validity
    6568    assert OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_year?(2008)
    6669    assert !OpenEHR::Assumed_Library_Types::TIME_DEFINITIONS.valid_year?(-20)
     
    161164  end
    162165  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')}
    163170    assert @iso8601_date.day_unknown?
    164171    assert @iso8601_date.month_unknown?
     
    166173    assert @iso8601_date.is_extended?
    167174    assert_nothing_raised(Exception){@iso8601_date.year = 2008}
    168     assert_equal 2008, @iso8601_date.year
    169175    assert_raise(ArgumentError){@iso8601_date.year = -1}
    170176    assert_equal "2008", @iso8601_date.as_string
     
    187193
    188194  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')}
    189204    assert_equal 1, @iso8601_time.hour
    190205    assert @iso8601_time.is_partial?
     
    240255    assert !OpenEHR::Assumed_Library_Types::ISO8601_TIME.valid_iso8601_time?("240000.011Z")
    241256  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
    242264  def test_iso8601_timezone
    243265    @iso8601_timezone.sign = "+1"
Note: See TracChangeset for help on using the changeset viewer.