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
- #association_definitions ⇒ Object
- #attribute(name, type: nil, null: nil, &block) ⇒ Object
- #attribute_definitions ⇒ Object
- #attributes(*names) ⇒ Object
- #belongs_to(name, resource: nil, **options) ⇒ Object
- #has_many(name, resource: nil, **options) ⇒ Object
- #has_one(name, resource: nil, **options) ⇒ Object
- #model(klass = nil) ⇒ Object (also: #model_class)
- #mutation_overrides ⇒ Object
- #override_mutation(action, klass) ⇒ Object
-
#resolved_mutation_overrides ⇒ Object
Resolves mutation override values, constantizing strings lazily.
- #skip_mutations(*actions) ⇒ Object
- #skip_queries(*actions) ⇒ Object
- #skipped_mutations ⇒ Object
- #skipped_queries ⇒ Object
- #subscribe_on(*events, scope: nil) ⇒ Object
- #subscription_definitions ⇒ Object
- #writable_attributes(*names) ⇒ Object
Instance Method Details
#association_definitions ⇒ Object
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_definitions ⇒ Object
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, **) if [:polymorphic] ([:polymorphic]) [:polymorphic_types] = [:polymorphic][:types] [:union_name] = [:polymorphic][:union_name] if [:polymorphic][:union_name] [:polymorphic] = true end association_definitions[name] = { kind: :belongs_to, resource: resource, ** } 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, **) association_definitions[name] = { kind: :has_many, resource: resource, ** } 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, **) association_definitions[name] = { kind: :has_one, resource: resource, ** } 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_overrides ⇒ Object
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_overrides ⇒ Object
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_mutations ⇒ Object
60 61 62 |
# File 'lib/quail/resource/dsl.rb', line 60 def skipped_mutations @skipped_mutations || [] end |
#skipped_queries ⇒ Object
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_definitions ⇒ Object
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 |