class Graphql::Generators::TypeGeneratorBase

def self.normalize_type_expression(type_expression, mode:, null: true)

Returns:
  • ((String, Boolean)) - The type expression, followed by `null:` value

Parameters:
  • null (Boolean) --
  • mode (Symbol) --
  • type_expresson (String) --
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

def create_type_file

def create_type_file
  template "#{graphql_type}.erb", "#{options[:directory]}/types#{subdirectory}/#{type_file_name}.rb"
end

def normalized_fields

Returns:
  • (Array) - User-provided fields, in `(name, Ruby type name)` pairs
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

def ruby_class_name

def ruby_class_name
  class_prefix = 
    if options[:namespaced_types]
      "#{graphql_type.pluralize.camelize}::"
    else
      ""
    end
  @ruby_class_name || class_prefix + type_ruby_name.sub(/^Types::/, "")
end

def subdirectory

def subdirectory
  if options[:namespaced_types]
    "/#{graphql_type.pluralize}"
  else
    ""
  end
end

def type_file_name

Returns:
  • (String) - The user-provided type name, as a file name (without extension)
def type_file_name
  @type_file_name ||= "#{type_graphql_name}Type".underscore
end

def type_graphql_name

Returns:
  • (String) - The user-provided type name, as a GraphQL name
def type_graphql_name
  @type_graphql_name ||= self.class.normalize_type_expression(name, mode: :graphql)[0]
end

def type_ruby_name

Returns:
  • (String) - The user-provided type name, normalized to Ruby code
def type_ruby_name
  @type_ruby_name ||= self.class.normalize_type_expression(name, mode: :ruby)[0]
end