| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- # frozen_string_literal: true
- module GraphQLHelpers
- # makes snake_case_field_name look like a graphql camelCaseFieldName
- # "many_pokemon" => "manyPokemon"
- def self.fieldnamerize(underscored_field_name)
- graphql_field_name = underscored_field_name.to_s.camelize
- graphql_field_name[0] = graphql_field_name[0].downcase
- graphql_field_name
- end
- def self.keys_for_klass(klass)
- case klass
- when GraphQL::Field
- klass.type
- else
- klass
- end.fields.keys
- end
- def self.arguments_for_field(field)
- case field
- when GraphQL::Schema::Resolver
- field.instance_variable_get('@arguments_by_keyword').map { |_, v| v.name }
- else
- field.arguments.keys
- end
- end
- def self.plural_arguments_for_field(field)
- keys = arguments_for_field(field)
- # Connections mandate extra fields, which are not owned by a plural based
- # resolver.
- # keys -= %w[after before first last]
- keys.map do |key|
- type_class = field.arguments[key.to_s].metadata[:type_class]
- plurals = type_class.owner.try(:plurals)
- if plurals
- arg = plurals[key.underscore.to_sym]
- fieldnamerize(arg.to_s) if arg
- end
- end.compact
- end
- def self.plural_argument_for_field(field, argument)
- field.arguments[argument.to_s].metadata[:type_class].owner.plurals[argument.to_sym]
- end
- # Shortcut for running resolvers #resolve methods
- def resolve(resolver_class, obj: nil, args: {}, ctx: {})
- resolver_class.new(object: obj, context: ctx).resolve(args)
- end
- end
|