36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module API
 | 
						|
  module Helpers
 | 
						|
    module CustomAttributes
 | 
						|
      extend ActiveSupport::Concern
 | 
						|
 | 
						|
      included do
 | 
						|
        helpers do
 | 
						|
          params :with_custom_attributes do
 | 
						|
            optional :with_custom_attributes, type: Boolean, default: false, desc: 'Include custom attributes in the response'
 | 
						|
 | 
						|
            optional :custom_attributes, type: Hash,
 | 
						|
                                         desc: 'Filter with custom attributes'
 | 
						|
          end
 | 
						|
 | 
						|
          # rubocop: disable CodeReuse/ActiveRecord
 | 
						|
          def with_custom_attributes(collection_or_resource, options = {})
 | 
						|
            options = options.merge(
 | 
						|
              with_custom_attributes: params[:with_custom_attributes] &&
 | 
						|
                can?(current_user, :read_custom_attribute)
 | 
						|
            )
 | 
						|
 | 
						|
            if options[:with_custom_attributes] && collection_or_resource.is_a?(ActiveRecord::Relation)
 | 
						|
              collection_or_resource = collection_or_resource.includes(:custom_attributes)
 | 
						|
            end
 | 
						|
 | 
						|
            [collection_or_resource, options]
 | 
						|
          end
 | 
						|
          # rubocop: enable CodeReuse/ActiveRecord
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |