Class: ActiveFedora::RelsExtDatastream
- Inherits:
-
Datastream
- Object
- Rubydora::Datastream
- Datastream
- ActiveFedora::RelsExtDatastream
- Defined in:
- lib/active_fedora/rels_ext_datastream.rb
Instance Attribute Summary collapse
-
#model ⇒ Object
Returns the value of attribute model.
Attributes inherited from Datastream
#digital_object, #last_modified
Class Method Summary collapse
- .default_attributes ⇒ Object
- .ensure_predicates_exist!(xml) ⇒ Object
-
.from_xml(xml, tmpl) ⇒ Object
Populate a RelsExtDatastream object based on the “datastream” content Assumes that the datastream contains RDF XML from a Fedora RELS-EXT datastream.
Instance Method Summary collapse
- #changed? ⇒ Boolean
-
#from_solr(solr_doc) ⇒ Object
** EXPERIMENTAL **.
- #metadata? ⇒ Boolean
- #serialize! ⇒ Object
-
#to_rels_ext ⇒ Object
Creates a RELS-EXT datastream for insertion into a Fedora Object.
Methods inherited from Datastream
#create, #freeze, #frozen?, #initialize, #inspect, #label, #profile_from_hash, #realLabel, #save, #solrize_profile, #to_param, #to_solr
Constructor Details
This class inherits a constructor from ActiveFedora::Datastream
Instance Attribute Details
#model ⇒ Object
Returns the value of attribute model.
8 9 10 |
# File 'lib/active_fedora/rels_ext_datastream.rb', line 8 def model @model end |
Class Method Details
.default_attributes ⇒ Object
11 12 13 |
# File 'lib/active_fedora/rels_ext_datastream.rb', line 11 def self.default_attributes super.merge(:controlGroup => 'X', :mimeType => 'application/rdf+xml') end |
.ensure_predicates_exist!(xml) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/active_fedora/rels_ext_datastream.rb', line 53 def self.ensure_predicates_exist!(xml) statements = Nokogiri::XML(xml).xpath('//rdf:Description/*', 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#') predicates = statements.collect { |e| { :prefix => e.namespace.prefix, :uri => e.namespace.href, :predicate => e.name } }.uniq predicates.each do |pred| unless Predicates.predicate_mappings[pred[:uri]] Predicates.predicate_mappings[pred[:uri]] = {} if pred[:prefix] and not Predicates.predicate_namespaces.has_value?(pred[:uri]) Predicates.predicate_namespaces[pred[:prefix].to_sym] = pred[:uri] end end ns = Predicates.predicate_mappings[pred[:uri]] unless ns.invert[pred[:predicate]] ns["#{pred[:prefix]}_#{pred[:predicate].underscore}".to_sym] = pred[:predicate] end end end |
.from_xml(xml, tmpl) ⇒ Object
Populate a RelsExtDatastream object based on the “datastream” content Assumes that the datastream contains RDF XML from a Fedora RELS-EXT datastream
32 33 34 35 36 37 38 39 40 |
# File 'lib/active_fedora/rels_ext_datastream.rb', line 32 def self.from_xml(xml, tmpl) if (xml.nil?) ### maybe put the template here? else ensure_predicates_exist!(xml) tmpl.model.relationships = xml tmpl end end |
Instance Method Details
#changed? ⇒ Boolean
15 16 17 |
# File 'lib/active_fedora/rels_ext_datastream.rb', line 15 def changed? model.relationships_are_dirty? or super end |
#from_solr(solr_doc) ⇒ Object
** EXPERIMENTAL **
This is utilized by ActiveFedora::Base.load_instance_from_solr to load the relationships hash using the Solr document passed in instead of from the RELS-EXT datastream in Fedora. Utilizes solr_name method (provided by Solrizer::FieldMapper) to map solr key to relationship predicate.
Warning
Solr must be synchronized with RELS-EXT data in Fedora.
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/active_fedora/rels_ext_datastream.rb', line 79 def from_solr(solr_doc) #cycle through all possible predicates model.relationships_loaded = true Predicates.predicate_mappings.each_pair do |namespace,predicates| predicates.keys.each do |predicate| predicate_symbol = ActiveFedora::SolrService.solr_name(predicate, :symbol) value = (solr_doc[predicate_symbol].nil? ? solr_doc[predicate_symbol.to_s]: solr_doc[predicate_symbol]) unless value.nil? if value.is_a? Array value.each do |obj| model.add_relationship(predicate, obj) end else model.add_relationship(predicate, value) end end end end @load_from_solr = true end |
#metadata? ⇒ Boolean
19 20 21 |
# File 'lib/active_fedora/rels_ext_datastream.rb', line 19 def true end |
#serialize! ⇒ Object
23 24 25 26 |
# File 'lib/active_fedora/rels_ext_datastream.rb', line 23 def serialize! self.content = to_rels_ext() if model.relationships_are_dirty? model.relationships_are_not_dirty! end |
#to_rels_ext ⇒ Object
Creates a RELS-EXT datastream for insertion into a Fedora Object
43 44 45 46 47 48 49 50 51 |
# File 'lib/active_fedora/rels_ext_datastream.rb', line 43 def to_rels_ext() xml = ActiveFedora::RDFXMLWriter.buffer do |writer| writer.prefixes.merge! ActiveFedora::Predicates.predicate_namespaces relationships.each_statement do |statement| writer << statement end end xml end |