Code: Version Build Status Coverage Status Code Climate Dependency Status

Docs: Documentation Status API Docs Contribution Guidelines Apache 2.0 License


This gem provides two mixins and a presenter designed to speed up ActiveFedora-based discovery and display operations.

This gem depends only upon ActiveFedora, not on Hydra or HydraHead

Table of Contents

Classes and Mixins


This mixin adds an indexed_ordered_aggregation(name) class method that, in turn, adds two methods to the including class.

class Container < ActiveFedora::Base
  include ActiveFedora::Associations
  include SpeedyAF::OrderedAggregationIndex

  ordered_aggregation :items, class_name: 'Item', through: :list_source
  indexed_ordered_aggregation :items

In the example above, those two methods are indexed_ordered_items and indexed_ordered_item_ids. They return the same data as the standard ordered_items and ordered_item_ids, respectively, but rely more on Solr and less on the Fedora repository. The _items variant returns a lazy enumerator that yields target objects instead of an ActiveFedora::Orders::TargetProxy, but the effect is similar.


When mixed into an ActiveFedora::File descendant, it will index the resource's full content to Solr on save. This allows the Base to load it up without hitting Fedora.


SpeedyAF::Base is designed to load everything it can about an ActiveFedora object from Solr, transparently lazy-loading and delegating calls to the underlying Fedora object only when necessary. It casts indexed attributes to their correct types, loads both indexed and unindexed subresources (See IndexedContent), and responds to most reflection accessors with another Base instance containing proxies for the desired objects.

A presenter (or array of presenters) can be instantiated by calling:

SpeedyAF::Base.find(item_pid) or SpeedyAF::Base.where(solr_query)

See the spec tests for details.


Add this line to your application's Gemfile:

gem 'speedy_af'

And then execute:

$ bundle install

Or install it yourself via:

$ gem install speedy_af


If you have questions or need help, please email the Hydra community tech list or stop by the #dev channel in the Hydra community Slack team: Slack Status

Known Issues

  • Base currently tries to grab all relevant rows from Solr at once. Future releases will be more mindful of both local resources and Solr request limits.
  • Base may not play nicely with language-tagged RDF literals, as ActiveFedora does not currently index/encode the language tag into Solr.


This software has been developed by and is brought to you by the Hydra community. Learn more at the Project Hydra website.

Project Hydra Logo