Changeset 160 for ruby/trunk


Ignore:
Timestamp:
Jul 7, 2009, 9:45:38 PM (15 years ago)
Author:
KOBAYASHI, Shinji
Message:

refs #64

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

Legend:

Unmodified
Added
Removed
  • ruby/trunk/lib/models/rm/common/change_control.rb

    r159 r160  
    4141            @audit = audit
    4242          end
    43         end
    44 
    45         class Versioned_Object
    4643        end
    4744
     
    7370          end
    7471
     72# remove hard coding of lifecycle
    7573          def lifcycle_state=(lifecycle_state)
    7674            if lifecycle_state.nil? ||
     
    156154          end
    157155        end
     156
     157        class Versioned_Object
     158          attr_reader :uid, :owner_id, :time_created, :all_versions
     159
     160          def initialize(args = { })
     161            self.uid = args[:uid]
     162            self.owner_id = args[:owner_id]
     163            self.time_created = args[:time_created]
     164            self.all_versions = args[:all_versions]
     165          end
     166
     167          def uid=(uid)
     168            raise ArgumentError, 'uid is mandatory' if uid.nil?
     169            @uid = uid
     170          end
     171
     172          def owner_id=(owner_id)
     173            raise ArgumentError, 'owner_id is mandatory' if owner_id.nil?
     174            @owner_id = owner_id
     175          end
     176
     177          def time_created=(time_created)
     178            if time_created.nil?
     179              raise ArgumentError, 'time_created is mandatory'
     180            end
     181            @time_created = time_created
     182          end
     183
     184          def all_versions=(all_versions)
     185            if all_versions.nil? || all_versions.size < 0
     186              raise ArgumentError, 'version count invalid'
     187            end
     188            @all_versions = all_versions
     189          end
     190
     191          def all_version_ids
     192            ids = []
     193            @all_versions.each{|id| ids << id.uid}
     194            return ids
     195          end
     196
     197          def version_count
     198            return all_versions.size
     199          end
     200
     201          def has_version_id?(a_ver_id)
     202            raise ArgumentError, 'argument is mandatory' if a_ver_id.nil?
     203            return self.all_version_ids.include?(a_ver_id)
     204          end
     205
     206          def is_original_version?(a_ver_id)
     207            if a_ver_id.nil? || !self.has_version_id?(a_ver_id)
     208              raise ArgumentError, 'invalid a_ver_id'
     209            end
     210            return @all_versions[self.all_version_ids.index(a_ver_id)].instance_of? Original_Version
     211          end
     212
     213          def has_version_at_time?(a_time)
     214            raise ArgumentError, 'argument mandatory' if a_time.nil?
     215            @all_versions.each do |ver|
     216              if ver.commit_audit.time_committed == a_time
     217                return true
     218              end
     219            end
     220            return false
     221          end
     222
     223          def version_with_id(a_ver_id)
     224            if a_ver_id.nil? || !self.has_version_id?(a_ver_id)
     225              raise ArgumentError, 'argument invalid'
     226            end
     227            return @all_versions[self.all_version_ids.index(a_ver_id)]
     228          end
     229
     230          def version_at_time(a_time)
     231            if a_time.nil? || !self.has_version_at_time?(a_time)
     232              raise ArgumentError, 'argument invalid'
     233            end
     234            @all_versions.each do |ver|
     235              if ver.commit_audit.time_committed == a_time
     236                return ver
     237              end
     238            end
     239          end
     240
     241          def latest_version
     242            time_sorted_version = @all_versions.sort do |a,b|
     243              a.commit_audit.time_committed <=> b.commit_audit.time_committed
     244            end
     245            return time_sorted_version.last
     246          end
     247
     248          def latest_trunk_version
     249            trunk_versions = [ ]
     250            @all_versions.each do |ver|
     251              if ver.uid.version_tree_id.trunk_version == '1'
     252                trunk_versions << ver
     253              end
     254            end
     255            sorted_trunk_version = trunk_versions.sort do |a,b|
     256              a.commit_audit.time_committed <=> b.commit_audit.time_committed
     257            end
     258            return sorted_trunk_version.last
     259          end
     260
     261          def trunk_lifecycle_state
     262            return self.latest_trunk_version.lifecycle_state
     263          end
     264
     265          def revision_history
     266            revision_history_items = [ ]
     267            @all_versions.each do |ver|
     268              audits = [ ]
     269              if ver.instance_of? Original_Version
     270                audits << ver.attestations
     271              end
     272              audits << ver.commit_audit
     273              revision_history_items << Revision_History_Item.new(
     274                                          :audits => audits,
     275                                          :version_id => ver.uid)
     276            end
     277            return Revision_History.new(revision_history_items)
     278          end
     279
     280          def commit_original_version(args={ })
     281            @all_versions << Original_Version.new(:uid => args[:uid],
     282                                                  :preceding_version_uid => args[:preceding_version_uid],
     283                                                  :contribution => args[:contribution],
     284                                                  :commit_audit => args[:commit_audit],
     285                                                  :lifecycle_state => args[:lifecycle_state],
     286                                                  :data => args[:data],
     287                                                  :attestations => args[:attestations],
     288                                                  :signature => args[:signature])
     289          end
     290        end
    158291      end # of Change_Control
    159292    end # of Common
  • ruby/trunk/lib/models/tests/rm/test_common.rb

    r159 r160  
    342342                                  :change_type => dv_coded_text,
    343343                                  :reason => DV_Text.new('signed'))
     344    dv_date_time = DV_Date_Time.new('2009-07-07T21:10:12')
     345    audit_details = Audit_Details.new(:system_id => 'MAGI',
     346                                      :committer => party_proxy,
     347                                      :time_committed => dv_date_time,
     348                                      :change_type => dv_coded_text)
    344349    assert_nothing_raised(Exception){
    345350      @original_version = Original_Version.new(:uid => object_version_id3,
     
    351356                                               :data => 'data',
    352357                                               :lifecycle_state => dv_coded_text)}
     358    dv_date_time = DV_Date_Time.new('2009-07-08T21:10:12')
    353359    audit_details = Audit_Details.new(:system_id => 'CASPER',
    354360                                      :committer => party_proxy,
     
    366372                                       :versions => Set[object_ref],
    367373                                       :audit => audit_details)}
     374    dv_date_time = DV_Date_Time.new('2009-07-08T18:10:12')
     375    audit_details = Audit_Details.new(:system_id => 'MAGI',
     376                                      :committer => party_proxy,
     377                                      :time_committed => dv_date_time,
     378                                      :change_type => dv_coded_text)
     379    @trunk_version = Version.new(:uid => object_version_id4,
     380                                :lifecycle_state => dv_coded_text,
     381                                :commit_audit => audit_details,
     382                                :contribution => object_ref,
     383                                :change_type => dv_coded_text)
     384    assert_nothing_raised(Exception){
     385      @versioned_object = Versioned_Object.new(:uid => hier_object_id,
     386                                               :owner_id => object_ref,
     387                                               :time_created => dv_date_time,
     388                                               :all_versions => [@version,@original_version,@imported_version,@trunk_version])}
    368389  end
    369390
     
    373394    assert_instance_of Imported_Version, @imported_version
    374395    assert_instance_of OpenEHR::RM::Common::Change_Control::Contribution, @contribution
     396    assert_instance_of Versioned_Object, @versioned_object
    375397  end
    376398
     
    400422    assert_equal 'STU::VWX::1.2.3', @imported_version.preceding_version_uid.value
    401423    assert_equal '532', @imported_version.lifecycle_state.defining_code.code_string
    402    
    403424  end
    404425
     
    408429    assert_equal 'for contribution', @contribution.audit.description
    409430  end
     431
     432  def test_versioned_object
     433    assert_equal 'ABC', @versioned_object.uid.value
     434    assert_equal 'unknown', @versioned_object.owner_id.namespace
     435    assert_equal 18, @versioned_object.time_created.hour
     436    assert_equal [@version, @original_version, @imported_version, @trunk_version],
     437                    @versioned_object.all_versions
     438    assert_equal 4, @versioned_object.version_count
     439    assert_equal [@version.uid, @original_version.uid, @imported_version.uid, @trunk_version.uid],
     440                   @versioned_object.all_version_ids
     441    assert @versioned_object.has_version_id?(@version.uid)
     442    assert !@versioned_object.is_original_version?(@version.uid)
     443    assert @versioned_object.is_original_version?(@original_version.uid)
     444    assert @versioned_object.has_version_at_time?(DV_Date_Time.new('2009-07-06T21:10:12'))
     445    assert_equal @version, @versioned_object.version_with_id(@version.uid)
     446    assert_equal @version, @versioned_object.version_at_time(@version.commit_audit.time_committed)
     447    assert_equal @imported_version, @versioned_object.latest_version
     448    assert_equal @trunk_version, @versioned_object.latest_trunk_version
     449    assert_equal 'complete', @versioned_object.trunk_lifecycle_state.value
     450    assert_equal '2009-07-08T18:10:12', @versioned_object.revision_history.most_recent_version_time_committed
     451    assert_nothing_raised(Exception){
     452      @versioned_object.commit_original_version(:contribution => @original_version.contribution,
     453                                                :uid => @original_version.uid,
     454                                                :preceding_version_uid => @original_version.preceding_version_uid,
     455                                                :commit_audit => @original_version.commit_audit,
     456                                                :attestations => @original_version.attestations,
     457                                                :lifecycle_state => @original_version.lifecycle_state,
     458                                                :data => 'commit original',
     459                                                :signature => 'testtett')}
     460    assert_equal 5, @versioned_object.version_count
     461  end
    410462end
Note: See TracChangeset for help on using the changeset viewer.