Module: Graphoid::Sorter

Defined in:
lib/graphoid/definitions/sorter.rb

Constant Summary collapse

LIST =
{}
@@enum_type =
nil

Class Method Summary collapse

Class Method Details

.enum_typeObject



33
34
35
36
37
38
39
40
# File 'lib/graphoid/definitions/sorter.rb', line 33

def enum_type
  @@enum_type ||= GraphQL::EnumType.define do
    name 'SorterType'

    value 'ASC', 'Ascendent'
    value 'DESC', 'Descendent'
  end
end

.generate(model) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/graphoid/definitions/sorter.rb', line 9

def generate(model)
  LIST[model] ||= GraphQL::InputObjectType.define do
    name("#{Utils.graphqlize(model.name)}Sorter")
    description("Generated model Sorter for #{model.name}")

    Attribute.fields_of(model).each do |field|
      name = Utils.camelize(field.name)
      argument(name, Sorter.enum_type)
    end

    Relation.relations_of(model).each do |name, relation|
      relation_class = relation.class_name.safe_constantize
      next unless relation_class

      relation_order = LIST[relation_class]
      next unless relation_order

      relation_name = Utils.camelize(name)

      argument(relation_name, relation_order)
    end
  end
end