class Graphlyte::Query
Attributes
name[R]
type[R]
Public Class Methods
new(query_name=nil, type=:query, **hargs)
click to toggle source
Calls superclass method
Graphlyte::Fieldset::new
# File lib/graphlyte/query.rb, line 8 def initialize(query_name=nil, type=:query, **hargs) @name = query_name || "anonymousQuery" @type = type super(**hargs) end
Public Instance Methods
flatten(fields, new_fields = {})
click to toggle source
# File lib/graphlyte/query.rb, line 96 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 84 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 74 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 53 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, var.value.default] end memo end end
placeholders()
click to toggle source
# File lib/graphlyte/query.rb, line 14 def placeholders flatten_variables(builder.>>).map do |value| unless value.formal? str = ":#{value.value.to_sym.inspect} of unknown" else str = ":#{value.value.placeholder} of #{value.value.name}" end if value.value.default str += " with default " value.value.default.merge!(str) end str end.join("\n") end
to_json(query_name=name, **hargs)
click to toggle source
# File lib/graphlyte/query.rb, line 30 def to_json(query_name=name, **hargs) variables = flatten_variables(builder.>>).uniq { |v| v.value } types = merge_variable_types(variables, hargs) str = "#{type} #{query_name}" unless types.empty? type_new = types.map do |type_arr| type_str = "$#{type_arr[0].to_camel_case}: #{type_arr[1]}" unless type_arr[2].nil? type_str << " = " type_arr[2].merge!(type_str) end type_str 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 49 def to_s(indent=0) "{\n#{super(indent + 1)}\n}#{format_fragments}" end