module GraphQL::Sugar
Constants
- GRAPHQL_TYPE_MAPPING
- VERSION
Public Class Methods
get_association_name(field_name)
click to toggle source
# File lib/graphql/sugar.rb, line 73 def self.get_association_name(field_name) field_name.to_s.underscore end
get_column_details(model_class, column_name)
click to toggle source
# File lib/graphql/sugar.rb, line 40 def self.get_column_details(model_class, column_name) column_details = model_class.columns_hash[column_name] raise "The attribute '#{column_name}' doesn't exist in model '#{model_class}'." if column_details.blank? column_details end
get_column_name(field_name)
click to toggle source
# File lib/graphql/sugar.rb, line 36 def self.get_column_name(field_name) field_name.to_s.underscore end
get_graphql_type(model_class, column_name, enforce_non_null: true)
click to toggle source
# File lib/graphql/sugar.rb, line 46 def self.get_graphql_type(model_class, column_name, enforce_non_null: true) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity return GraphQL::ID_TYPE.to_non_null_type if column_name == model_class.primary_key column_details = get_column_details(model_class, column_name) belongs_to_association = model_class.reflect_on_all_associations(:belongs_to).find { |a| a.foreign_key == column_name } type = if model_class.defined_enums.key?(column_name) GraphQL::STRING_TYPE elsif belongs_to_association.present? GraphQL::ID_TYPE else GRAPHQL_TYPE_MAPPING[column_details.type] || GraphQL::STRING_TYPE end type = type.to_list_type if column_details.respond_to?(:array?) && column_details.array? if enforce_non_null is_not_null = !column_details.null is_not_null ||= Sugar.validates_presence?(model_class, column_name) is_not_null ||= Sugar.validates_presence?(model_class, belongs_to_association.name) if belongs_to_association.present? type = type.to_non_null_type if is_not_null end type end
get_model_class(type_defn)
click to toggle source
# File lib/graphql/sugar.rb, line 30 def self.get_model_class(type_defn) model_class = type_defn.metadata[:model_class] raise "You must define a `model_class` first in `#{type_defn.class}`." if model_class.blank? model_class end
get_mutator_function(field_name)
click to toggle source
# File lib/graphql/sugar.rb, line 26 def self.get_mutator_function(field_name) "#{field_name.to_s.camelize}Mutator".constantize end
get_resolver_function(field_name)
click to toggle source
# File lib/graphql/sugar.rb, line 17 def self.get_resolver_function(field_name) "#{field_name.to_s.camelize}Resolver".constantize end
get_resolver_graphql_type(field_name)
click to toggle source
# File lib/graphql/sugar.rb, line 13 def self.get_resolver_graphql_type(field_name) "Types::#{field_name.to_s.classify}Type".constantize end
get_resolver_plural(field_name)
click to toggle source
# File lib/graphql/sugar.rb, line 21 def self.get_resolver_plural(field_name) field_string = field_name.to_s field_string.pluralize == field_string end
validates_presence?(model_class, column_name)
click to toggle source
# File lib/graphql/sugar.rb, line 77 def self.validates_presence?(model_class, column_name) column_validators = model_class.validators_on(column_name) column_validators.any? do |validator| validator.class == ActiveRecord::Validations::PresenceValidator && !validator.options[:allow_nil] && !validator.options[:allow_blank] && !validator.options.key?(:if) && !validator.options.key?(:unless) end end