Changeset 343 for ruby


Ignore:
Timestamp:
Nov 12, 2009, 1:43:18 PM (14 years ago)
Author:
KOBAYASHI, Shinji
Message:

ref #55
time calculation is difficult

Location:
ruby/branches/0.5
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • ruby/branches/0.5/lib/open_ehr/assumed_library_types.rb

    r289 r343  
    583583        self.minutes = $13.to_i
    584584        self.seconds = $15.to_i
    585         self.fractional_second = $16.to_f
     585        unless $16.nil?
     586          self.fractional_second = $16.to_f
     587        end
    586588      end
    587589    end # end of ISO8601Duration
  • ruby/branches/0.5/lib/open_ehr/rm/data_structures/history.rb

    r342 r343  
    44# refs #55
    55include OpenEHR::RM::DataStructures
     6include OpenEHR::RM::Common::Archetyped
    67
    78module OpenEHR
     
    3940        end
    4041
    41         class Event
     42        class Event < Locatable
     43          attr_reader :data, :time
     44          attr_accessor :state
     45
     46          def initialize(args = { })
     47            super(args)
     48            self.data = args[:data]
     49            self.time = args[:time]
     50            self.state = args[:state]
     51          end
     52
     53          def data=(data)
     54            raise ArgumentError, 'data is mandatory' if data.nil?
     55            @data = data
     56          end
     57
     58          def time=(time)
     59            raise ArgumentError, 'time is mandatory' if time.nil?
     60            @time = time
     61          end
     62
     63          def offset
     64            return @time.diff(@parent.origin)
     65          end
    4266        end
    4367      end # end of History
  • ruby/branches/0.5/lib/open_ehr/rm/data_types/quantity/date_time.rb

    r342 r343  
    100100
    101101            def magnitude
    102               return @hour * 60 * 60 + @minute * 60 + @second + @fractional_second
     102              if @fractional_second.nil?
     103                return @hour * 60 * 60 + @minute * 60 + @second
     104              else
     105                return @hour * 60 * 60 + @minute * 60 + @second + @fractional_second
     106              end
    103107            end
    104108
     
    109113              second = (diff - hour * 60 *60 - minute * 60).to_i
    110114              fractional_second = ((diff - diff.to_i)*1000000.0).to_i/1000000.0
    111               return DvDuration.new(:value =>
    112                         'P0Y0M0W0DT' + hour.to_s + 'H' +
    113                         minute.to_s + 'M' +
    114                         second.to_s + fractional_second.to_s[1..-1] + 'S')
     115              str = 'P0Y0M0W0DT' + hour.to_s + 'H' +
     116                minute.to_s + 'M' + second.to_s
     117              if @fractional_second.nil?
     118                str += 'S'
     119              else
     120                str += fractional_second.to_s[1..-1] + 'S'
     121              end
     122              return DvDuration.new(:value => str)
    115123            end
    116124          end
     
    161169              minute = ((time_diff - hour*60*60)/60).to_i
    162170              second = (time_diff - hour * 60 *60 - minute * 60).to_i
    163               fractional_second =
    164                 ((time_diff - time_diff.to_i)*1000000.0).to_i/1000000.0
    165               return DvDuration.new(:value =>
    166                         date_duration.value + 'T' +
    167                         hour.to_s + 'H' +
    168                         minute.to_s + 'M' +
    169                         second.to_s + fractional_second.to_s[1..-1] + 'S')
     171              str = date_duration.value + 'T' + hour.to_s + 'H' +
     172                minute.to_s + 'M' + second.to_s
     173              if @fractional_second.nil?
     174                return DvDuration.new(:value => str +'S')
     175              else
     176                fractional_second =
     177                  ((time_diff - time_diff.to_i)*1000000.0).to_i/1000000.0
     178                return DvDuration.new(:value => str +
     179                                      fractional_second.to_s[1..-1] + 'S')
     180              end
    170181            end
    171182
     
    174185            def split_date_time(date_time)
    175186              /^(.*)T(.*)$/ =~ date_time.as_string
    176               return DvDate.new($1), DvTime.new($2)
     187              return DvDate.new(:value => $1), DvTime.new(:value => $2)
    177188            end
    178189          end
  • ruby/branches/0.5/spec/lib/open_ehr/rm/data_structures/history/history_spec.rb

    r342 r343  
    44include OpenEHR::RM::DataTypes::Text
    55include OpenEHR::RM::DataTypes::Quantity::DateTime
     6
    67describe History do
    78  before(:each) do
  • ruby/branches/0.5/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_date_time_spec.rb

    r335 r343  
    1818    @dv_date_time.should == DvDateTime.new(:value => '2009-09-29T15:03:22.3')
    1919  end
     20
     21  it 'diff should be caluculated from past to future' do
     22    future = DvDateTime.new(:value => '2009-10-29T16:23:30.3')
     23    @dv_date_time.diff(future).value.should == 'P0Y1M0W0DT1H20M8.0S'
     24  end
    2025end
Note: See TracChangeset for help on using the changeset viewer.