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