module Gql::GqlGeneratorBase

Protected Instance Methods

class_with_arguments(namespace, name, superclass, fields) click to toggle source
# File lib/generators/gql/gql_generator_base.rb, line 72
def class_with_arguments(namespace, name, superclass, fields)
  wrap_in_namespace(namespace) do |indent|
    klass = []
    klass << sprintf("%sclass %s < %s", "  " * indent, name, superclass)

    fields.each do |field|
      klass << sprintf("%sargument :%s, %s, required: %s", "  " * (indent + 1), field[:name], field[:gql_type], !field[:null])
    end

    klass << sprintf("%send", "  " * indent)
    klass.join("\n")
  end
end
class_with_fields(namespace, name, superclass, fields) click to toggle source
# File lib/generators/gql/gql_generator_base.rb, line 58
def class_with_fields(namespace, name, superclass, fields)
  wrap_in_namespace(namespace) do |indent|
    klass = []
    klass << sprintf("%sclass %s < %s", "  " * indent, name, superclass)

    fields.each do |field|
      klass << sprintf("%sfield :%s, %s, null: %s", "  " * (indent + 1), field[:name], field[:gql_type], field[:null])
    end

    klass << sprintf("%send", "  " * indent)
    klass.join("\n")
  end
end
map_model_types(model_name) click to toggle source
# File lib/generators/gql/gql_generator_base.rb, line 27
def map_model_types(model_name)
  klass = model_name.constantize
  associations = klass.reflect_on_all_associations(:belongs_to)
  bt_columns = associations.map(&:foreign_key)

  klass.columns
    .reject { |col| bt_columns.include?(col.name) }
    .reject { |col| type_map[col.type].nil? }
    .map do |col|
      {
        name: col.name,
        null: col.null,
        gql_type: klass.primary_key == col.name ? 'GraphQL::Types::ID' : type_map[col.type]
      }
    end
end
prefixed_class_name(prefix) click to toggle source

Generate a namedspaced class name with the mutation prefix

# File lib/generators/gql/gql_generator_base.rb, line 8
def prefixed_class_name(prefix)
  (class_path + ["#{prefix}_#{file_name}"]).map!(&:camelize).join("::")
end
root_directory(namespace) click to toggle source
# File lib/generators/gql/gql_generator_base.rb, line 44
def root_directory(namespace)
  "app/graphql/#{namespace.underscore}"
end
type_map() click to toggle source
# File lib/generators/gql/gql_generator_base.rb, line 12
def type_map
  {
    integer: 'Int',
    string: 'String',
    boolean: 'Boolean',
    decimal: 'Float',
    datetime: 'GraphQL::Types::ISO8601DateTime',
    date: 'GraphQL::Types::ISO8601Date',
    hstore: 'GraphQL::Types::JSON',
    text: 'String',
    json: 'GraphQL::Types::JSON',
    jsonb: 'GraphQL::Types::JSON'
  }
end
wrap_in_namespace(namespace) { |size| ... } click to toggle source
# File lib/generators/gql/gql_generator_base.rb, line 48
def wrap_in_namespace(namespace)
  namespace = namespace.split('::')
  namespace.shift if namespace[0].empty?

  code = namespace.each_with_index.map { |name, i| "  " * i + "module #{name}" }.join("\n")
  code << "\n" << yield(namespace.size) << "\n"
  code << (namespace.size - 1).downto(0).map { |i| "  " * i  + "end" }.join("\n")
  code
end