class Graphql::Generators::TypeGeneratorBase
Attributes
graphql_type[RW]
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 41 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
Public Instance Methods
create_type_file()
click to toggle source
# File lib/generators/graphql/type_generator.rb, line 30 def create_type_file template "#{graphql_type}.erb", "#{options[:directory]}/types#{subdirectory}/#{type_file_name}.rb" 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 92 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
ruby_class_name()
click to toggle source
# File lib/generators/graphql/type_generator.rb, line 100 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
subdirectory()
click to toggle source
# File lib/generators/graphql/type_generator.rb, line 110 def subdirectory if options[:namespaced_types] "/#{graphql_type.pluralize}" else "" end 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 87 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 82 def type_graphql_name @type_graphql_name ||= self.class.normalize_type_expression(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 77 def type_ruby_name @type_ruby_name ||= self.class.normalize_type_expression(name, mode: :ruby)[0] end