Skip to content

Instantly share code, notes, and snippets.

@elrayle
Last active September 23, 2015 19:06
Show Gist options
  • Save elrayle/550b8be653e49a804bbf to your computer and use it in GitHub Desktop.
Save elrayle/550b8be653e49a804bbf to your computer and use it in GitHub Desktop.
Example code showing how to make each type of LDP container in Fedora
class ReindeerGroup < ActiveFedora::Base
# create a basic container
contains :info, class_name: 'Note'
# create a direct container
directly_contains :creator, has_member_relation: ::RDF::DC.creator,
class_name: 'Person'
# create an indirect container via active-fedora gem
indirectly_contains :related_objects, has_member_relation: RDF::Vocab::ORE.aggregates,
inserted_content_relation: RDF::Vocab::ORE.proxyFor, class_name: 'ActiveFedora::Base',
through: 'ActiveFedora::Aggregation::Proxy', foreign_key: :target,
type_validator: Validators::PCDMObjectValidator
# create an ORE aggregation indirect container via activefedora-aggregations gem
aggregates :reindeers, predicate: Vocab::PCDMTerms.hasMember,
class_name: 'ActiveFedora::Base',
type_validator: type_validator
end
class Note < ActiveFedora::Base
property :text, predicate: ::RDF::Vocab::Skos.note, multiple: false
end
class Person < ActiveFedora::Base
property :first_name, predicate: ::RDF::Vocab::FOAF.firstName, multiple: false
property :last_name, predicate: ::RDF::Vocab::FOAF.lastName, multiple: false
end
class Reindeer < ActiveFedora::Base
property :name, predicate: ::RDF::Vocab::FOAF.firstName, multiple: false
end
my_containers = AllContainerTypes.new
saved_note = Note.new
saved_note.text = "List of Sants' primary reindeer team..."
my_container.info << my_note
santa = Person.new
santa.first_name = "Chris"
santa.last_name = "Kringle"
my_container.creator << santa
sleigh_photo = Hydra::PCDM::Object.new
file1 = open('sleigh.jpg')
f1 = sleigh_photo.build
f1.content = file1
my_container.related_object << sleigh_photo
dasher = Reindeer.new
dasher.name = "Dasher"
my_container.reindeers << dasher
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment