Module: Quail::Resource::DSL::ClassMethods

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

Overview

Class-level DSL methods mixed into resource classes.

Instance Method Summary collapse

Instance Method Details

#association_definitionsObject



34
35
36
# File 'lib/quail/resource/dsl.rb', line 34

def association_definitions
  @association_definitions ||= {}
end

#attribute(name, type: nil, null: nil, &block) ⇒ Object



30
31
32
# File 'lib/quail/resource/dsl.rb', line 30

def attribute(name, type: nil, null: nil, &block)
  attribute_definitions[name] = { type: :computed, graphql_type: type, null: null, block: block }
end

#attribute_definitionsObject



22
23
24
# File 'lib/quail/resource/dsl.rb', line 22

def attribute_definitions
  @attribute_definitions ||= {}
end

#attributes(*names) ⇒ Object



26
27
28
# File 'lib/quail/resource/dsl.rb', line 26

def attributes(*names)
  names.each { |name| attribute_definitions[name] = { type: :column } }
end

#belongs_to(name, resource: nil, **options) ⇒ Object



46
47
48
49
50
51
52
53
54
# File 'lib/quail/resource/dsl.rb', line 46

def belongs_to(name, resource: nil, **options)
  if options[:polymorphic]
    validate_polymorphic_options!(options[:polymorphic])
    options[:polymorphic_types] = options[:polymorphic][:types]
    options[:union_name] = options[:polymorphic][:union_name] if options[:polymorphic][:union_name]
    options[:polymorphic] = true
  end
  association_definitions[name] = { kind: :belongs_to, resource: resource, **options }
end

#has_many(name, resource: nil, **options) ⇒ Object



38
39
40
# File 'lib/quail/resource/dsl.rb', line 38

def has_many(name, resource: nil, **options)
  association_definitions[name] = { kind: :has_many, resource: resource, **options }
end

#has_one(name, resource: nil, **options) ⇒ Object



42
43
44
# File 'lib/quail/resource/dsl.rb', line 42

def has_one(name, resource: nil, **options)
  association_definitions[name] = { kind: :has_one, resource: resource, **options }
end

#model(klass = nil) ⇒ Object Also known as: model_class



13
14
15
16
17
18
19
# File 'lib/quail/resource/dsl.rb', line 13

def model(klass = nil)
  if klass
    @model_class = klass
  else
    @model ||= name.delete_suffix("Resource").constantize
  end
end

#mutation_overridesObject



68
69
70
# File 'lib/quail/resource/dsl.rb', line 68

def mutation_overrides
  @mutation_overrides ||= {}
end

#override_mutation(action, klass) ⇒ Object



64
65
66
# File 'lib/quail/resource/dsl.rb', line 64

def override_mutation(action, klass)
  mutation_overrides[action.to_sym] = klass
end

#resolved_mutation_overridesObject

Resolves mutation override values, constantizing strings lazily.



73
74
75
76
77
# File 'lib/quail/resource/dsl.rb', line 73

def resolved_mutation_overrides
  mutation_overrides.transform_values do |klass|
    klass.is_a?(String) ? klass.constantize : klass
  end
end

#skip_mutations(*actions) ⇒ Object



56
57
58
# File 'lib/quail/resource/dsl.rb', line 56

def skip_mutations(*actions)
  @skipped_mutations = actions.map(&:to_sym)
end

#skip_queries(*actions) ⇒ Object



99
100
101
# File 'lib/quail/resource/dsl.rb', line 99

def skip_queries(*actions)
  @skipped_queries = actions.map(&:to_sym)
end

#skipped_mutationsObject



60
61
62
# File 'lib/quail/resource/dsl.rb', line 60

def skipped_mutations
  @skipped_mutations || []
end

#skipped_queriesObject



103
104
105
# File 'lib/quail/resource/dsl.rb', line 103

def skipped_queries
  @skipped_queries || []
end

#subscribe_on(*events, scope: nil) ⇒ Object



91
92
93
94
95
96
97
# File 'lib/quail/resource/dsl.rb', line 91

def subscribe_on(*events, scope: nil)
  if scope && !scope.is_a?(Symbol) && !scope.is_a?(Hash)
    raise ArgumentError, "subscribe_on scope: must be a Symbol or Hash { key: proc }, got #{scope.class}"
  end

  events.each { |event| subscription_definitions[event.to_sym] = { scope: scope } }
end

#subscription_definitionsObject



87
88
89
# File 'lib/quail/resource/dsl.rb', line 87

def subscription_definitions
  @subscription_definitions ||= {}
end

#writable_attributes(*names) ⇒ Object



79
80
81
82
83
84
85
# File 'lib/quail/resource/dsl.rb', line 79

def writable_attributes(*names)
  if names.any?
    @writable_attributes = names.map(&:to_sym)
  else
    @writable_attributes
  end
end