Build Status


Copyright © 2012 by The Board of Trustees of the Leland Stanford Junior University. All rights reserved. See LICENSE for details.

API Documentation


Design Documentation



Serializer is a module containing classes whose methods faciliate serialization of data fields to various formats. To obtain those benefits, a dependent class should inherit from Serializer::Serializable or Serializer::Manifest depending on whether XML serialization is required.


Moab is a module that provides a distintive namespace for the collection of classes it contains.


Stanford is a module that isolates classes specific to the Stanford Digital Repository


Require the following:

require 'moab'


  • 0.1 Initial Release

  • 0.2 Add support for RESTful service interface to storage, add config data

  • 0.3 Revise configuration invocation and repository_home usage

  • 0.4 Revise group differences methods, refactor storage repository & services, add service methods

  • 0.5 StorageService file retrieval now using the signature catalog. Added or revised spec tests

  • 0.6 StorageService now supports retrieving file lists and files by signature

  • 0.7 Generation of fileInventory from contentMetadata now utilizes a disposition filter. Revised test data

  • 0.8 Upgrade hashery gem to v 2.0.0

  • 0.8.1 Change Stanford::StorageServices to allow diffing against object not yet ingested

  • 0.8.2 Added methods for verification of version inventories against the storage files

  • 0.8.3 Revised methods for verification of version inventories against the storage files

  • 0.8.4 Added validation methods for Stanford's contentMetadata

  • 0.8.5 Fixed bugs in creation of deposit bag and creation of new version's repository directory

  • 0.8.6 Fixed Unit Tests related to previous release

  • 0.8.7 Added method FileGroupDifference#file_deltas to facilitate updates of shelve space, techMD, etc.

  • 0.8.8 Permit content directory to be empty when generating a version inventory

  • 1.0.0 Make ready for production, allow fixity data to be copied from Bagit manifests to inventory

  • 1.0.1 Added SHA256 to the checksums stored in a FileSignature object

  • 1.1.0 More SHA256 enhancements plus isolation of manifest files in a separate folder

  • 1.1.1 Add support for generation of signature query param for inclusion in URLs

  • 1.1.2 Revise use of fixity and checksums hash

  • 1.1.3 All Moab manifests should now include all checksum types even if missing from source inventory

  • 1.2.0 Content and metadata groups can be separately added to bag. Added create_tarfile method.

  • 1.2.1 Correctly handle situations in which content group is empty

  • 1.2.2 Added capability to remediate contentMetadata that is missing fixity data

  • 1.2.3 Remediated contentMetadata now formatted with proper line breaks & indents

  • 1.2.4 Eliminate use of Pathname#realpath in favor of Pathname#expand_path

  • 1.2.5 Add Moab::ValidationException. Add support for restoration of objects & special service requests

  • 1.2.6 Fix Moab::ValidationException when manifest file not found

  • 1.2.7 Revise digital object and version storage verification to return a VerificationResult object

  • 1.2.8 Fixed Bagger initialization in spec_helper.rb

  • 1.2.9 Fixed Stanford::StorageServices.compare_cm_to_version to trap FileNotFoundException when fetching contentMetadata file

  • 1.2.10 Changed object storage and deposit model to allow use of multiple filesystems as storage roots

  • 1.2.11 Enhanced FileGroupDifferences report to include duplicate copy added or deleted

  • 1.3.0 Make compatible with Ruby 1.9

  • 1.3.1 Merge 1.2.11 changes

  • 1.3.2 Avoid monkey-patching of Time class to fix a conflict with Rails

  • 1.3.3 Fix new UtcTime class to output of String when datetime value is nil or empty

  • 1.4.0 Updates for ruby 2.x and related gems, see details at

  • 1.4.1 Ensure xml output has UTF-8 encodings

  • 1.4.3 Tidy rspec tests; confirm specs passing after bundle update

  • 1.4.4 Fixed == methods to allow comparison with objects of differing classes without exceptions