Class: Moab::FileInventoryDifference
- Inherits:
-
Manifest
- Object
- Manifest
- Moab::FileInventoryDifference
- Includes:
- HappyMapper
- Defined in:
- lib/moab/file_inventory_difference.rb
Overview
Copyright © 2012 by The Board of Trustees of the Leland Stanford Junior University. All rights reserved. See LICENSE for details.
Compares two FileInventory instances based primarily on file signatures and secondarily on file pathnames. Although the usual use will be to compare the content of 2 different temporal versions of the same object, it can also be used to verify an inventory document against an inventory harvested from a directory. The report is subdivided into sections for each of the file groups that compose the inventories being compared.
Data Model
-
FileInventoryDifference = compares two FileInventory instances based on file signatures and pathnames
-
FileGroupDifference [1..*] = performs analysis and reports differences between two matching FileGroup objects
-
FileGroupDifferenceSubset [1..5] = collects a set of file-level differences of a give change type
-
FileInstanceDifference [1..*] = contains difference information at the file level
-
FileSignature [1..2] = contains the file signature(s) of two file instances being compared
-
-
-
-
Instance Attribute Summary collapse
-
#basis ⇒ String
Id information from the version inventory used as the basis for comparison.
-
#difference_count ⇒ Integer
The number of differences found between the two inventories that were compared (dynamically calculated).
-
#digital_object_id ⇒ String
The digital object ID (druid).
-
#group_differences ⇒ Array<FileGroupDifference>
The set of data groups comprising the version.
-
#other ⇒ String
Id information about the version inventory compared to the basis.
-
#report_datetime ⇒ Time
The datetime at which the report was run.
Instance Method Summary collapse
-
#common_object_id(basis_inventory, other_inventory) ⇒ String
Returns either the common digitial object ID, or a concatenation of both inventory’s IDs.
-
#compare(basis_inventory, other_inventory) ⇒ FileInventoryDifference
Returns a report showing the differences, if any, between two inventories.
-
#differences_detail ⇒ Hash
Serializes the data and then filters it to report only the changes.
-
#group_difference(group_id) ⇒ FileGroupDifference
The subset of this report for the specified group_id (or nil if not found).
-
#initialize(opts = {}) ⇒ FileInventoryDifference
constructor
A new instance of FileInventoryDifference.
-
#summary_fields ⇒ Array<String>
The data fields to include in summary reports.
Constructor Details
#initialize(opts = {}) ⇒ FileInventoryDifference
Returns a new instance of FileInventoryDifference.
28 29 30 31 |
# File 'lib/moab/file_inventory_difference.rb', line 28 def initialize(opts={}) @group_differences = Array.new super(opts) end |
Instance Attribute Details
#basis ⇒ String
Returns Id information from the version inventory used as the basis for comparison.
47 |
# File 'lib/moab/file_inventory_difference.rb', line 47 attribute :basis, String |
#difference_count ⇒ Integer
Returns the number of differences found between the two inventories that were compared (dynamically calculated).
39 |
# File 'lib/moab/file_inventory_difference.rb', line 39 attribute :difference_count, Integer, :tag=> 'differenceCount',:on_save => Proc.new {|i| i.to_s} |
#digital_object_id ⇒ String
Returns The digital object ID (druid).
35 |
# File 'lib/moab/file_inventory_difference.rb', line 35 attribute :digital_object_id, String, :tag => 'objectId' |
#group_differences ⇒ Array<FileGroupDifference>
Returns The set of data groups comprising the version.
67 |
# File 'lib/moab/file_inventory_difference.rb', line 67 has_many :group_differences, FileGroupDifference, :tag => 'fileGroupDifference' |
Instance Method Details
#common_object_id(basis_inventory, other_inventory) ⇒ String
Returns either the common digitial object ID, or a concatenation of both inventory’s IDs
104 105 106 107 108 109 110 |
# File 'lib/moab/file_inventory_difference.rb', line 104 def common_object_id(basis_inventory, other_inventory) if basis_inventory.digital_object_id != other_inventory.digital_object_id "#{basis_inventory.digital_object_id.to_s}|#{other_inventory.digital_object_id.to_s}" else basis_inventory.digital_object_id.to_s end end |
#compare(basis_inventory, other_inventory) ⇒ FileInventoryDifference
Returns a report showing the differences, if any, between two inventories
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/moab/file_inventory_difference.rb', line 85 def compare(basis_inventory, other_inventory) @digital_object_id ||= common_object_id(basis_inventory, other_inventory) @basis ||= basis_inventory.data_source @other ||= other_inventory.data_source @report_datetime = Time.now # get a union list of all group_ids present in either inventory group_ids = basis_inventory.group_ids | other_inventory.group_ids group_ids.each do |group_id| # get a pair of groups to compare, creating a empty group if not present in the inventory basis_group = basis_inventory.group(group_id) || FileGroup.new(:group_id => group_id) other_group = other_inventory.group(group_id) || FileGroup.new(:group_id => group_id) @group_differences << FileGroupDifference.new.compare_file_groups(basis_group, other_group) end self end |
#differences_detail ⇒ Hash
Returns Serializes the data and then filters it to report only the changes.
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/moab/file_inventory_difference.rb', line 113 def differences_detail #return self.summary if difference_count == 0 inv_diff = self.to_hash inv_diff["group_differences"].each_value do |group_diff| delete_subsets = [] group_diff["subsets"].each do |change_type,subset| delete_subsets << change_type if change_type == "identical" or subset["count"] == 0 end delete_subsets.each do |change_type| group_diff["subsets"].delete(change_type) group_diff.delete(change_type) if change_type != "identical" end group_diff.delete("subsets") if group_diff["subsets"].empty? end inv_diff end |
#group_difference(group_id) ⇒ FileGroupDifference
Returns The subset of this report for the specified group_id (or nil if not found).
76 77 78 |
# File 'lib/moab/file_inventory_difference.rb', line 76 def group_difference(group_id) @group_differences.find{ |group_difference| group_difference.group_id == group_id} end |