Sha256: 0fcada025aa9898e06bac1be51d98fa046bafb595dc3d2671bac55dcce0d687f

Contents?: true

Size: 1.19 KB

Versions: 2

Compression:

Stored size: 1.19 KB

Contents

module Redlander
  class Uri
    attr_reader :rdf_uri

    def initialize(source)
      @rdf_uri = case source
                 when URI, String
                   Redland.librdf_new_uri(Redlander.rdf_world, source.to_s)
                 when Node
                   if source.resource?
                     copy_rdf_uri_on_initialize(Redland.librdf_node_get_uri(source.rdf_node))
                   elsif source.literal?
                     copy_rdf_uri_on_initialize(Redland.librdf_node_get_literal_value_datatype_uri(source.rdf_node))
                   else
                     raise NotImplementedError.new
                   end
                 else
                   # TODO
                   raise NotImplementedError.new
                 end
      raise RedlandError.new("Failed to create URI from '#{source.inspect}'") if @rdf_uri.null?
      ObjectSpace.define_finalizer(self, proc { Redland.librdf_free_uri(@rdf_uri) })
    end

    def to_s
      Redland.librdf_uri_to_string(@rdf_uri)
    end


    private

    def copy_rdf_uri_on_initialize(u)
      if u.null?
        raise RedlandError.new("Failed to create URI")
      else
        Redland.librdf_new_uri_from_uri(u)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
redlander-0.3.6 lib/redlander/uri.rb
redlander-0.3.5 lib/redlander/uri.rb