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
- .build_find_field(model, type_class) ⇒ Object
- .build_list_field(model, type_class) ⇒ Object
- .call(resource_class) ⇒ Object
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 |