module MARC::Spec

Public Class Methods

execute_query(query, marc_record) click to toggle source
# File lib/marc/spec.rb, line 27
def execute_query(query, marc_record)
  executor = executor_for(query, marc_record)
  executor.execute
end
exists?(query_string, marc_record) click to toggle source
# File lib/marc/spec.rb, line 12
def exists?(query_string, marc_record)
  root = parse_query(query_string)
  executor = executor_for(root, marc_record)
  executor.any_results?
end
find(query_string, marc_record) click to toggle source
# File lib/marc/spec.rb, line 7
def find(query_string, marc_record)
  root = parse_query(query_string)
  execute_query(root, marc_record)
end
parse_query(query_string) click to toggle source
# File lib/marc/spec.rb, line 18
def parse_query(query_string)
  parse_tree = parser.parse(query_string, reporter: reporter)
  xform_result = xform.apply(parse_tree)
  # TODO: unify these?
  xform_result.is_a?(Queries::Query) ? xform_result : Queries::Query.new(tag: xform_result)
rescue Parslet::ParseFailed => e
  raise ArgumentError, "Unable to parse query: #{query_string.inspect}: #{e}"
end

Private Class Methods

executor_for(query, marc_record) click to toggle source
# File lib/marc/spec.rb, line 46
def executor_for(query, marc_record)
  Queries::QueryExecutor.new(marc_record, query)
end
parser() click to toggle source
# File lib/marc/spec.rb, line 34
def parser
  @parser ||= Parsing::Parser.new
end
reporter() click to toggle source
# File lib/marc/spec.rb, line 42
def reporter
  @reporter ||= Parslet::ErrorReporter::Contextual.new
end
xform() click to toggle source
# File lib/marc/spec.rb, line 38
def xform
  @xform ||= Queries::Transform.new
end