A Hydra gem for adding BagIt functionality to ActiveFedora models.


Add this line to your application's Gemfile:

gem 'hybag'

And then execute:

$ bundle

Or install it yourself as:

$ gem install hybag


Include the module in ActiveFedora models you'd like to be baggable

  class TestClass < ActiveFedora::Base
    include Hybag::Baggable

To convert an exported bag back to a model

NOTE: Right now for this to work there must be datastreams defined on the discovered model which match the metadata datastream IDs as tag files and content datastream IDs as data files. This means for a descMetadata datastream to be populated bag_root/descMetadata.* (where * is the extension) must exist.

  result = Hybag.ingest(BagIt::Bag.new("/path/to/bag"))
  result.class # => Model in fedora/rels-ext.rdf (preferred) or hybag.yml in bag root. More info below.
  result.persisted? # => false


Determining the model name.

Currently the model name is determined from the bag's fedora/rels-ext.rdf file (which Hybag::Baggable exports) or is configurable via a block as shown before

bag = Bagit::Bag.new("/path/to/bag")
test_class = Hybag.ingest(bag) do |ingester|
  ingester.bag == bag # => true
  ingester.model_name = "ActiveFedora::Base"
test_class.class # => ActiveFedora::Base


Write the item to disk in rails_root/tmp/bags/filler/pid

  test_class = TestClass.new.write_bag('filler')

Delete a bag that was written already



  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request