class RoadForest::SourceRigor::ResourcePattern

Attributes

context_roles[RW]
source_rigor[RW]

Public Class Methods

from(pattern, options) { |pattern| ... } click to toggle source
# File lib/roadforest/source-rigor/resource-pattern.rb, line 8
def self.from(pattern, options)
  pattern = case pattern
            when self
              pattern
            when ::RDF::Query::Pattern
              options ||= {}
              self.new(pattern.subject, pattern.predicate, pattern.object, options.merge(:context => pattern.context))
            when Array, ::RDF::Statement
              options ||= {}
              self.new(pattern[0], pattern[1], pattern[2], options.merge(:context => pattern[3]))
            when Hash
              options ||= {}
              self.new(options.merge(pattern))
            else
              raise ArgumentError, "expected RoadForest::SourceRigor::ResourcePattern, RDF::Query::Pattern, RDF::Statement, Hash, or Array, but got #{pattern.inspect}"
            end

  unless options.nil?
    pattern.context_roles = options[:context_roles]
    pattern.source_rigor = options[:source_rigor]
  end

  yield pattern if block_given?

  pattern
end

Public Instance Methods

context() click to toggle source
# File lib/roadforest/source-rigor/resource-pattern.rb, line 57
def context
  @context ||= ::RDF::Query::Variable.new(:context)
end
execute(queryable, bindings = nil, query_context_roles = nil, &block) click to toggle source
Calls superclass method
# File lib/roadforest/source-rigor/resource-pattern.rb, line 37
def execute(queryable, bindings = nil, query_context_roles = nil, &block)
  unless queryable.is_a? RoadForest::SourceRigor::GraphStore
    return super(queryable, bindings || {}, &block)
  end

  investigation = Investigation.new
  investigation.queryable = queryable
  investigation.context_roles = (query_context_roles || {}).merge(context_roles)
  investigation.source_rigor = source_rigor

  results = investigation.result do |results|
    super(queryable, bindings || {}) do |statement|
      results << statement
    end
  end

  results.each(&block) if block_given?
  results
end