rotulus 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b01279029660a73c745ba2c67c703454f54f44a160b5964523c0fd521ca973c0
4
- data.tar.gz: b1479c0f2a2b8971e4d8977f4b5e4a052829d2d3f472fe1199497266d8d3cafe
3
+ metadata.gz: 6bc659ce794517af485f9c65dc18467b4278c21e8813e612a0b4dcdabde0b10f
4
+ data.tar.gz: 2dc66e54844499214cc07ae49d8ca0ad33586ba28a11d4e2a3a4366d4633525a
5
5
  SHA512:
6
- metadata.gz: 12120dce0516e9823e891dea5bfe76af1148234e18a556f1d889d1b5ec68031746afbe6e0599955ced295de214d6eedfa3b560ffdce03e0c49e94561a3c5399a
7
- data.tar.gz: 6b10d0bab75dffd5f1c988f09161a56cdc0688e50af403864a9b15c6d6b0b2a1191eddff5606be86e516ba3ba785a96cbbaa39dbb963593a00108fb4aee8bc23
6
+ metadata.gz: f60f971213d39e4baa5d6fd53227971df6e09fb87f1824487e17a2972e80803db29e2b5894cc7b0be659d73ad3bf959a5944c5ed0235b754f19a80afe0cd69e1
7
+ data.tar.gz: f0b072563fe10c626772f2879d9533263b393452022a5e4547ea6e5413a5bfab92ef629dd3aa787328b3bda14ae89ae04e1d5c345073fe3ae2e2afc2092dae86
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
- ## 0.1.0
1
+ ## 0.2.0
2
2
 
3
3
  Initial release.
4
+
5
+ ## 0.2.1
6
+
7
+ Drop unnecessary ORDER BY columns following a non-nullable and distinct column.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Rotulus
2
2
 
3
- [![CI](https://github.com/jsonb-uy/rotulus/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/jsonb-uy/rotulus/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/jsonb-uy/rotulus/branch/main/graph/badge.svg?token=OKGOWP4SH9)](https://codecov.io/gh/jsonb-uy/rotulus)
3
+ [![Gem Version](https://badge.fury.io/rb/rotulus.svg)](https://badge.fury.io/rb/rotulus) [![CI](https://github.com/jsonb-uy/rotulus/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/jsonb-uy/rotulus/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/jsonb-uy/rotulus/branch/main/graph/badge.svg?token=OKGOWP4SH9)](https://codecov.io/gh/jsonb-uy/rotulus)
4
4
 
5
5
  ### Cursor-based pagination for apps built on Rails/ActiveRecord
6
6
 
@@ -352,13 +352,13 @@ page = Rotulus::Page.new(User.all, order: { first_name: { direction: :asc, nulls
352
352
 
353
353
  ###### SQL:
354
354
  ```sql
355
- -- if first_name value of the last record on current page is not null:
355
+ -- if last_name value of the current page's last record is not null:
356
356
  WHERE ((users.last_name >= ? OR users.last_name IS NULL) AND
357
357
  ((users.last_name > ? OR users.last_name IS NULL)
358
358
  OR (users.last_name = ? AND users.id > ?)))
359
359
  ORDER BY users.last_name asc nulls last, users.id asc LIMIT 3
360
360
 
361
- -- if first_name value of the last record on current page is null:
361
+ -- if last_name value of the current page's last record is null:
362
362
  WHERE users.last_name IS NULL AND users.id > ?
363
363
  ORDER BY users.last_name asc nulls last, users.id asc LIMIT 3
364
364
  ```
data/lib/rotulus/order.rb CHANGED
@@ -62,14 +62,14 @@ module Rotulus
62
62
  #
63
63
  # @return [String] the ORDER BY clause
64
64
  def reversed_sql
65
- Arel.sql(columns.map(&:reversed_order_sql).join(', '))
65
+ Arel.sql(columns_for_order.map(&:reversed_order_sql).join(', '))
66
66
  end
67
67
 
68
68
  # Returns the ORDER BY sort expression(s) to sort the records
69
69
  #
70
70
  # @return [String] the ORDER BY clause
71
71
  def sql
72
- Arel.sql(columns.map(&:order_sql).join(', '))
72
+ Arel.sql(columns_for_order.map(&:order_sql).join(', '))
73
73
  end
74
74
 
75
75
  # Generate a 'state' so we can detect whether the order definition has changed.
@@ -92,6 +92,19 @@ module Rotulus
92
92
 
93
93
  attr_reader :ar_model, :definition, :raw_hash
94
94
 
95
+ def columns_for_order
96
+ return @columns_for_order if instance_variable_defined?(:@columns_for_order)
97
+
98
+ @columns_for_order = []
99
+ columns.each do |col|
100
+ @columns_for_order << col
101
+
102
+ break if col.distinct? && !col.nullable?
103
+ end
104
+
105
+ @columns_for_order
106
+ end
107
+
95
108
  def ar_model_primary_key
96
109
  ar_model.primary_key
97
110
  end
@@ -1,3 +1,3 @@
1
1
  module Rotulus
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rotulus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uy Jayson B
@@ -73,7 +73,6 @@ extensions: []
73
73
  extra_rdoc_files: []
74
74
  files:
75
75
  - CHANGELOG.md
76
- - Gemfile
77
76
  - LICENSE
78
77
  - README.md
79
78
  - lib/rotulus.rb
@@ -97,7 +96,7 @@ metadata:
97
96
  homepage_uri: https://github.com/jsonb-uy/rotulus
98
97
  source_code_uri: https://github.com/jsonb-uy/rotulus
99
98
  changelog_uri: https://github.com/jsonb-uy/rotulus/blob/main/CHANGELOG.md
100
- documentation_uri: https://rubydoc.info/github/jsonb-uy/rotulus
99
+ documentation_uri: https://rubydoc.info/github/jsonb-uy/rotulus/main
101
100
  bug_tracker_uri: https://github.com/jsonb-uy/rotulus/issues
102
101
  post_install_message:
103
102
  rdoc_options: []
data/Gemfile DELETED
@@ -1,46 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
3
-
4
- rails_version = ENV['RAILS_VERSION'] || '7-0-stable'
5
-
6
- gem 'rake'
7
- gem 'rspec'
8
-
9
- if ENV.fetch('COVERAGE', nil) == 'true'
10
- gem 'simplecov'
11
- gem 'simplecov-cobertura'
12
- end
13
-
14
- case rails_version
15
- when '4-2-stable'
16
- # Ruby 2.2 or newer.
17
- gem 'pg', '~> 0.15'
18
- gem 'sqlite3', '~> 1.3.6'
19
- gem 'mysql2', '~> 0.4.4'
20
- when '5-0-stable', '5-1-stable', '5-2-stable'
21
- # Ruby 2.2.2 or newer.
22
- gem 'pg', '~> 0.18'
23
- gem 'sqlite3', '~> 1.3.6'
24
- gem 'mysql2', '~> 0.4.4'
25
- when '6-0-stable'
26
- # Ruby 2.5.0 or newer.
27
- gem 'pg', '~> 0.18'
28
- gem 'sqlite3', '~> 1.4'
29
- gem 'mysql2', '>= 0.4.4'
30
- when '6-1-stable'
31
- # Ruby 2.5.0 or newer.
32
- gem 'pg', '~> 1.1'
33
- gem 'sqlite3', '~> 1.4'
34
- gem 'mysql2', '~> 0.5'
35
- when '7-0-stable'
36
- # Ruby 2.7.0 or newer.
37
- gem 'pg', '~> 1.1'
38
- gem 'sqlite3', '~> 1.4'
39
- gem 'mysql2', '~> 0.5'
40
- else
41
- gem 'pg'
42
- gem 'sqlite3'
43
- gem 'mysql2'
44
- end
45
-
46
- gem 'rails', git: 'https://github.com/rails/rails', branch: rails_version