42 lines
		
	
	
		
			971 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			971 B
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module Gitlab
 | 
						|
  module Graphql
 | 
						|
    module Present
 | 
						|
      extend ActiveSupport::Concern
 | 
						|
      prepended do
 | 
						|
        def self.present_using(kls)
 | 
						|
          @presenter_class = kls
 | 
						|
        end
 | 
						|
 | 
						|
        def self.presenter_class
 | 
						|
          @presenter_class || superclass.try(:presenter_class)
 | 
						|
        end
 | 
						|
 | 
						|
        def self.present(object, attrs)
 | 
						|
          klass = presenter_class
 | 
						|
          return object if !klass || object.is_a?(klass)
 | 
						|
 | 
						|
          klass.new(object, **attrs)
 | 
						|
        end
 | 
						|
      end
 | 
						|
 | 
						|
      def unpresented
 | 
						|
        unwrapped || object
 | 
						|
      end
 | 
						|
 | 
						|
      def present(object_type, attrs)
 | 
						|
        return unless object_type.respond_to?(:present)
 | 
						|
 | 
						|
        self.unwrapped ||= object
 | 
						|
        # @object belongs to Schema::Object, which does not expose a writer.
 | 
						|
        @object = object_type.present(unwrapped, attrs) # rubocop: disable Gitlab/ModuleWithInstanceVariables
 | 
						|
      end
 | 
						|
 | 
						|
      private
 | 
						|
 | 
						|
      attr_accessor :unwrapped
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |