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