class ActiveFedora::SparqlInsert
Attributes
changes[R]
subject[R]
Public Class Methods
new(changes, subject = ::RDF::URI.new(nil))
click to toggle source
# File lib/active_fedora/sparql_insert.rb, line 5 def initialize(changes, subject = ::RDF::URI.new(nil)) @changes = changes @subject = subject end
Public Instance Methods
build()
click to toggle source
# File lib/active_fedora/sparql_insert.rb, line 16 def build query = deletes(subject).join query += "INSERT { \n" query += changes.map do |_, result| result.map do |statement| ::RDF::Query::Pattern.new(subject: pattern_subject(statement.subject), predicate: statement.predicate, object: statement.object).to_s end.join("\n") end.join("\n") query += "\n}\n WHERE { }" query end
execute(uri)
click to toggle source
# File lib/active_fedora/sparql_insert.rb, line 10 def execute(uri) result = ActiveFedora.fedora.connection.patch(uri, build, "Content-Type" => "application/sparql-update") return true if result.status == 204 raise "Problem updating #{result.status} #{result.body}" end
Private Instance Methods
deletes(subject)
click to toggle source
# File lib/active_fedora/sparql_insert.rb, line 40 def deletes(subject) patterns(subject).map do |pattern| "DELETE { #{pattern} }\n WHERE { #{pattern} } ;\n" end end
hash_patterns(graph)
click to toggle source
# File lib/active_fedora/sparql_insert.rb, line 59 def hash_patterns(graph) graph = graph.select do |statement| MaybeHashUri.new(statement.subject).hash? end graph.map do |statement| ::RDF::Query::Pattern.new(statement.subject, statement.predicate, :change).to_s end end
pattern_subject(potential_subject)
click to toggle source
# File lib/active_fedora/sparql_insert.rb, line 32 def pattern_subject(potential_subject) if MaybeHashUri.new(potential_subject).hash? potential_subject else subject end end
patterns(subject)
click to toggle source
Returns query patterns for finding all existing changed properties as well as well as their embedded hash-uri graphs.
@return [Array<::RDF::Query::Pattern>]
# File lib/active_fedora/sparql_insert.rb, line 50 def patterns(subject) changes.flat_map do |key, result| [ ::RDF::Query::Pattern.new(subject, key, :change).to_s, hash_patterns(result) ].flatten end end