Sha256: 59a73c5d541c463be6b022a2ff5d02c5f1e47c1cb78d07c1fe55e505b573605f

Contents?: true

Size: 1.3 KB

Versions: 2

Compression:

Stored size: 1.3 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 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? and !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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
meilisearch-rails-0.2.3 lib/meilisearch/pagination/kaminari.rb
meilisearch-rails-0.2.2 lib/meilisearch/pagination/kaminari.rb