diff --git a/CHANGELOG.md b/CHANGELOG.md index 62e4507..7846ce5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ ## master (unreleased) +- Fix iterating using only a timestamp column + - Add the ability to skip implicitly appending a primary key to the list of sorting columns. It may be useful to disable it for the table with a UUID primary key or when the sorting diff --git a/lib/activerecord_cursor_paginate/cursor.rb b/lib/activerecord_cursor_paginate/cursor.rb index a34d3ba..6866e86 100644 --- a/lib/activerecord_cursor_paginate/cursor.rb +++ b/lib/activerecord_cursor_paginate/cursor.rb @@ -48,8 +48,8 @@ def deserialize_time_if_needed(value) attr_reader :columns, :values def initialize(columns:, values:) - @columns = Array(columns) - @values = Array(values) + @columns = Array.wrap(columns) + @values = Array.wrap(values) raise ArgumentError, "Cursor values can not be nil" if @values.any?(nil) raise ArgumentError, ":columns and :values have different sizes" if @columns.size != @values.size diff --git a/test/paginator_test.rb b/test/paginator_test.rb index dc69621..edc9145 100644 --- a/test/paginator_test.rb +++ b/test/paginator_test.rb @@ -184,6 +184,15 @@ def test_paginating_over_time_column assert_equal([7, 4, 10], page2.records.pluck(:id)) end + def test_paginating_over_time_column_without_primary_key + p = User.cursor_paginate(limit: 3, order: { created_at: :asc }, append_primary_key: false) + page1 = p.fetch + assert_equal([5, 3, 8], page1.records.pluck(:id)) + + page2 = p.fetch + assert_equal([7, 4, 10], page2.records.pluck(:id)) + end + def test_paginating_over_all_pages p = User.cursor_paginate(limit: 2)