Sha256: d4f77117a231a8b3c64747e6f68a61ddc842be6a5462b8587525fc1b832ec2fc

Contents?: true

Size: 1.51 KB

Versions: 46

Compression:

Stored size: 1.51 KB

Contents

module Effective
  module Select2AjaxController
    extend ActiveSupport::Concern

    def respond_with_select2_ajax(collection, skip_search: false, &block)
      raise('collection should be an ActiveRecord::Relation') unless collection.kind_of?(ActiveRecord::Relation)

      # Authorize
      EffectiveResources.authorize!(self, :index, collection.klass)

      # Scope
      if collection.respond_to?(:select2_ajax)
        collection = collection.select2_ajax
      elsif collection.respond_to?(:sorted)
        collection = collection.sorted
      end

      # Search
      if (term = params[:term]).present? && !skip_search
        collection = Effective::Resource.new(collection).search_any(term)
      end

      # Paginate
      per_page = 50
      page = (params[:page] || 1).to_i
      last = (collection.reselect(:id).count.to_f / per_page).ceil
      more = page < last

      offset = [(page - 1), 0].max * per_page
      collection = collection.limit(per_page).offset(offset)

      # Results
      results = collection.map do |resource|
        if block_given?
          option = yield(resource)
          raise('expected a Hash with id and text params') unless option.kind_of?(Hash) && option[:id] && option[:text]
          option
        else
          { id: resource.to_param, text: resource.try(:to_select2) || resource.to_s }
        end
      end

      # Respond
      respond_to do |format|
        format.js do
          render json: { results: results, pagination: { more: more } }
        end
      end
    end

  end
end

Version data entries

46 entries across 46 versions & 1 rubygems

Version Path
effective_resources-2.5.1 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.5.0 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.4.7 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.4.6 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.4.5 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.4.4 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.4.3 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.4.2 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.4.1 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.4.0 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.3.0 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.2.12 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.2.11 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.2.10 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.2.9 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.2.8 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.2.7 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.2.6 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.2.5 app/controllers/concerns/effective/select2_ajax_controller.rb
effective_resources-2.2.4 app/controllers/concerns/effective/select2_ajax_controller.rb