Module: Quail::Resource::QueryBuilder

Defined in:
lib/quail/resource/query_builder.rb

Overview

Builds find and list GraphQL query fields for a resource.

Class Method Summary collapse

Class Method Details

.build_find_field(model, type_class) ⇒ Object



20
21
22
23
24
25
26
27
28
29
# File 'lib/quail/resource/query_builder.rb', line 20

def self.build_find_field(model, type_class)
  {
    model.name.underscore.to_sym => {
      type: type_class,
      null: true,
      arguments: { id: { type: GraphQL::Types::ID, required: true } },
      resolve: ->(_obj, args, _ctx) { model.find_by(id: args[:id]) }
    }
  }
end

.build_list_field(model, type_class) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/quail/resource/query_builder.rb', line 31

def self.build_list_field(model, type_class)
  {
    model.name.underscore.pluralize.to_sym => {
      type: type_class.connection_type,
      null: false,
      resolve: ->(_obj, _args, _ctx) { model.all }
    }
  }
end

.call(resource_class) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/quail/resource/query_builder.rb', line 7

def self.call(resource_class)
  return {} if resource_class.skipped_queries.include?(:all)

  model = resource_class.model_class
  type_class = resource_class.graphql_type
  skipped = resource_class.skipped_queries
  fields = {}

  fields.merge!(build_find_field(model, type_class)) unless skipped.include?(:find)
  fields.merge!(build_list_field(model, type_class)) unless skipped.include?(:list)
  fields
end