class Graphql::Generators::TypeGeneratorBase
def self.normalize_type_expression(type_expression, mode:, null: true)
-
((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
-
(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
-
(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
-
(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
-
(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