class Graphlient::Query
Constants
- ROOT_NODES
- SCALAR_TYPES
Attributes
query_str[RW]
Public Class Methods
new(&block)
click to toggle source
# File lib/graphlient/query.rb, line 14 def initialize(&block) @indents = 0 @query_str = '' @variables = [] instance_eval(&block) end
Public Instance Methods
method_missing(method_name, *args, &block)
click to toggle source
# File lib/graphlient/query.rb, line 21 def method_missing(method_name, *args, &block) append_node(method_name, args, &block) end
respond_to_missing?(method_name, include_private = false)
click to toggle source
Calls superclass method
# File lib/graphlient/query.rb, line 32 def respond_to_missing?(method_name, include_private = false) super end
to_s()
click to toggle source
# File lib/graphlient/query.rb, line 36 def to_s query_str.strip end
Private Instance Methods
append_node(node, args, arg_processor: nil, &block)
click to toggle source
# File lib/graphlient/query.rb, line 42 def append_node(node, args, arg_processor: nil, &block) # add field @query_str << "\n#{indent}#{node}" # add filter hash_arguments = hash_arg(args) @query_str << "(#{args_str(hash_arguments, arg_processor: arg_processor)})" if hash_arguments if block_given? @indents += 1 @query_str << '{' instance_eval(&block) @query_str << '}' @indents -= 1 end @query_str << "\n#{indent}" end
args_str(hash_args, arg_processor: nil)
click to toggle source
# File lib/graphlient/query.rb, line 68 def args_str(hash_args, arg_processor: nil) hash_args.map do |k, v| arg_processor ? arg_processor.call(k, v) : argument_string(k, v) end.join(', ') end
argument_string(key, val)
click to toggle source
# File lib/graphlient/query.rb, line 74 def argument_string(key, val) "#{key}: #{argument_value_string(val)}" end
argument_value_string(value)
click to toggle source
# File lib/graphlient/query.rb, line 92 def argument_value_string(value) case value when String "\"#{value}\"" when Numeric value.to_s when Array "[#{value.map { |v| argument_value_string(v) }.join(', ')}]" when Hash "{ #{value.map { |k, v| "#{k}: #{argument_value_string(v)}" }.join(', ')} }" when Symbol @variables.key?(value) ? "$#{value}" : value.to_s.camelize(:lower) else value end end
hash_arg(args)
click to toggle source
# File lib/graphlient/query.rb, line 64 def hash_arg(args) args.detect { |arg| arg.is_a? Hash } end
indent()
click to toggle source
# File lib/graphlient/query.rb, line 60 def indent ' ' * @indents end
variable_string(val)
click to toggle source
# File lib/graphlient/query.rb, line 78 def variable_string(val) case val when :id, :id! val.to_s.upcase when ->(v) { SCALAR_TYPES.key?(v.to_s.delete('!').to_sym) } # scalar types val.to_s.camelize when Array "[#{variable_string(val.first)}]" else val.to_s end end