Sha256: 9b35e537ba44e018fc16c724263e09f4820452ea5632ee6ede73223838545e49

Contents?: true

Size: 1.11 KB

Versions: 28

Compression:

Stored size: 1.11 KB

Contents

module ActiveFedora
  class SparqlInsert

    attr_reader :changes, :subject

    def initialize(changes, subject = ::RDF::URI.new(nil))
      @changes = changes
      @subject = subject
    end

    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

    def build
      query = deletes(subject).join
      query += "INSERT { \n"
      query +=
        changes.map do |_, result|
          result.map do |statement|
            ::RDF::Query::Pattern.new(subject: subject, predicate: statement.predicate, object: statement.object).to_s
          end.join("\n")
        end.join("\n")

      query += "\n}\n WHERE { }"
      query
    end

    private

    def deletes(subject)
      patterns(subject).map do |pattern|
        "DELETE { #{pattern} }\n  WHERE { #{pattern} } ;\n"
      end
    end

    def patterns(subject)
      changes.map do |key, _|
        ::RDF::Query::Pattern.new(subject, key, :change).to_s
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
active-fedora-9.0.8 lib/active_fedora/sparql_insert.rb
active-fedora-9.3.0 lib/active_fedora/sparql_insert.rb
active-fedora-9.2.1 lib/active_fedora/sparql_insert.rb
active-fedora-9.2.0 lib/active_fedora/sparql_insert.rb
active-fedora-9.2.0.rc2 lib/active_fedora/sparql_insert.rb
active-fedora-9.2.0.rc1 lib/active_fedora/sparql_insert.rb
active-fedora-9.1.2 lib/active_fedora/sparql_insert.rb
active-fedora-9.1.1 lib/active_fedora/sparql_insert.rb
active-fedora-9.1.0 lib/active_fedora/sparql_insert.rb
active-fedora-9.1.0.rc1 lib/active_fedora/sparql_insert.rb
active-fedora-9.0.6 lib/active_fedora/sparql_insert.rb
active-fedora-9.0.5 lib/active_fedora/sparql_insert.rb
active-fedora-9.0.4 lib/active_fedora/sparql_insert.rb
active-fedora-9.0.3 lib/active_fedora/sparql_insert.rb
active-fedora-9.0.2 lib/active_fedora/sparql_insert.rb
active-fedora-9.0.1 lib/active_fedora/sparql_insert.rb
active-fedora-9.0.0 lib/active_fedora/sparql_insert.rb
active-fedora-9.0.0.rc3 lib/active_fedora/sparql_insert.rb
active-fedora-9.0.0.rc2 lib/active_fedora/sparql_insert.rb
active-fedora-9.0.0.rc1 lib/active_fedora/sparql_insert.rb