class GQLi::Base

Base class for GraphQL type wrappers

Attributes

__depth[R]
__name[R]
__nodes[R]

Public Class Methods

new(name = nil, depth = 0, &block) click to toggle source
# File lib/gqli/base.rb, line 10
def initialize(name = nil, depth = 0, &block)
  @__name = name
  @__depth = depth
  @__nodes = []
  instance_eval(&block) unless block.nil?
end

Public Instance Methods

___(fragment) click to toggle source

Inlines fragment nodes into current node

# File lib/gqli/base.rb, line 18
def ___(fragment)
  @__nodes += __clone_nodes(fragment)
end
__enum(value) click to toggle source

Creates an EnumType value

# File lib/gqli/base.rb, line 34
def __enum(value)
  EnumValue.new(value)
end
__node(name, params = {}, &block) click to toggle source

Adds children node into current node

# File lib/gqli/base.rb, line 28
def __node(name, params = {}, &block)
  require_relative './node'
  @__nodes << Node.new(name, params, __depth + 1, &block)
end
__on(type_name, &block) click to toggle source

Adds type match node

# File lib/gqli/base.rb, line 23
def __on(type_name, &block)
  __node("... on #{type_name}", {}, &block)
end

Protected Instance Methods

__clone(obj) click to toggle source
# File lib/gqli/base.rb, line 52
def __clone(obj)
  Marshal.load(Marshal.dump(obj))
end
__clone_nodes(node_container) click to toggle source
# File lib/gqli/base.rb, line 40
def __clone_nodes(node_container)
  require_relative './node'
  __clone(node_container.__nodes).map do |n|
    node = Node.new(n.__name, n.__params, __depth + 1)
    node.instance_variable_set(
      :@__nodes,
      node.send(:__clone_nodes, n)
    )
    node
  end
end
__params_from_args(args) click to toggle source
# File lib/gqli/base.rb, line 56
def __params_from_args(args)
  args.empty? ? {} : args[0]
end
method_missing(name, *args, &block) click to toggle source
# File lib/gqli/base.rb, line 60
def method_missing(name, *args, &block)
  __node(name.to_s, __params_from_args(args), &block)
end