class GraphQL::Schema::Object

Public Class Methods

camelize(name) click to toggle source
# File lib/grate/graphql_object.rb, line 5
def self.camelize(name)
  name.split('_').collect(&:capitalize).join
end
get_controller(model_name) click to toggle source
# File lib/grate/graphql_object.rb, line 12
def self.get_controller(model_name)
  controller_name = "#{model_name.pluralize}Controller"
  Object.const_get(controller_name)
end
is_valid_type_name() click to toggle source
# File lib/grate/graphql_object.rb, line 8
def self.is_valid_type_name
  self.to_s.chars.last(4).join == 'Type'
end
queryable_on(field_name, field_type) click to toggle source
# File lib/grate/graphql_object.rb, line 17
def self.queryable_on(field_name, field_type)
  raise NameError,
        "#{self} is invalid type name. Types must end in -Type" unless is_valid_type_name

  # Gets all the various model, type and controller names.
  model = self.to_s.chomp('Type')
  type_name = self
  model_name = model.downcase
  controller = get_controller(model)
  
  if field_name == :id
    query_name = function_name = model_name
    return_type = type_name
  else
    query_name = "#{model_name}By#{camelize(field_name.to_s)}"
    function_name = "#{model_name}_by_#{field_name}"
    return_type = [type_name]
  end
  
  QueryType.class_eval do
    field query_name,
          return_type,
          null: true do
      description "Query #{model} by #{field_name}"
      argument field_name, field_type, required: true
    end
    define_method function_name do |query_args|
      controller.find_by(query_args[field_name], field_name)
    end
  end
end