Sha256: 2a4a13d867bbdf6b28edb25fbf5d9a13db8513631e694c2a0cead21b328f301e

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 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'
      require 'graphql_rails/types/object_type'

      include ::GraphqlRails::Service

      def initialize(name:, type_name:, parent_class:, description: nil)
        @name = name
        @type_name = type_name
        @description = description
        @new_class = false
        @parent_class = parent_class
      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, :parent_class

      def build_graphql_type_klass
        graphql_type_name = name
        graphql_type_description = description

        graphql_type_klass = Class.new(parent_class) 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

1 entries across 1 versions & 1 rubygems

Version Path
graphql_rails-2.4.0 lib/graphql_rails/model/find_or_build_graphql_type_class.rb