Sha256: fe1a5f26fb75258272807ae52adb1636126a8dc3506c5d5b6d086ee71e10f602

Contents?: true

Size: 1.09 KB

Versions: 6

Compression:

Stored size: 1.09 KB

Contents

module Spira
  module Utils
    ##
    # Rename the subject of a Spira object to something else
    # @param [RDF::Resource] new_subject
    # @param [RDF::Repository] repository
    # @return [Spira::Base] A new instance using this subject
    def rename!(new_subject, repository = nil)
      repository ||= Spira.repository
      repository.rename!(subject, new_subject)
      self.class.for(new_subject)
    end
  end
end

module RDF
  class Repository
    ##
    # Rename a resource in the Repository to the new given subject.
    #
    # @param [RDF::Resource] old_subject
    # @param [RDF::Resource] new_subject
    # @return [self]
    def rename!(old_subject, new_subject)
      transaction(mutable: true) do |tx|
        query(subject: old_subject) do |statement|
          tx.insert RDF::Statement.new(new_subject, statement.predicate, statement.object)
          tx.delete(statement)
        end
        query(object: old_subject) do |statement|
          tx.insert RDF::Statement.new(statement.subject, statement.predicate, new_subject)
          tx.delete(statement)
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
spira-3.1.0 lib/spira/utils.rb
spira-3.0.0 lib/spira/utils.rb
spira-2.1.0 lib/spira/utils.rb
spira-2.0.2 lib/spira/utils.rb
spira-2.0.1 lib/spira/utils.rb
spira-2.0.0 lib/spira/utils.rb