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