3836d69119
Partially addresses #47424. Had to make changes to spec files because stubbing methods on frozen objects is a mess in RSpec and leads to failures: https://github.com/rspec/rspec-mocks/issues/1190
35 lines
1.1 KiB
Ruby
35 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
|