Sha256: 99d6887b3f2b9c81280693d4626ad384ffbea4a439430b7f98712077abc98b96

Contents?: true

Size: 1.05 KB

Versions: 2

Compression:

Stored size: 1.05 KB

Contents

require 'net/http'

class PushmiPullyu::AIP::OwnerEmailEditor

  OWNER_PREDICATE = RDF::URI('http://purl.org/ontology/bibo/owner').freeze

  class NoOwnerPredicate < StandardError; end

  def initialize(rdf_string)
    @document = rdf_string
  end

  def run
    is_modified = false
    prefixes = nil
    # Read once to load prefixes (the @things at the top of an n3 file)
    RDF::N3::Reader.new(input = @document) do |reader|
      reader.each_statement { |_statement| }
      prefixes = reader.prefixes
    end
    new_body = RDF::N3::Writer.buffer(prefixes: prefixes) do |writer|
      RDF::N3::Reader.new(input = @document) do |reader|
        reader.each_statement do |statement|
          if statement.predicate == OWNER_PREDICATE
            user = PushmiPullyu::AIP::User.find(statement.object.to_i)
            writer << [statement.subject, statement.predicate, user.email]
            is_modified = true
          else
            writer << statement
          end
        end
      end
    end
    return new_body if is_modified
    raise NoOwnerPredicate
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pushmi_pullyu-1.0.4 lib/pushmi_pullyu/aip/owner_email_editor.rb
pushmi_pullyu-1.0.3 lib/pushmi_pullyu/aip/owner_email_editor.rb