lib/graphql_rails/attribute.rb in graphql_rails-0.1.0 vs lib/graphql_rails/attribute.rb in graphql_rails-0.2.0
- old
+ new
@@ -1,29 +1,23 @@
# frozen_string_literal: true
require 'graphql'
+require 'graphql_rails/attribute/attribute_type_parser'
module GraphqlRails
# contains info about single graphql attribute
class Attribute
- attr_reader :name, :type
+ attr_reader :name, :graphql_field_type, :property, :type_name
- def initialize(name, type = nil, required: false, hidden: false)
+ def initialize(name, type = nil, hidden: false, property: name)
@name = name.to_s
- @type = parse_type(type || type_by_attribute_name)
- @required = required
+ @type_name = type.to_s
+ @graphql_field_type = parse_type(type || type_by_attribute_name)
@hidden = hidden
+ @property = property.to_s
end
- def graphql_field_type
- @graphql_field_type ||= required? ? type.to_non_null_type : type
- end
-
- def required?
- @required
- end
-
def hidden?
@hidden
end
def field_name
@@ -49,38 +43,9 @@
GraphQL::STRING_TYPE
end
end
def parse_type(type)
- if graphql_type?(type)
- type
- elsif type.is_a?(String) || type.is_a?(Symbol)
- map_type_name_to_type(type.to_s.downcase)
- else
- raise "Unsupported type #{type.inspect} (class: #{type.class})"
- end
- end
-
- def graphql_type?(type)
- type.is_a?(GraphQL::BaseType) ||
- type.is_a?(GraphQL::ObjectType) ||
- (defined?(GraphQL::Schema::Member) && type.is_a?(Class) && type < GraphQL::Schema::Member)
- end
-
- def map_type_name_to_type(type_name)
- case type_name
- when 'id'
- GraphQL::ID_TYPE
- when 'int', 'integer'
- GraphQL::INT_TYPE
- when 'string', 'str', 'text', 'time', 'date'
- GraphQL::STRING_TYPE
- when 'bool', 'boolean', 'mongoid::boolean'
- GraphQL::BOOLEAN_TYPE
- when 'float', 'double', 'decimal'
- GraphQL::FLOAT_TYPE
- else
- raise "Don't know how to parse type with name #{type_name.inspect}"
- end
+ AttributeTypeParser.new(type).call
end
end
end