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