class Clerq::Services::QueryNode

Provides repository nodes assembly @param [Sring] optional query string @return [Node] assembly of repository nodes

Usage

QueryAssembly.(asse:, query:)
QueryAssembly.(query_string)

Rules for root node:

when query not passed, it return the whole hierarchy
when nodes not found, it returns empty root node with meta[:query]
when query returns one single node, it returns this node
when query returns mare than one nodes, then
  * it creates empty root node with meta[:query]
  * and places found nodes to the root

Constants

USAGE

Public Class Methods

new(assembly: , query: ) click to toggle source
# File lib/clerq/services/query_node.rb, line 38
def initialize(assembly: , query: )
  unless assembly.is_a? Node
    msg = "Invailid argument 'assembly'"
    raise ArgumentError, msg
  end
  unless query.is_a? String
    msg = "Invailid argument 'query'"
    raise ArgumentError, msg
  end
  @query = query
  @assembly = assembly
end

Public Instance Methods

call() click to toggle source
# File lib/clerq/services/query_node.rb, line 25
def call
  proc = prepare_query unless @query.empty?

  arry = @assembly.select{|node| proc.call(node) }
  return arry.first.orphan! if arry.size == 1

  node = Node.new(title: Clerq.title, meta: {query: @query})
  arry.each{|n| node << n.orphan!}
  node
end

Protected Instance Methods

prepare_query() click to toggle source
# File lib/clerq/services/query_node.rb, line 51
def prepare_query
  proc = Proc.new{|node| eval(@query)}
  Node.new.select{|node| proc.call(node)}
  proc
rescue Exception => e
  msg = "Invalid query format #{@query} (#{e.message})\n#{USAGE}"
  raise ArgumentError, msg
end