Sha256: 88abeafa4251bd8a2203ca1d79b7343bd314469147f9ffaa00e750a877a79faf

Contents?: true

Size: 1.34 KB

Versions: 8

Compression:

Stored size: 1.34 KB

Contents

module RDF
  ##
  # An RDF query mixin.
  #
  # Classes that include this module must implement an `#each` method that
  # yields {RDF::Statement RDF statements}.
  #
  # @see RDF::Graph
  # @see RDF::Repository
  module Queryable
    include ::Enumerable

    ##
    # Queries `self` for RDF statements matching the given pattern.
    #
    # @example
    #     queryable.query([nil, RDF::DOAP.developer, nil])
    #     queryable.query(:predicate => RDF::DOAP.developer)
    #
    # @param  [Query, Statement, Array(Value), Hash] pattern
    # @yield  [statement]
    # @yieldparam [Statement]
    # @return [Array<Statement>]
    def query(pattern, &block)
      raise TypeError.new("#{self} is not readable") if respond_to?(:readable) && !readable?

      case pattern
        when Query
          pattern.execute(self, &block)
        when Array
          query(Statement.new(*pattern), &block)
        when Hash
          query(Statement.new(pattern), &block)
        when Statement
          if block_given?
            find_all { |statement| pattern === statement }.each(&block)
          else
            find_all { |statement| pattern === statement }.extend(RDF::Enumerable, RDF::Queryable)
          end
        else
          raise ArgumentError.new("expected RDF::Query, RDF::Pattern, Array or Hash, but got #{pattern.inspect}")
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
rdf-0.1.8 lib/rdf/mixin/queryable.rb
rdf-0.1.7 lib/rdf/mixin/queryable.rb
rdf-0.1.6.1 lib/rdf/mixin/queryable.rb
rdf-0.1.6 lib/rdf/mixin/queryable.rb
rdf-0.1.5 lib/rdf/mixin/queryable.rb
rdf-0.1.4 lib/rdf/mixin/queryable.rb
rdf-0.1.3 lib/rdf/mixin/queryable.rb
rdf-0.1.2 lib/rdf/mixin/queryable.rb