class Redlander::Statement
RDF statement
Public Class Methods
Create an RDF statement.
@param [Hash] source @option source [Node, String, URI, nil] :subject @option source [Node, String, URI, nil] :predicate @option source [Node, String, URI, nil] :object @raise [NotImplementedError] if cannot create a Statement
from the given source. @raise [RedlandError] if it fails to create a Statement
.
# File lib/redlander/statement.rb, line 42 def initialize(source = {}) # If FFI::Pointer is passed, wrap it instantly, # because it can be freed outside before it is used here. @source = source.is_a?(FFI::Pointer) ? wrap(source) : source end
Private Class Methods
@api private
# File lib/redlander/statement.rb, line 8 def finalize_statement(rdf_statement_ptr) proc { Redland.librdf_free_statement(rdf_statement_ptr) } end
Public Instance Methods
# File lib/redlander/statement.rb, line 111 def eql?(other_statement) subject == other_statement.subject && predicate == other_statement.predicate && object == other_statement.object end
# File lib/redlander/statement.rb, line 118 def hash self.class.hash + to_s.hash end
Object of the statement.
@return [Node, nil]
# File lib/redlander/statement.rb, line 75 def object if instance_variable_defined?(:@object) @object else rdf_node = Redland.librdf_statement_get_object(rdf_statement) @object = rdf_node.null? ? nil : Node.new(rdf_node) end end
Set the object of the statement
@param [Node, nil] node @return [void]
# File lib/redlander/statement.rb, line 106 def object=(node) Redland.librdf_statement_set_object(rdf_statement, rdf_node_from(node)) @object = node end
Predicate of the statement.
@return [Node, nil]
# File lib/redlander/statement.rb, line 63 def predicate if instance_variable_defined?(:@predicate) @predicate else rdf_node = Redland.librdf_statement_get_predicate(rdf_statement) @predicate = rdf_node.null? ? nil : Node.new(rdf_node) end end
Set the predicate of the statement
@param [Node, nil] node @return [void]
# File lib/redlander/statement.rb, line 97 def predicate=(node) Redland.librdf_statement_set_predicate(rdf_statement, rdf_node_from(node)) @predicate = node end
@api private
# File lib/redlander/statement.rb, line 14 def rdf_statement unless instance_variable_defined?(:@rdf_statement) @rdf_statement = case @source when FFI::Pointer @source when Hash # Create a new statement from nodes s = rdf_node_from(@source[:subject]) p = rdf_node_from(@source[:predicate]) o = rdf_node_from(@source[:object]) Redland.librdf_new_statement_from_nodes(Redlander.rdf_world, s, p, o) else raise NotImplementedError, "Cannot create Statement from '#{@source.inspect}'" end raise RedlandError, "Failed to create a new statement" if @rdf_statement.null? ObjectSpace.define_finalizer(self, self.class.send(:finalize_statement, @rdf_statement)) end @rdf_statement end
Subject of the statment.
@return [Node, nil]
# File lib/redlander/statement.rb, line 51 def subject if instance_variable_defined?(:@subject) @subject else rdf_node = Redland.librdf_statement_get_subject(rdf_statement) @subject = rdf_node.null? ? nil : Node.new(rdf_node) end end
Set the subject of the statement
@param [Node, nil] node @return [void]
# File lib/redlander/statement.rb, line 88 def subject=(node) Redland.librdf_statement_set_subject(rdf_statement, rdf_node_from(node)) @subject = node end
# File lib/redlander/statement.rb, line 122 def to_s Redland.librdf_statement_to_string(rdf_statement) end
Private Instance Methods
Create a Node
from the source and get its rdf_node, or return nil @api private
# File lib/redlander/statement.rb, line 141 def rdf_node_from(source) case source when NilClass nil when Node Redland.librdf_new_node_from_node(source.rdf_node) else Redland.librdf_new_node_from_node(Node.new(source).rdf_node) end end
@api private
# File lib/redlander/statement.rb, line 130 def wrap(s) if s.null? raise RedlandError, "Failed to create a new statement" else Redland.librdf_new_statement_from_statement(s) end end