mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
54 lines
1.4 KiB
Ruby
54 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Whitelists model attributes, scopes, and associations that can be searched on with Ransack.
|
|
# Exposes methods for defining the whitelists, eg:
|
|
#
|
|
# class Widget < ApplicationRecord
|
|
# searchable_attributes :number, :state
|
|
# searchable_scopes :activated, :disabled
|
|
#
|
|
# ...
|
|
# end
|
|
|
|
module Searchable
|
|
extend ActiveSupport::Concern
|
|
|
|
DEFAULT_SEARCHABLE_ATTRIBUTES = [
|
|
:id, :name, :description, :created_at, :updated_at, :completed_at, :deleted_at
|
|
].freeze
|
|
|
|
included do
|
|
class_attribute :whitelisted_search_attributes, instance_accessor: false, default: []
|
|
class_attribute :whitelisted_search_associations, instance_accessor: false, default: []
|
|
class_attribute :whitelisted_search_scopes, instance_accessor: false, default: []
|
|
end
|
|
|
|
class_methods do
|
|
def ransackable_associations(*_args)
|
|
whitelisted_search_associations.map(&:to_s)
|
|
end
|
|
|
|
def ransackable_attributes(*_args)
|
|
(DEFAULT_SEARCHABLE_ATTRIBUTES | whitelisted_search_attributes).map(&:to_s)
|
|
end
|
|
|
|
def ransackable_scopes(*_args)
|
|
whitelisted_search_scopes.map(&:to_s)
|
|
end
|
|
|
|
private
|
|
|
|
def searchable_attributes(*attrs)
|
|
self.whitelisted_search_attributes = attrs
|
|
end
|
|
|
|
def searchable_associations(*attrs)
|
|
self.whitelisted_search_associations = attrs
|
|
end
|
|
|
|
def searchable_scopes(*attrs)
|
|
self.whitelisted_search_scopes = attrs
|
|
end
|
|
end
|
|
end
|