Module: HQ::GraphQL::Resource::ClassMethods

Includes:
AutoMutation
Defined in:
lib/hq/graphql/resource.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from AutoMutation

#build_copy, #build_create, #build_destroy, #build_mutation, #build_update

Instance Attribute Details

#graphql_nameObject



55
56
57
# File 'lib/hq/graphql/resource.rb', line 55

def graphql_name
  @graphql_name || model_name.demodulize
end

#model_nameObject



59
60
61
# File 'lib/hq/graphql/resource.rb', line 59

def model_name
  @model_name || ::HQ::GraphQL.extract_class(self)
end

Instance Method Details

#find_record(attrs, context) ⇒ Object



45
46
47
48
49
# File 'lib/hq/graphql/resource.rb', line 45

def find_record(attrs, context)
  primary_key = model_klass.primary_key.to_sym
  primary_key_value = attrs[primary_key]
  scope(context).find_by(primary_key => primary_key_value)
end

#input_klassObject



71
72
73
# File 'lib/hq/graphql/resource.rb', line 71

def input_klass
  @input_klass ||= build_input_object
end

#model_klassObject



63
64
65
# File 'lib/hq/graphql/resource.rb', line 63

def model_klass
  @model_klass ||= model_name&.safe_constantize
end

#mutation_klassesObject



67
68
69
# File 'lib/hq/graphql/resource.rb', line 67

def mutation_klasses
  @mutation_klasses ||= {}.with_indifferent_access
end

#new_record(context) ⇒ Object



51
52
53
# File 'lib/hq/graphql/resource.rb', line 51

def new_record(context)
  scope(context).new
end

#nil_query_klassObject



75
76
77
# File 'lib/hq/graphql/resource.rb', line 75

def nil_query_klass
  @nil_query_klass ||= build_graphql_object(name: "#{graphql_name}Copy", auto_nil: false)
end

#query_klassObject



79
80
81
# File 'lib/hq/graphql/resource.rb', line 79

def query_klass
  @query_klass ||= build_graphql_object
end

#scope(context) ⇒ Object



39
40
41
42
43
# File 'lib/hq/graphql/resource.rb', line 39

def scope(context)
  scope = model_klass
  scope = ::HQ::GraphQL.default_scope(scope, context)
  @default_scope&.call(scope, context) || scope
end

#sort_fields(*fields) ⇒ Object



21
22
23
# File 'lib/hq/graphql/resource.rb', line 21

def sort_fields(*fields)
  self.sort_fields_enum = fields
end

#sort_fields_enumObject



25
26
27
# File 'lib/hq/graphql/resource.rb', line 25

def sort_fields_enum
  @sort_fields_enum || ::HQ::GraphQL::Enum::SortBy
end

#sort_fields_enum=(fields) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/hq/graphql/resource.rb', line 29

def sort_fields_enum=(fields)
  @sort_fields_enum ||= Class.new(::HQ::GraphQL::Enum::SortBy).tap do |c|
    c.graphql_name "#{graphql_name}Sort"
  end

  Array(fields).each do |field|
    @sort_fields_enum.value field.to_s.classify, value: field
  end
end