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

Version Path
base_editing_bootstrap-1.4.0 lib/base_editing_bootstrap/searches/base.rb
base_editing_bootstrap-1.3.2 lib/base_editing_bootstrap/searches/base.rb
base_editing_bootstrap-1.3.1 lib/base_editing_bootstrap/searches/base.rb
base_editing_bootstrap-1.3.0 lib/base_editing_bootstrap/searches/base.rb
base_editing_bootstrap-1.2.0 lib/base_editing_bootstrap/searches/base.rb
base_editing_bootstrap-1.1.0 lib/base_editing_bootstrap/searches/base.rb
base_editing_bootstrap-1.0.0 lib/base_editing_bootstrap/searches/base.rb