Sha256: a3458ef3c93c35e30ba4b356d8df65be433e2a95503d834e9fa70d9cbc3e2b75

Contents?: true

Size: 1.1 KB

Versions: 3

Compression:

Stored size: 1.1 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

3 entries across 3 versions & 1 rubygems

Version Path
spira-3.3.0 lib/spira/utils.rb
spira-3.2.0 lib/spira/utils.rb
spira-3.1.1 lib/spira/utils.rb