Sha256: a5e1e3e9a2c4db575e693a6535512a8dd01571d87f9162a9d53273d48c8688f0

Contents?: true

Size: 1.39 KB

Versions: 8

Compression:

Stored size: 1.39 KB

Contents

unless defined? Kaminari
  raise(MeiliSearch::BadConfiguration,
        "Meilisearch: Please add 'kaminari' to your Gemfile to use kaminari pagination backend")
end

require 'kaminari/models/array_extension'

module MeiliSearch
  module Rails
    module Pagination
      class Kaminari < ::Kaminari::PaginatableArray
        def initialize(array, options)
          if RUBY_VERSION >= '3'
            super(array, **options)
          else
            super(array, options)
          end
        end

        def limit(_num)
          # noop
          self
        end

        def offset(_num)
          # noop
          self
        end

        class << self
          def create(results, total_hits, options = {})
            offset = ((options[:page] - 1) * options[:per_page])
            array = new results, limit: options[:per_page], offset: offset, total_count: total_hits

            if array.empty? && !results.empty?
              # since Kaminari 0.16.0, you need to pad the results with nil values so it matches the offset param
              # otherwise you'll get an empty array: https://github.com/amatsuda/kaminari/commit/29fdcfa8865f2021f710adaedb41b7a7b081e34d
              results = ([nil] * offset) + results
              array = new results, offset: offset, limit: options[:per_page], total_count: total_hits
            end

            array
          end
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
meilisearch-rails-0.7.3 lib/meilisearch/rails/pagination/kaminari.rb
meilisearch-rails-0.7.2 lib/meilisearch/rails/pagination/kaminari.rb
meilisearch-rails-0.7.1 lib/meilisearch/rails/pagination/kaminari.rb
meilisearch-rails-0.7.0 lib/meilisearch/rails/pagination/kaminari.rb
meilisearch-rails-0.6.0 lib/meilisearch/rails/pagination/kaminari.rb
meilisearch-rails-0.5.2 lib/meilisearch/rails/pagination/kaminari.rb
meilisearch-rails-0.5.1 lib/meilisearch/rails/pagination/kaminari.rb
meilisearch-rails-0.5.0 lib/meilisearch/rails/pagination/kaminari.rb