Module: ActiveFedora::SemanticNode
- Extended by:
- ActiveSupport::Concern
- Included in:
- Base
- Defined in:
- lib/active_fedora/semantic_node.rb
Defined Under Namespace
Modules: ClassMethods
Instance Attribute Summary collapse
-
#load_from_solr ⇒ Object
Returns the value of attribute load_from_solr.
-
#relationships_loaded ⇒ Object
Returns the value of attribute relationships_loaded.
-
#subject ⇒ Object
Returns the value of attribute subject.
Instance Method Summary collapse
-
#add_relationship(predicate, target, literal = false) ⇒ Object
Add a relationship to the Object.
- #assert_kind_of(n, o, t) ⇒ Object
-
#build_statement(uri, predicate, target, literal = false) ⇒ Object
Create an RDF statement.
-
#clear_relationship(predicate) ⇒ Object
Clears all relationships with the specified predicate.
-
#conforms_to?(model_class) ⇒ Boolean
Checks that this object is matches the model class passed in.
- #ids_for_outbound(predicate) ⇒ Object
-
#inbound_relationship_predicates ⇒ Hash
Return hash of inbound relationship names and predicate pairs.
- #inbound_relationships(response_format = :uri) ⇒ Object
- #load_relationships ⇒ Object
- #object_relations ⇒ Object
-
#outbound_relationship_predicates ⇒ Hash
Return hash of outbound relationship names and predicate pairs.
- #outbound_relationships ⇒ Object
-
#relationship_predicates ⇒ Hash
Return hash of relationship names and predicate pairs (inbound and outbound).
-
#relationships(*args) ⇒ Object
If no arguments are supplied, return the whole RDF::Graph.
- #relationships_are_dirty ⇒ Object
- #relationships_are_dirty=(val) ⇒ Object
-
#relationships_desc ⇒ Hash
Return hash that persists relationship metadata defined by has_relationship calls.
-
#remove_relationship(predicate, obj, literal = false) ⇒ Object
Remove a Rels-Ext relationship from the Object.
Instance Attribute Details
#load_from_solr ⇒ Object
Returns the value of attribute load_from_solr.
9 10 11 |
# File 'lib/active_fedora/semantic_node.rb', line 9 def load_from_solr @load_from_solr end |
#relationships_loaded ⇒ Object
Returns the value of attribute relationships_loaded.
9 10 11 |
# File 'lib/active_fedora/semantic_node.rb', line 9 def relationships_loaded @relationships_loaded end |
#subject ⇒ Object
Returns the value of attribute subject.
9 10 11 |
# File 'lib/active_fedora/semantic_node.rb', line 9 def subject @subject end |
Instance Method Details
#add_relationship(predicate, target, literal = false) ⇒ Object
Add a relationship to the Object.
30 31 32 33 |
# File 'lib/active_fedora/semantic_node.rb', line 30 def add_relationship(predicate, target, literal=false) object_relations.add(predicate, target, literal) rels_ext.content_will_change! if object_relations.dirty end |
#assert_kind_of(n, o, t) ⇒ Object
11 12 13 |
# File 'lib/active_fedora/semantic_node.rb', line 11 def assert_kind_of(n, o,t) raise "Assertion failure: #{n}: #{o} is not of type #{t}" unless o.kind_of?(t) end |
#build_statement(uri, predicate, target, literal = false) ⇒ Object
Create an RDF statement
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/active_fedora/semantic_node.rb', line 76 def build_statement(uri, predicate, target, literal=false) ActiveSupport::Deprecation.warn("ActiveFedora::Base#build_statement has been deprecated.") raise "Not allowed anymore" if uri == :self target = target.internal_uri if target.respond_to? :internal_uri subject = RDF::URI.new(uri) #TODO cache unless literal or target.is_a? RDF::Resource begin target_uri = (target.is_a? URI) ? target : URI.parse(target) if target_uri.scheme.nil? raise ArgumentError, "Invalid target \"#{target}\". Must have namespace." end if target_uri.to_s =~ /\A[\w\-]+:[\w\-]+\Z/ raise ArgumentError, "Invalid target \"#{target}\". Target should be a complete URI, and not a pid." end rescue URI::InvalidURIError raise ArgumentError, "Invalid target \"#{target}\". Target must be specified as a literal, or be a valid URI." end end if literal object = RDF::Literal.new(target) elsif target.is_a? RDF::Resource object = target else object = RDF::URI.new(target) end RDF::Statement.new(subject, find_graph_predicate(predicate), object) end |
#clear_relationship(predicate) ⇒ Object
Clears all relationships with the specified predicate
37 38 39 40 41 42 |
# File 'lib/active_fedora/semantic_node.rb', line 37 def clear_relationship(predicate) relationships(predicate).each do |target| object_relations.delete(predicate, target) end rels_ext.content_will_change! if object_relations.dirty end |
#conforms_to?(model_class) ⇒ Boolean
Checks that this object is matches the model class passed in. It requires two steps to pass to return true
1. It has a hasModel relationship of the same model
2. kind_of? returns true for the model passed in
This method can most often be used to detect if an object from Fedora that was created with a different model was then used to populate this object.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/active_fedora/semantic_node.rb', line 52 def conforms_to?(model_class) if self.kind_of?(model_class) #check has model and class match mod = relationships.first(:predicate=>Predicates.find_graph_predicate(:has_model)) if mod expected = self.class.to_class_uri if mod.object.to_s == expected return true else raise "has_model relationship check failed for model #{model_class} raising exception, expected: '#{expected}' actual: '#{mod.object.to_s}'" end else raise "has_model relationship does not exist for model #{model_class} check raising exception" end else raise "kind_of? check failed for model #{model_class}, actual #{self.class} raising exception" end return false end |
#ids_for_outbound(predicate) ⇒ Object
161 162 163 164 165 166 |
# File 'lib/active_fedora/semantic_node.rb', line 161 def ids_for_outbound(predicate) (object_relations[predicate] || []).map do |o| o = o.to_s if o.kind_of? RDF::Literal o.kind_of?(String) ? o.gsub("info:fedora/", "") : o.pid end end |
#inbound_relationship_predicates ⇒ Hash
Return hash of inbound relationship names and predicate pairs
203 204 205 |
# File 'lib/active_fedora/semantic_node.rb', line 203 def inbound_relationship_predicates relationship_predicates.has_key?(:inbound) ? relationship_predicates[:inbound] : {} end |
#inbound_relationships(response_format = :uri) ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/active_fedora/semantic_node.rb', line 117 def inbound_relationships(response_format=:uri) rel_values = {} inbound_relationship_predicates.each_pair do |name,predicate| objects = self.send("#{name}",{:response_format=>response_format}) items = [] objects.each do |object| if (response_format == :uri) #inbound relationships are always object properties items.push(object.internal_uri) else items.push(object) end end unless items.empty? rel_values.merge!({predicate=>items}) end end return rel_values end |
#load_relationships ⇒ Object
154 155 156 157 158 159 |
# File 'lib/active_fedora/semantic_node.rb', line 154 def load_relationships self.relationships_loaded = true content = rels_ext.content return unless content.present? RelsExtDatastream.from_xml content, rels_ext end |
#object_relations ⇒ Object
15 16 17 18 |
# File 'lib/active_fedora/semantic_node.rb', line 15 def object_relations load_relationships if !relationships_loaded @object_relations ||= RelationshipGraph.new end |
#outbound_relationship_predicates ⇒ Hash
Return hash of outbound relationship names and predicate pairs
197 198 199 |
# File 'lib/active_fedora/semantic_node.rb', line 197 def outbound_relationship_predicates relationship_predicates.has_key?(:self) ? relationship_predicates[:self] : {} end |
#outbound_relationships ⇒ Object
137 138 139 |
# File 'lib/active_fedora/semantic_node.rb', line 137 def outbound_relationships() relationships.statements end |
#relationship_predicates ⇒ Hash
Return hash of relationship names and predicate pairs (inbound and outbound). It retrieves this information via the relationships_desc hash in the class.
183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/active_fedora/semantic_node.rb', line 183 def relationship_predicates return @relationship_predicates if @relationship_predicates @relationship_predicates = {} relationships_desc.each_pair do |subj, names| @relationship_predicates[subj] = {} names.each_pair do |name, args| @relationship_predicates[subj][name] = args[:predicate] end end @relationship_predicates end |
#relationships(*args) ⇒ Object
If no arguments are supplied, return the whole RDF::Graph. if a predicate is supplied as a parameter, then it returns the result of quering the graph with that predicate
143 144 145 146 147 148 149 150 151 152 |
# File 'lib/active_fedora/semantic_node.rb', line 143 def relationships(*args) load_relationships if !relationships_loaded if args.empty? raise "Must have internal_uri" unless internal_uri return object_relations.to_graph(internal_uri) end rels = object_relations[args.first] || [] rels.map {|o| o.respond_to?(:internal_uri) ? o.internal_uri : o } #TODO, could just return the object end |
#relationships_are_dirty ⇒ Object
20 21 22 |
# File 'lib/active_fedora/semantic_node.rb', line 20 def relationships_are_dirty object_relations.dirty end |
#relationships_are_dirty=(val) ⇒ Object
23 24 25 |
# File 'lib/active_fedora/semantic_node.rb', line 23 def relationships_are_dirty=(val) object_relations.dirty = val end |
#relationships_desc ⇒ Hash
Return hash that persists relationship metadata defined by has_relationship calls
176 177 178 |
# File 'lib/active_fedora/semantic_node.rb', line 176 def relationships_desc @relationships_desc ||= self.class.relationships_desc end |
#remove_relationship(predicate, obj, literal = false) ⇒ Object
Remove a Rels-Ext relationship from the Object.
111 112 113 114 115 |
# File 'lib/active_fedora/semantic_node.rb', line 111 def remove_relationship(predicate, obj, literal=false) object_relations.delete(predicate, obj) self.relationships_are_dirty = true rels_ext.content_will_change! end |