class Graphql::Generators::TypeGeneratorBase
Public Class Methods
normalize_type_expression(type_expression, mode:, null: true)
click to toggle source
Take a type expression in any combination of GraphQL
or Ruby styles and return it in a specified output style TODO: nullability / list with `mode: :graphql` doesn't work @param type_expresson [String] @param mode [Symbol] @param null [Boolean] @return [(String, Boolean)] The type expression, followed by `null:` value
# File lib/generators/graphql/type_generator.rb, line 26 def self.normalize_type_expression(type_expression, mode:, null: true) if type_expression.start_with?("!") normalize_type_expression(type_expression[1..-1], mode: mode, null: false) elsif type_expression.end_with?("!") normalize_type_expression(type_expression[0..-2], mode: mode, null: false) elsif type_expression.start_with?("[") && type_expression.end_with?("]") name, is_null = normalize_type_expression(type_expression[1..-2], mode: mode, null: null) ["[#{name}]", is_null] elsif type_expression.end_with?("Type") normalize_type_expression(type_expression[0..-5], mode: mode, null: null) elsif type_expression.start_with?("Types::") normalize_type_expression(type_expression[7..-1], mode: mode, null: null) elsif type_expression.start_with?("types.") normalize_type_expression(type_expression[6..-1], mode: mode, null: null) else case mode when :ruby case type_expression when "Int" ["Integer", null] when "Integer", "Float", "Boolean", "String", "ID" [type_expression, null] else ["Types::#{type_expression.camelize}Type", null] end when :graphql [type_expression.camelize, null] else raise "Unexpected normalize mode: #{mode}" end end end
Private Instance Methods
normalized_fields()
click to toggle source
@return [Array<NormalizedField>] User-provided fields, in `(name, Ruby type name)` pairs
# File lib/generators/graphql/type_generator.rb, line 77 def normalized_fields @normalized_fields ||= fields.map { |f| name, raw_type = f.split(":", 2) type_expr, null = self.class.normalize_type_expression(raw_type, mode: :ruby) NormalizedField.new(name, type_expr, null) } end
type_file_name()
click to toggle source
@return [String] The user-provided type name, as a file name (without extension)
# File lib/generators/graphql/type_generator.rb, line 72 def type_file_name @type_file_name ||= "#{type_graphql_name}Type".underscore end
type_graphql_name()
click to toggle source
@return [String] The user-provided type name, as a GraphQL
name
# File lib/generators/graphql/type_generator.rb, line 67 def type_graphql_name @type_graphql_name ||= self.class.normalize_type_expression(type_name, mode: :graphql)[0] end
type_ruby_name()
click to toggle source
@return [String] The user-provided type name, normalized to Ruby code
# File lib/generators/graphql/type_generator.rb, line 62 def type_ruby_name @type_ruby_name ||= self.class.normalize_type_expression(type_name, mode: :ruby)[0] end