Sha256: 28959228dcad0535b9f635962487b1476c15f585f41e34e71723e95acd1c56e8

Contents?: true

Size: 1.09 KB

Versions: 8

Compression:

Stored size: 1.09 KB

Contents

# frozen_string_literal: true

module GraphqlRails
  module Model
    # Initializes class to define graphql type and fields.
    class FindOrBuildGraphqlTypeClass
      require 'graphql_rails/concerns/service'

      include ::GraphqlRails::Service

      def initialize(name:, type_name:, description: nil)
        @name = name
        @type_name = type_name
        @description = description
        @new_class = false
      end

      def klass
        @klass ||= Object.const_defined?(type_name) && Object.const_get(type_name) || build_graphql_type_klass
      end

      def new_class?
        new_class
      end

      private

      attr_accessor :new_class
      attr_reader :name, :type_name, :description

      def build_graphql_type_klass
        graphql_type_name = name
        graphql_type_description = description

        graphql_type_klass = Class.new(GraphQL::Schema::Object) do
          graphql_name(graphql_type_name)
          description(graphql_type_description)
        end

        self.new_class = true

        Object.const_set(type_name, graphql_type_klass)
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
graphql_rails-2.0.0 lib/graphql_rails/model/find_or_build_graphql_type_class.rb
graphql_rails-1.2.6 lib/graphql_rails/model/find_or_build_graphql_type_class.rb
graphql_rails-1.2.4 lib/graphql_rails/model/find_or_build_graphql_type_class.rb
graphql_rails-1.2.3 lib/graphql_rails/model/find_or_build_graphql_type_class.rb
graphql_rails-1.2.2 lib/graphql_rails/model/find_or_build_graphql_type_class.rb
graphql_rails-1.2.1 lib/graphql_rails/model/find_or_build_graphql_type_class.rb
graphql_rails-1.2.0 lib/graphql_rails/model/find_or_build_graphql_type_class.rb
graphql_rails-1.1.0 lib/graphql_rails/model/find_or_build_graphql_type_class.rb