class Graphlyte::Query
Attributes
name[R]
Public Class Methods
new(query_name=nil, **hargs)
click to toggle source
Calls superclass method
Graphlyte::Fieldset::new
# File lib/graphlyte/query.rb, line 7 def initialize(query_name=nil, **hargs) @name = query_name super(**hargs) end
Public Instance Methods
flatten(fields, new_fields = {})
click to toggle source
# File lib/graphlyte/query.rb, line 79 def flatten(fields, new_fields = {}) fields.each do |field| if field.class.eql?(Fragment) new_fields[field.fragment] = field unless field.empty? flatten(field.fields, new_fields) end else if field.fieldset.class.eql?(Fragment) new_fields[field.fieldset.fragment] = field.fieldset end flatten(field.fieldset.fields, new_fields) unless field.atomic? end end new_fields end
flatten_variables(fields, variables=[])
click to toggle source
# File lib/graphlyte/query.rb, line 67 def flatten_variables(fields, variables=[]) fields.each do |field| variables.concat field.inputs.extract_variables unless field.class.eql?(Fragment) if field.class.eql?(Fragment) flatten_variables(field.fields, variables) else flatten_variables(field.fieldset.fields, variables) end end variables end
format_fragments()
click to toggle source
# File lib/graphlyte/query.rb, line 57 def format_fragments str = "\n" flatten(builder.>>).each do |_, fragment| str += "\nfragment #{fragment.fragment}" str += " on #{fragment.model_name}" unless fragment.model_name.nil? str += " {\n#{fragment.fields.map {|f| f.to_s(1) }.join("\n")}\n}" end str end
merge_variable_types(variables=[], hargs)
click to toggle source
# File lib/graphlyte/query.rb, line 36 def merge_variable_types(variables=[], hargs) variables.inject([]) do |memo, var| unless var.formal? if hargs[var.value].is_a? String memo << [var.value.to_camel_case, "String"] elsif [TrueClass, FalseClass].include? hargs[var.value].class memo << [var.value ,"Boolean"] elsif hargs[var.value].is_a? Float memo << [var.value, "Float"] elsif hargs[var.value].is_a? Integer memo << [var.value, "Int"] elsif hargs[var.value].is_a? Array memo << "[#{merge_variable_types(var.value, hargs).first}]" end else memo << [var.value.placeholder, var.value.name] end memo end end
placeholders()
click to toggle source
# File lib/graphlyte/query.rb, line 12 def placeholders flatten_variables(builder.>>).map do |value| ":#{value.value.placeholder} of #{value.value.name}" end.join("\n") end
to_json(name="anonymousQuery", **hargs)
click to toggle source
# File lib/graphlyte/query.rb, line 18 def to_json(name="anonymousQuery", **hargs) variables = flatten_variables(builder.>>) types = merge_variable_types(variables, hargs) str = "query #{name}" unless types.empty? type_new = types.map do |type_arr| "$#{type_arr[0].to_camel_case}: #{type_arr[1]}" end str += "(#{type_new.join(", ")})" end { query: "#{str} #{to_s(1)}", variables: Arguments::Set.new(hargs).to_h }.to_json end
to_s(indent=0)
click to toggle source
# File lib/graphlyte/query.rb, line 32 def to_s(indent=0) "{\n#{super(indent + 1)}\n}#{format_fragments}" end