Sha256: bfb8d801d961d0223bbbfc239a54d82f4dc89a154364aee610e596c708812ae8
Contents?: true
Size: 1.52 KB
Versions: 7
Compression:
Stored size: 1.52 KB
Contents
# frozen_string_literal: true module BaseEditingBootstrap::Searches ## # PORO per la gestione dei metodi associati alla ricerca. class Base include ActiveModel::Naming include ActiveModel::Conversion attr_reader :model_klass, :user, :params, :scope, :sorts # @param [User] user # @param [ActiveRecord::Associations::CollectionProxy] scope # @param [Array<String (frozen)>] sort def initialize(scope, user, params: {page: nil}, sorts: ["id"]) @model_klass = scope.klass @user = user @scope = scope @params = params @sorts = sorts end ## # Risultato della ricerca, fa da pipeline verso ransack # Impostando il sort nel caso in cui non sia giĆ stato impostato da ransack def results ransack_query .tap { |r| r.sorts = @sorts if r.sorts.empty? } .result(distinct: true) .tap { |q| Rails.logger.debug { "[Ransack] params:#{params} - sql: #{q.to_sql}" } } .page(params[:page]) end def ransack_query scope .ransack(params[:q], auth_object: user) end def search_fields Pundit.policy(@user, @model_klass).search_fields.collect { |f| Field.new(self, f) } end def search_result_fields Pundit.policy(@user, @model_klass).search_result_fields end ## # Ritorna se il campo deve essere ordinabile o meno def sortable?(field) Pundit.policy(@user, @model_klass).sortable_search_result_fields.include?(field) end def persisted? false end end end
Version data entries
7 entries across 7 versions & 1 rubygems