active_sort_order 0.9.0 → 0.9.4

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.
data/test/test_helper.rb CHANGED
@@ -3,6 +3,16 @@ ENV["RAILS_ENV"] = "test"
3
3
 
4
4
  require "active_sort_order"
5
5
 
6
+ begin
7
+ require 'warning'
8
+
9
+ Warning.ignore(
10
+ %r{mail/parsers/address_lists_parser}, ### Hide mail gem warnings
11
+ )
12
+ rescue LoadError
13
+ # Do nothing
14
+ end
15
+
6
16
  ### Instantiates Rails
7
17
  require File.expand_path("../dummy_app/config/environment.rb", __FILE__)
8
18
 
@@ -34,12 +44,12 @@ else
34
44
  end
35
45
 
36
46
  [Post].each do |klass|
37
- ### REGULAR SQL
38
- #ActiveRecord::Base.connection.execute("TRUNCATE TABLE #{klass.table_name}")
39
-
40
- ### SQLITE
41
- ActiveRecord::Base.connection.execute("DELETE FROM #{klass.table_name};")
42
- ActiveRecord::Base.connection.execute("UPDATE `sqlite_sequence` SET `seq` = 0 WHERE `name` = '#{klass.table_name}';")
47
+ if defined?(SQLite3)
48
+ ActiveRecord::Base.connection.execute("DELETE FROM #{klass.table_name};")
49
+ ActiveRecord::Base.connection.execute("UPDATE `sqlite_sequence` SET `seq` = 0 WHERE `name` = '#{klass.table_name}';")
50
+ else
51
+ ActiveRecord::Base.connection.execute("TRUNCATE TABLE #{klass.table_name}")
52
+ end
43
53
  end
44
54
 
45
55
  DATA = {}.with_indifferent_access
@@ -2,10 +2,10 @@ require "test_helper"
2
2
 
3
3
  class ActiveSortOrderTest < ActiveSupport::TestCase
4
4
 
5
- def setup
5
+ setup do
6
6
  end
7
7
 
8
- def teardown
8
+ teardown do
9
9
  end
10
10
 
11
11
  def test_exposes_main_module
@@ -16,6 +16,14 @@ class ActiveSortOrderTest < ActiveSupport::TestCase
16
16
  assert ActiveSortOrder::VERSION
17
17
  end
18
18
 
19
+ def test_base_sort_order_default_value
20
+ klass = PostWithBaseOrderA
21
+
22
+ assert PostWithBaseOrderA.unscoped.sort_order.to_sql.include?("ORDER BY #{klass.base_sort_order}")
23
+
24
+ assert PostWithBaseOrderA.unscoped.sort_order(base_sort_order: true).to_sql.include?("ORDER BY #{klass.base_sort_order}")
25
+ end
26
+
19
27
  def test_class_base_sort_order_only
20
28
  assert_equal Post.all.count, DATA[:posts].count
21
29
 
@@ -67,7 +75,7 @@ class ActiveSortOrderTest < ActiveSupport::TestCase
67
75
 
68
76
  ### NIL & FALSE
69
77
  [nil, false].each do |v|
70
- sorted = PostWithBaseOrderA.order(a: :desc).sort_order(base_sort_order: v)
78
+ sorted = PostWithBaseOrderA.order(id: :asc).sort_order(base_sort_order: v)
71
79
 
72
80
  sorted.each_with_index do |item, i|
73
81
  assert_equal expected[i].id, item.id
@@ -113,4 +121,24 @@ class ActiveSortOrderTest < ActiveSupport::TestCase
113
121
  end
114
122
  end
115
123
 
124
+ def test_sort_on_multiple_fields
125
+ assert_equal Post.all.count, DATA[:posts].count
126
+
127
+ expected = DATA[:posts].sort_by{|item| [item.b, item.a] }
128
+
129
+ sorted = PostWithBaseOrderA.all.sort_order([:b, :a], :asc)
130
+
131
+ sorted.each_with_index do |item, i|
132
+ assert_equal expected[i].id, item.id
133
+ end
134
+
135
+ expected = DATA[:posts].sort_by{|item| [item.b, item.a] }.reverse
136
+
137
+ sorted = PostWithBaseOrderA.all.sort_order([:b, :a], :desc)
138
+
139
+ sorted.each_with_index do |item, i|
140
+ assert_equal expected[i].id, item.id
141
+ end
142
+ end
143
+
116
144
  end
@@ -2,10 +2,10 @@ require "test_helper"
2
2
 
3
3
  class ActiveSortOrderTest < ActiveSupport::TestCase
4
4
 
5
- def setup
5
+ setup do
6
6
  end
7
7
 
8
- def teardown
8
+ teardown do
9
9
  end
10
10
 
11
11
  def test_sort_str_errors
@@ -15,6 +15,8 @@ class ActiveSortOrderTest < ActiveSupport::TestCase
15
15
  :foo,
16
16
  nil,
17
17
  "",
18
+ [],
19
+ [:foo],
18
20
  ]
19
21
 
20
22
  valid.each do |v|
@@ -25,10 +27,13 @@ class ActiveSortOrderTest < ActiveSupport::TestCase
25
27
  invalid = [
26
28
  true,
27
29
  false,
28
- [],
29
30
  Object.new,
30
31
  ]
31
32
 
33
+ if RUBY_VERSION.to_f >= 3.0
34
+ invalid << {}
35
+ end
36
+
32
37
  invalid.each do |v|
33
38
  assert_raise ArgumentError do
34
39
  Post.sort_order(v, :asc).limit(1)
@@ -41,16 +46,18 @@ class ActiveSortOrderTest < ActiveSupport::TestCase
41
46
 
42
47
  ### TEST UNIQUE CASES
43
48
 
44
- ### HASH - this is allowed because its treated as keyword arguments
45
- Post.sort_order({}).limit(1)
49
+ if RUBY_VERSION.to_f < 3.0
50
+ ### HASH - this is allowed because its treated as keyword arguments
51
+ Post.sort_order({}).limit(1)
46
52
 
47
- assert_raise do
48
- Post.sort_order({}, :desc).limit(1)
53
+ assert_raise do
54
+ Post.sort_order({}, :desc).limit(1)
55
+ end
49
56
  end
50
57
  end
51
58
 
52
59
  def test_sort_direction_errors
53
- valid_directions = [
60
+ valid = [
54
61
  "ASC",
55
62
  "DESC",
56
63
  "ASC NULLS FIRST",
@@ -67,7 +74,7 @@ class ActiveSortOrderTest < ActiveSupport::TestCase
67
74
  "ASC\tNULLS\tFirst",
68
75
  ].freeze
69
76
 
70
- valid_directions.each do |direction|
77
+ valid.each do |direction|
71
78
  PostWithBaseOrderA.sort_order("x", direction).limit(1)
72
79
 
73
80
  if direction
@@ -81,15 +88,19 @@ class ActiveSortOrderTest < ActiveSupport::TestCase
81
88
  end
82
89
  end
83
90
 
84
- bad_directions = [
91
+ invalid = [
85
92
  false,
86
93
  true,
87
94
  Object.new,
88
95
  [],
89
96
  'ASCC',
90
- ].freeze
97
+ ]
98
+
99
+ if RUBY_VERSION.to_f >= 3.0
100
+ invalid << {}
101
+ end
91
102
 
92
- bad_directions.each do |direction|
103
+ invalid.each do |direction|
93
104
  assert_raise ArgumentError do
94
105
  PostWithBaseOrderA.sort_order("foobar", direction).limit(1)
95
106
  end
@@ -97,17 +108,22 @@ class ActiveSortOrderTest < ActiveSupport::TestCase
97
108
 
98
109
  ### TEST UNIQUE CASES
99
110
 
100
- ### HASH - this is allowed because its treated as keyword arguments
101
- Post.sort_order("foobar", {}).limit(1).to_sql.include?("foobar ASC")
111
+ if RUBY_VERSION.to_f < 3.0
112
+ ### HASH - this is allowed because its treated as keyword arguments
113
+ Post.sort_order("foobar", {}).limit(1).to_sql.include?("foobar ASC")
102
114
 
103
- assert_raise do
104
- Post.sort_order("foobar", {}, {}).limit(1)
115
+ assert_raise do
116
+ Post.sort_order("foobar", {}, {}).limit(1)
117
+ end
105
118
  end
106
119
  end
107
120
 
108
- def test_base_sort_order_errors
121
+ def test_argument_base_sort_order_errors
122
+ assert_not Post.respond_to?(:base_sort_order)
123
+
109
124
  valid = [
110
125
  nil,
126
+ true,
111
127
  false,
112
128
  "",
113
129
  "foobar",
@@ -129,8 +145,13 @@ class ActiveSortOrderTest < ActiveSupport::TestCase
129
145
  Post.sort_order(base_sort_order: v).limit(1)
130
146
  end
131
147
  end
148
+ end
149
+
150
+ def test_class_method_base_sort_order_errors
151
+ klass = PostWithVolatileBaseOrder
152
+
153
+ assert klass.respond_to?(:base_sort_order)
132
154
 
133
- ### INVALID BASE_SORT_ORDER CLASS
134
155
  valid = [
135
156
  nil,
136
157
  false,
@@ -140,15 +161,22 @@ class ActiveSortOrderTest < ActiveSupport::TestCase
140
161
 
141
162
  valid.each do |v|
142
163
  silence_warnings do
143
- PostWithVolatileBaseOrder.define_method :base_sort_order do
164
+ klass.define_singleton_method :base_sort_order do
144
165
  v
145
166
  end
146
167
  end
147
168
 
148
- PostWithVolatileBaseOrder.sort_order(base_sort_order: v).limit(1)
169
+ if v.nil?
170
+ assert_nil klass.base_sort_order
171
+ else
172
+ assert_equal v, klass.base_sort_order
173
+ end
174
+
175
+ klass.sort_order.limit(1)
149
176
  end
150
177
 
151
178
  invalid = [
179
+ true,
152
180
  :foobar,
153
181
  [],
154
182
  {},
@@ -157,13 +185,19 @@ class ActiveSortOrderTest < ActiveSupport::TestCase
157
185
 
158
186
  invalid.each do |v|
159
187
  silence_warnings do
160
- PostWithVolatileBaseOrder.define_method :base_sort_order do
188
+ klass.define_singleton_method :base_sort_order do
161
189
  v
162
190
  end
163
191
  end
164
192
 
193
+ if v.nil?
194
+ assert_nil klass.base_sort_order
195
+ else
196
+ assert_equal v, klass.base_sort_order
197
+ end
198
+
165
199
  assert_raise ArgumentError do
166
- PostWithVolatileBaseOrder.sort_order(base_sort_order: v).limit(1)
200
+ klass.sort_order.limit(1)
167
201
  end
168
202
  end
169
203
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_sort_order
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Weston Ganger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-29 00:00:00.000000000 Z
11
+ date: 2021-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,29 +16,16 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '5'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: railties
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- description: Dead simple, fully customizable sorting pattern for ActiveRecord.
26
+ version: '5'
27
+ description: The "easy-peasy" dynamic sorting pattern for ActiveRecord that your Rails
28
+ apps deserve.
42
29
  email:
43
30
  - weston@westonganger.com
44
31
  executables: []
@@ -64,7 +51,6 @@ files:
64
51
  - test/dummy_app/app/models/post_with_base_order_b.rb
65
52
  - test/dummy_app/app/models/post_with_base_order_b_and_a.rb
66
53
  - test/dummy_app/app/models/post_with_volatile_base_order.rb
67
- - test/dummy_app/app/models/test_helper.rb
68
54
  - test/dummy_app/app/views/layouts/application.html.erb
69
55
  - test/dummy_app/config.ru
70
56
  - test/dummy_app/config/application.rb
@@ -104,53 +90,53 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
90
  requirements:
105
91
  - - ">="
106
92
  - !ruby/object:Gem::Version
107
- version: 2.3.0
93
+ version: '0'
108
94
  required_rubygems_version: !ruby/object:Gem::Requirement
109
95
  requirements:
110
96
  - - ">="
111
97
  - !ruby/object:Gem::Version
112
98
  version: '0'
113
99
  requirements: []
114
- rubygems_version: 3.1.2
100
+ rubygems_version: 3.1.4
115
101
  signing_key:
116
102
  specification_version: 4
117
- summary: Dead simple, fully customizable sorting pattern for ActiveRecord.
103
+ summary: The "easy-peasy" dynamic sorting pattern for ActiveRecord that your Rails
104
+ apps deserve.
118
105
  test_files:
119
- - test/test_helper.rb
120
106
  - test/unit/active_sort_order_test.rb
121
107
  - test/unit/errors_test.rb
122
- - test/dummy_app/app/models/test_helper.rb
123
- - test/dummy_app/app/models/post_with_volatile_base_order.rb
124
- - test/dummy_app/app/models/post_with_base_order_a_and_b.rb
125
- - test/dummy_app/app/models/application_record.rb
108
+ - test/test_helper.rb
126
109
  - test/dummy_app/app/models/post_with_base_order_b_and_a.rb
127
110
  - test/dummy_app/app/models/post_with_base_order_a.rb
111
+ - test/dummy_app/app/models/post_with_base_order_a_and_b.rb
112
+ - test/dummy_app/app/models/post_with_volatile_base_order.rb
128
113
  - test/dummy_app/app/models/post_with_base_order_b.rb
114
+ - test/dummy_app/app/models/application_record.rb
129
115
  - test/dummy_app/app/models/post.rb
116
+ - test/dummy_app/app/controllers/application_controller.rb
130
117
  - test/dummy_app/app/views/layouts/application.html.erb
131
- - test/dummy_app/app/assets/stylesheets/application.css
132
118
  - test/dummy_app/app/assets/config/manifest.js
133
119
  - test/dummy_app/app/assets/javascripts/application.js
134
- - test/dummy_app/app/controllers/application_controller.rb
135
- - test/dummy_app/config.ru
136
- - test/dummy_app/log/test.log
137
- - test/dummy_app/config/database.yml
120
+ - test/dummy_app/app/assets/stylesheets/application.css
121
+ - test/dummy_app/config/secrets.yml
122
+ - test/dummy_app/config/routes.rb
123
+ - test/dummy_app/config/locales/en.yml
138
124
  - test/dummy_app/config/environments/production.rb
139
- - test/dummy_app/config/environments/test.rb
140
125
  - test/dummy_app/config/environments/development.rb
141
- - test/dummy_app/config/routes.rb
126
+ - test/dummy_app/config/environments/test.rb
142
127
  - test/dummy_app/config/environment.rb
143
- - test/dummy_app/config/locales/en.yml
128
+ - test/dummy_app/config/application.rb
129
+ - test/dummy_app/config/database.yml
144
130
  - test/dummy_app/config/boot.rb
145
- - test/dummy_app/config/initializers/secret_token.rb
146
- - test/dummy_app/config/initializers/inflections.rb
131
+ - test/dummy_app/config/initializers/backtrace_silencers.rb
147
132
  - test/dummy_app/config/initializers/mime_types.rb
148
133
  - test/dummy_app/config/initializers/session_store.rb
149
134
  - test/dummy_app/config/initializers/wrap_parameters.rb
150
- - test/dummy_app/config/initializers/backtrace_silencers.rb
151
- - test/dummy_app/config/secrets.yml
152
- - test/dummy_app/config/application.rb
135
+ - test/dummy_app/config/initializers/secret_token.rb
136
+ - test/dummy_app/config/initializers/inflections.rb
137
+ - test/dummy_app/config.ru
153
138
  - test/dummy_app/Rakefile
154
139
  - test/dummy_app/db/schema.rb
155
140
  - test/dummy_app/db/test.sqlite3
156
141
  - test/dummy_app/db/migrate/20210128155312_set_up_test_tables.rb
142
+ - test/dummy_app/log/test.log
File without changes