ajax-datatables-rails 1.3.0 → 1.4.0

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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +5 -23
  3. data/.github/workflows/ci.yml +16 -8
  4. data/.gitignore +6 -3
  5. data/.rubocop.yml +1 -1
  6. data/Appraisals +18 -25
  7. data/CHANGELOG.md +14 -0
  8. data/Gemfile +2 -0
  9. data/README.md +15 -15
  10. data/ajax-datatables-rails.gemspec +5 -2
  11. data/appraisal.yml +56 -0
  12. data/bin/bundle +114 -0
  13. data/bin/rackup +27 -0
  14. data/config.ru +7 -0
  15. data/doc/migrate.md +1 -1
  16. data/gemfiles/rails_5.2.8.gemfile +21 -0
  17. data/gemfiles/rails_6.0.6.gemfile +21 -0
  18. data/gemfiles/rails_6.1.7.gemfile +21 -0
  19. data/gemfiles/rails_7.0.4.gemfile +21 -0
  20. data/lib/ajax-datatables-rails/base.rb +21 -1
  21. data/lib/ajax-datatables-rails/datatable/column/search.rb +8 -8
  22. data/lib/ajax-datatables-rails/datatable/column.rb +10 -9
  23. data/lib/ajax-datatables-rails/datatable/datatable.rb +0 -1
  24. data/lib/ajax-datatables-rails/version.rb +1 -1
  25. data/spec/ajax-datatables-rails/base_spec.rb +39 -19
  26. data/spec/ajax-datatables-rails/datatable/column_spec.rb +30 -33
  27. data/spec/ajax-datatables-rails/datatable/datatable_spec.rb +12 -10
  28. data/spec/ajax-datatables-rails/datatable/simple_order_spec.rb +5 -3
  29. data/spec/ajax-datatables-rails/datatable/simple_search_spec.rb +4 -2
  30. data/spec/ajax-datatables-rails/orm/active_record_filter_records_spec.rb +109 -120
  31. data/spec/ajax-datatables-rails/orm/active_record_paginate_records_spec.rb +6 -4
  32. data/spec/ajax-datatables-rails/orm/active_record_sort_records_spec.rb +7 -5
  33. data/spec/dummy/app/assets/config/manifest.js +0 -0
  34. data/spec/dummy/config/database.yml +25 -0
  35. data/spec/dummy/config/routes.rb +5 -0
  36. data/spec/dummy/config/storage.yml +3 -0
  37. data/spec/{support → dummy/db}/schema.rb +3 -4
  38. data/spec/dummy/log/.gitignore +1 -0
  39. data/spec/dummy/public/favicon.ico +0 -0
  40. data/spec/factories/user.rb +3 -1
  41. data/spec/spec_helper.rb +32 -19
  42. data/spec/support/datatables/complex_datatable.rb +4 -0
  43. data/spec/support/datatables/complex_datatable_array.rb +2 -0
  44. data/spec/support/datatables/datatable_cond_date.rb +2 -0
  45. data/spec/support/datatables/datatable_cond_numeric.rb +2 -0
  46. data/spec/support/datatables/datatable_cond_proc.rb +2 -0
  47. data/spec/support/datatables/datatable_cond_string.rb +4 -2
  48. data/spec/support/datatables/datatable_cond_unknown.rb +2 -0
  49. data/spec/support/datatables/datatable_custom_column.rb +17 -0
  50. data/spec/support/datatables/datatable_order_nulls_last.rb +2 -0
  51. data/spec/support/helpers/params.rb +14 -6
  52. data/spec/support/models/user.rb +5 -0
  53. metadata +65 -12
  54. data/gemfiles/rails_5.2.4.gemfile +0 -11
  55. data/gemfiles/rails_6.0.3.gemfile +0 -11
  56. data/gemfiles/rails_6.1.0.gemfile +0 -11
  57. data/spec/ajax-datatables-rails/orm/active_record_spec.rb +0 -24
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- describe AjaxDatatablesRails::ORM::ActiveRecord do
5
+ RSpec.describe AjaxDatatablesRails::ORM::ActiveRecord do
4
6
 
5
7
  let(:datatable) { ComplexDatatable.new(sample_params) }
6
8
  let(:records) { User.all }
7
9
 
8
10
  describe '#filter_records' do
9
11
  it 'requires a records collection as argument' do
10
- expect { datatable.filter_records() }.to raise_error(ArgumentError)
12
+ expect { datatable.filter_records }.to raise_error(ArgumentError)
11
13
  end
12
14
 
13
15
  it 'performs a simple search first' do
@@ -24,14 +26,14 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
24
26
  end
25
27
 
26
28
  describe '#build_conditions' do
27
- before(:each) do
29
+ before do
28
30
  create(:user, username: 'johndoe', email: 'johndoe@example.com')
29
31
  create(:user, username: 'msmith', email: 'mary.smith@example.com')
30
32
  create(:user, username: 'hsmith', email: 'henry.smith@example.net')
31
33
  end
32
34
 
33
35
  context 'with column and global search' do
34
- before(:each) do
36
+ before do
35
37
  datatable.params[:search] = { value: 'example.com', regex: 'false' }
36
38
  datatable.params[:columns]['0'][:search][:value] = 'smith'
37
39
  end
@@ -47,7 +49,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
47
49
  end
48
50
 
49
51
  describe '#build_conditions_for_datatable' do
50
- before(:each) do
52
+ before do
51
53
  create(:user, username: 'johndoe', email: 'johndoe@example.com')
52
54
  create(:user, username: 'msmith', email: 'mary.smith@example.com')
53
55
  end
@@ -66,12 +68,12 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
66
68
  end
67
69
 
68
70
  context 'when none of columns are connected' do
69
- before(:each) do
71
+ before do
70
72
  allow(datatable).to receive(:searchable_columns) { [] }
71
73
  end
72
74
 
73
75
  context 'when search value is a string' do
74
- before(:each) do
76
+ before do
75
77
  datatable.params[:search] = { value: 'msmith' }
76
78
  end
77
79
 
@@ -87,7 +89,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
87
89
  end
88
90
 
89
91
  context 'when search value is space-separated string' do
90
- before(:each) do
92
+ before do
91
93
  datatable.params[:search] = { value: 'foo bar' }
92
94
  end
93
95
 
@@ -105,7 +107,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
105
107
 
106
108
  context 'with search query' do
107
109
  context 'when search value is a string' do
108
- before(:each) do
110
+ before do
109
111
  datatable.params[:search] = { value: 'john', regex: 'false' }
110
112
  end
111
113
 
@@ -118,7 +120,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
118
120
  end
119
121
 
120
122
  context 'when search value is space-separated string' do
121
- before(:each) do
123
+ before do
122
124
  datatable.params[:search] = { value: 'john doe', regex: 'false' }
123
125
  end
124
126
 
@@ -134,7 +136,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
134
136
  context 'when column.search_query returns nil' do
135
137
  let(:datatable) { DatatableCondUnknown.new(sample_params) }
136
138
 
137
- before(:each) do
139
+ before do
138
140
  datatable.params[:search] = { value: 'john doe', regex: 'false' }
139
141
  end
140
142
 
@@ -150,7 +152,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
150
152
  end
151
153
 
152
154
  describe '#build_conditions_for_selected_columns' do
153
- before(:each) do
155
+ before do
154
156
  create(:user, username: 'johndoe', email: 'johndoe@example.com')
155
157
  create(:user, username: 'msmith', email: 'mary.smith@example.com')
156
158
  end
@@ -166,7 +168,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
166
168
  expect(result).to be_a(Arel::Nodes::And)
167
169
  end
168
170
 
169
- if ENV['DB_ADAPTER'] == 'postgresql'
171
+ if RunningSpec.postgresql?
170
172
  context 'when db_adapter is postgresql' do
171
173
  it 'can call #to_sql on returned object' do
172
174
  result = datatable.build_conditions_for_selected_columns
@@ -178,7 +180,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
178
180
  end
179
181
  end
180
182
 
181
- if ENV['DB_ADAPTER'] == 'oracle_enhanced'
183
+ if RunningSpec.oracle?
182
184
  context 'when db_adapter is oracle' do
183
185
  it 'can call #to_sql on returned object' do
184
186
  result = datatable.build_conditions_for_selected_columns
@@ -190,7 +192,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
190
192
  end
191
193
  end
192
194
 
193
- if ENV['DB_ADAPTER'] == 'mysql2'
195
+ if RunningSpec.mysql?
194
196
  context 'when db_adapter is mysql2' do
195
197
  it 'can call #to_sql on returned object' do
196
198
  result = datatable.build_conditions_for_selected_columns
@@ -209,7 +211,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
209
211
  end
210
212
 
211
213
  context 'with search values in columns' do
212
- before(:each) do
214
+ before do
213
215
  datatable.params[:columns]['0'][:search][:value] = 'doe'
214
216
  end
215
217
 
@@ -227,14 +229,14 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
227
229
  describe 'it can filter records with condition :date_range' do
228
230
  let(:datatable) { DatatableCondDate.new(sample_params) }
229
231
 
230
- before(:each) do
232
+ before do
231
233
  create(:user, username: 'johndoe', email: 'johndoe@example.com', last_name: 'Doe', created_at: '01/01/2000')
232
234
  create(:user, username: 'msmith', email: 'mary.smith@example.com', last_name: 'Smith', created_at: '01/02/2000')
233
235
  end
234
236
 
235
237
  context 'when range is empty' do
236
- it 'should not filter records' do
237
- datatable.params[:columns]['5'][:search][:value] = '-'
238
+ it 'does not filter records' do
239
+ datatable.params[:columns]['6'][:search][:value] = '-'
238
240
  expect(datatable.data.size).to eq 2
239
241
  item = datatable.data.first
240
242
  expect(item[:last_name]).to eq 'Doe'
@@ -242,31 +244,31 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
242
244
  end
243
245
 
244
246
  context 'when start date is filled' do
245
- it 'should filter records created after this date' do
246
- datatable.params[:columns]['5'][:search][:value] = '31/12/1999-'
247
+ it 'filters records created after this date' do
248
+ datatable.params[:columns]['6'][:search][:value] = '31/12/1999-'
247
249
  expect(datatable.data.size).to eq 2
248
250
  end
249
251
  end
250
252
 
251
253
  context 'when end date is filled' do
252
- it 'should filter records created before this date' do
253
- datatable.params[:columns]['5'][:search][:value] = '-31/12/1999'
254
+ it 'filters records created before this date' do
255
+ datatable.params[:columns]['6'][:search][:value] = '-31/12/1999'
254
256
  expect(datatable.data.size).to eq 0
255
257
  end
256
258
  end
257
259
 
258
260
  context 'when both date are filled' do
259
- it 'should filter records created between the range' do
260
- datatable.params[:columns]['5'][:search][:value] = '01/12/1999-15/01/2000'
261
+ it 'filters records created between the range' do
262
+ datatable.params[:columns]['6'][:search][:value] = '01/12/1999-15/01/2000'
261
263
  expect(datatable.data.size).to eq 1
262
264
  end
263
265
  end
264
266
 
265
267
  context 'when another filter is active' do
266
268
  context 'when range is empty' do
267
- it 'should filter records' do
269
+ it 'filters records' do
268
270
  datatable.params[:columns]['0'][:search][:value] = 'doe'
269
- datatable.params[:columns]['5'][:search][:value] = '-'
271
+ datatable.params[:columns]['6'][:search][:value] = '-'
270
272
  expect(datatable.data.size).to eq 1
271
273
  item = datatable.data.first
272
274
  expect(item[:last_name]).to eq 'Doe'
@@ -274,9 +276,9 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
274
276
  end
275
277
 
276
278
  context 'when start date is filled' do
277
- it 'should filter records' do
279
+ it 'filters records' do
278
280
  datatable.params[:columns]['0'][:search][:value] = 'doe'
279
- datatable.params[:columns]['5'][:search][:value] = '01/12/1999-'
281
+ datatable.params[:columns]['6'][:search][:value] = '01/12/1999-'
280
282
  expect(datatable.data.size).to eq 1
281
283
  item = datatable.data.first
282
284
  expect(item[:last_name]).to eq 'Doe'
@@ -284,9 +286,9 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
284
286
  end
285
287
 
286
288
  context 'when end date is filled' do
287
- it 'should filter records' do
289
+ it 'filters records' do
288
290
  datatable.params[:columns]['0'][:search][:value] = 'doe'
289
- datatable.params[:columns]['5'][:search][:value] = '-15/01/2000'
291
+ datatable.params[:columns]['6'][:search][:value] = '-15/01/2000'
290
292
  expect(datatable.data.size).to eq 1
291
293
  item = datatable.data.first
292
294
  expect(item[:last_name]).to eq 'Doe'
@@ -294,9 +296,9 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
294
296
  end
295
297
 
296
298
  context 'when both date are filled' do
297
- it 'should filter records' do
299
+ it 'filters records' do
298
300
  datatable.params[:columns]['0'][:search][:value] = 'doe'
299
- datatable.params[:columns]['5'][:search][:value] = '01/12/1999-15/01/2000'
301
+ datatable.params[:columns]['6'][:search][:value] = '01/12/1999-15/01/2000'
300
302
  expect(datatable.data.size).to eq 1
301
303
  item = datatable.data.first
302
304
  expect(item[:last_name]).to eq 'Doe'
@@ -307,16 +309,16 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
307
309
  end
308
310
 
309
311
  context 'numeric condition' do
312
+ before do
313
+ create(:user, first_name: 'john', post_id: 1)
314
+ create(:user, first_name: 'mary', post_id: 2)
315
+ end
316
+
310
317
  describe 'it can filter records with condition :eq' do
311
318
  let(:datatable) { DatatableCondEq.new(sample_params) }
312
319
 
313
- before(:each) do
314
- create(:user, first_name: 'john', post_id: 1)
315
- create(:user, first_name: 'mary', post_id: 2)
316
- end
317
-
318
- it 'should filter records matching' do
319
- datatable.params[:columns]['4'][:search][:value] = 1
320
+ it 'filters records matching' do
321
+ datatable.params[:columns]['5'][:search][:value] = 1
320
322
  expect(datatable.data.size).to eq 1
321
323
  item = datatable.data.first
322
324
  expect(item[:first_name]).to eq 'john'
@@ -326,13 +328,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
326
328
  describe 'it can filter records with condition :not_eq' do
327
329
  let(:datatable) { DatatableCondNotEq.new(sample_params) }
328
330
 
329
- before(:each) do
330
- create(:user, first_name: 'john', post_id: 1)
331
- create(:user, first_name: 'mary', post_id: 2)
332
- end
333
-
334
- it 'should filter records matching' do
335
- datatable.params[:columns]['4'][:search][:value] = 1
331
+ it 'filters records matching' do
332
+ datatable.params[:columns]['5'][:search][:value] = 1
336
333
  expect(datatable.data.size).to eq 1
337
334
  item = datatable.data.first
338
335
  expect(item[:first_name]).to eq 'mary'
@@ -342,13 +339,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
342
339
  describe 'it can filter records with condition :lt' do
343
340
  let(:datatable) { DatatableCondLt.new(sample_params) }
344
341
 
345
- before(:each) do
346
- create(:user, first_name: 'john', post_id: 1)
347
- create(:user, first_name: 'mary', post_id: 2)
348
- end
349
-
350
- it 'should filter records matching' do
351
- datatable.params[:columns]['4'][:search][:value] = 2
342
+ it 'filters records matching' do
343
+ datatable.params[:columns]['5'][:search][:value] = 2
352
344
  expect(datatable.data.size).to eq 1
353
345
  item = datatable.data.first
354
346
  expect(item[:first_name]).to eq 'john'
@@ -358,13 +350,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
358
350
  describe 'it can filter records with condition :gt' do
359
351
  let(:datatable) { DatatableCondGt.new(sample_params) }
360
352
 
361
- before(:each) do
362
- create(:user, first_name: 'john', post_id: 1)
363
- create(:user, first_name: 'mary', post_id: 2)
364
- end
365
-
366
- it 'should filter records matching' do
367
- datatable.params[:columns]['4'][:search][:value] = 1
353
+ it 'filters records matching' do
354
+ datatable.params[:columns]['5'][:search][:value] = 1
368
355
  expect(datatable.data.size).to eq 1
369
356
  item = datatable.data.first
370
357
  expect(item[:first_name]).to eq 'mary'
@@ -374,13 +361,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
374
361
  describe 'it can filter records with condition :lteq' do
375
362
  let(:datatable) { DatatableCondLteq.new(sample_params) }
376
363
 
377
- before(:each) do
378
- create(:user, first_name: 'john', post_id: 1)
379
- create(:user, first_name: 'mary', post_id: 2)
380
- end
381
-
382
- it 'should filter records matching' do
383
- datatable.params[:columns]['4'][:search][:value] = 2
364
+ it 'filters records matching' do
365
+ datatable.params[:columns]['5'][:search][:value] = 2
384
366
  expect(datatable.data.size).to eq 2
385
367
  end
386
368
  end
@@ -388,13 +370,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
388
370
  describe 'it can filter records with condition :gteq' do
389
371
  let(:datatable) { DatatableCondGteq.new(sample_params) }
390
372
 
391
- before(:each) do
392
- create(:user, first_name: 'john', post_id: 1)
393
- create(:user, first_name: 'mary', post_id: 2)
394
- end
395
-
396
- it 'should filter records matching' do
397
- datatable.params[:columns]['4'][:search][:value] = 1
373
+ it 'filters records matching' do
374
+ datatable.params[:columns]['5'][:search][:value] = 1
398
375
  expect(datatable.data.size).to eq 2
399
376
  end
400
377
  end
@@ -402,13 +379,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
402
379
  describe 'it can filter records with condition :in' do
403
380
  let(:datatable) { DatatableCondIn.new(sample_params) }
404
381
 
405
- before(:each) do
406
- create(:user, first_name: 'john', post_id: 1)
407
- create(:user, first_name: 'mary', post_id: 2)
408
- end
409
-
410
- it 'should filter records matching' do
411
- datatable.params[:columns]['4'][:search][:value] = [1]
382
+ it 'filters records matching' do
383
+ datatable.params[:columns]['5'][:search][:value] = [1]
412
384
  expect(datatable.data.size).to eq 1
413
385
  item = datatable.data.first
414
386
  expect(item[:first_name]).to eq 'john'
@@ -418,14 +390,9 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
418
390
  describe 'it can filter records with condition :in with regex' do
419
391
  let(:datatable) { DatatableCondInWithRegex.new(sample_params) }
420
392
 
421
- before(:each) do
422
- create(:user, first_name: 'john', post_id: 1)
423
- create(:user, first_name: 'mary', post_id: 2)
424
- end
425
-
426
- it 'should filter records matching' do
427
- datatable.params[:columns]['4'][:search][:value] = '1|2'
428
- datatable.params[:order]['0'] = { column: '4', dir: 'asc' }
393
+ it 'filters records matching' do
394
+ datatable.params[:columns]['5'][:search][:value] = '1|2'
395
+ datatable.params[:order]['0'] = { column: '5', dir: 'asc' }
429
396
  expect(datatable.data.size).to eq 2
430
397
  item = datatable.data.first
431
398
  expect(item[:first_name]).to eq 'john'
@@ -434,27 +401,27 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
434
401
 
435
402
  describe 'Integer overflows' do
436
403
  let(:datatable) { DatatableCondEq.new(sample_params) }
437
- let(:largest_postgresql_integer_value) { 2147483647 }
438
- let(:smallest_postgresql_integer_value) { -2147483648 }
404
+ let(:largest_postgresql_integer_value) { 2_147_483_647 }
405
+ let(:smallest_postgresql_integer_value) { -2_147_483_648 }
439
406
 
440
- before(:each) do
407
+ before do
441
408
  create(:user, first_name: 'john', post_id: 1)
442
409
  create(:user, first_name: 'mary', post_id: 2)
443
410
  create(:user, first_name: 'phil', post_id: largest_postgresql_integer_value)
444
411
  end
445
412
 
446
- it 'Returns an empty result if input value is too large' do
447
- datatable.params[:columns]['4'][:search][:value] = largest_postgresql_integer_value + 1
413
+ it 'returns an empty result if input value is too large' do
414
+ datatable.params[:columns]['5'][:search][:value] = largest_postgresql_integer_value + 1
448
415
  expect(datatable.data.size).to eq 0
449
416
  end
450
417
 
451
- it 'Returns an empty result if input value is too small' do
452
- datatable.params[:columns]['4'][:search][:value] = smallest_postgresql_integer_value - 1
418
+ it 'returns an empty result if input value is too small' do
419
+ datatable.params[:columns]['5'][:search][:value] = smallest_postgresql_integer_value - 1
453
420
  expect(datatable.data.size).to eq 0
454
421
  end
455
422
 
456
423
  it 'returns the matching user' do
457
- datatable.params[:columns]['4'][:search][:value] = largest_postgresql_integer_value
424
+ datatable.params[:columns]['5'][:search][:value] = largest_postgresql_integer_value
458
425
  expect(datatable.data.size).to eq 1
459
426
  end
460
427
  end
@@ -464,13 +431,13 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
464
431
  describe 'it can filter records with lambda/proc condition' do
465
432
  let(:datatable) { DatatableCondProc.new(sample_params) }
466
433
 
467
- before(:each) do
434
+ before do
468
435
  create(:user, username: 'johndoe', email: 'johndoe@example.com')
469
436
  create(:user, username: 'johndie', email: 'johndie@example.com')
470
437
  create(:user, username: 'msmith', email: 'mary.smith@example.com')
471
438
  end
472
439
 
473
- it 'should filter records matching' do
440
+ it 'filters records matching' do
474
441
  datatable.params[:columns]['0'][:search][:value] = 'john'
475
442
  expect(datatable.data.size).to eq 2
476
443
  item = datatable.data.first
@@ -483,12 +450,12 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
483
450
  describe 'it can filter records with condition :start_with' do
484
451
  let(:datatable) { DatatableCondStartWith.new(sample_params) }
485
452
 
486
- before(:each) do
453
+ before do
487
454
  create(:user, first_name: 'John')
488
455
  create(:user, first_name: 'Mary')
489
456
  end
490
457
 
491
- it 'should filter records matching' do
458
+ it 'filters records matching' do
492
459
  datatable.params[:columns]['2'][:search][:value] = 'Jo'
493
460
  expect(datatable.data.size).to eq 1
494
461
  item = datatable.data.first
@@ -499,14 +466,14 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
499
466
  describe 'it can filter records with condition :end_with' do
500
467
  let(:datatable) { DatatableCondEndWith.new(sample_params) }
501
468
 
502
- before(:each) do
469
+ before do
503
470
  create(:user, last_name: 'JOHN')
504
471
  create(:user, last_name: 'MARY')
505
472
  end
506
473
 
507
- if ENV['DB_ADAPTER'] == 'oracle_enhanced'
474
+ if RunningSpec.oracle?
508
475
  context 'when db_adapter is oracleenhanced' do
509
- it 'should filter records matching' do
476
+ it 'filters records matching' do
510
477
  datatable.params[:columns]['3'][:search][:value] = 'RY'
511
478
  expect(datatable.data.size).to eq 1
512
479
  item = datatable.data.first
@@ -514,7 +481,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
514
481
  end
515
482
  end
516
483
  else
517
- it 'should filter records matching' do
484
+ it 'filters records matching' do
518
485
  datatable.params[:columns]['3'][:search][:value] = 'ry'
519
486
  expect(datatable.data.size).to eq 1
520
487
  item = datatable.data.first
@@ -526,12 +493,12 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
526
493
  describe 'it can filter records with condition :like' do
527
494
  let(:datatable) { DatatableCondLike.new(sample_params) }
528
495
 
529
- before(:each) do
496
+ before do
530
497
  create(:user, email: 'john@foo.com')
531
498
  create(:user, email: 'mary@bar.com')
532
499
  end
533
500
 
534
- it 'should filter records matching' do
501
+ it 'filters records matching' do
535
502
  datatable.params[:columns]['1'][:search][:value] = 'foo'
536
503
  expect(datatable.data.size).to eq 1
537
504
  item = datatable.data.first
@@ -542,12 +509,12 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
542
509
  describe 'it can filter records with condition :string_eq' do
543
510
  let(:datatable) { DatatableCondStringEq.new(sample_params) }
544
511
 
545
- before(:each) do
512
+ before do
546
513
  create(:user, email: 'john@foo.com')
547
514
  create(:user, email: 'mary@bar.com')
548
515
  end
549
516
 
550
- it 'should filter records matching' do
517
+ it 'filters records matching' do
551
518
  datatable.params[:columns]['1'][:search][:value] = 'john@foo.com'
552
519
  expect(datatable.data.size).to eq 1
553
520
  item = datatable.data.first
@@ -558,20 +525,20 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
558
525
  describe 'it can filter records with condition :string_in' do
559
526
  let(:datatable) { DatatableCondStringIn.new(sample_params) }
560
527
 
561
- before(:each) do
528
+ before do
562
529
  create(:user, email: 'john@foo.com')
563
530
  create(:user, email: 'mary@bar.com')
564
531
  create(:user, email: 'henry@baz.com')
565
532
  end
566
533
 
567
- it 'should filter records matching' do
534
+ it 'filters records matching' do
568
535
  datatable.params[:columns]['1'][:search][:value] = 'john@foo.com'
569
536
  expect(datatable.data.size).to eq 1
570
537
  item = datatable.data.first
571
538
  expect(item[:email]).to eq 'john@foo.com'
572
539
  end
573
540
 
574
- it 'should filter records matching with multiple' do
541
+ it 'filters records matching with multiple' do
575
542
  datatable.params[:columns]['1'][:search][:value] = 'john@foo.com|henry@baz.com'
576
543
  expect(datatable.data.size).to eq 2
577
544
  items = datatable.data.sort_by { |h| h[:email] }
@@ -581,7 +548,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
581
548
  expect(item_last[:email]).to eq 'john@foo.com'
582
549
  end
583
550
 
584
- it 'should filter records matching with multiple contains not found' do
551
+ it 'filters records matching with multiple contains not found' do
585
552
  datatable.params[:columns]['1'][:search][:value] = 'john@foo.com|henry_not@baz.com'
586
553
  expect(datatable.data.size).to eq 1
587
554
  item = datatable.data.first
@@ -592,13 +559,13 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
592
559
  describe 'it can filter records with condition :null_value' do
593
560
  let(:datatable) { DatatableCondNullValue.new(sample_params) }
594
561
 
595
- before(:each) do
562
+ before do
596
563
  create(:user, first_name: 'john', email: 'foo@bar.com')
597
564
  create(:user, first_name: 'mary', email: nil)
598
565
  end
599
566
 
600
567
  context 'when condition is NULL' do
601
- it 'should filter records matching' do
568
+ it 'filters records matching' do
602
569
  datatable.params[:columns]['1'][:search][:value] = 'NULL'
603
570
  expect(datatable.data.size).to eq 1
604
571
  item = datatable.data.first
@@ -607,7 +574,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
607
574
  end
608
575
 
609
576
  context 'when condition is !NULL' do
610
- it 'should filter records matching' do
577
+ it 'filters records matching' do
611
578
  datatable.params[:columns]['1'][:search][:value] = '!NULL'
612
579
  expect(datatable.data.size).to eq 1
613
580
  item = datatable.data.first
@@ -620,22 +587,44 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
620
587
  context 'unknown condition' do
621
588
  let(:datatable) { DatatableCondUnknown.new(sample_params) }
622
589
 
623
- before(:each) do
590
+ before do
624
591
  datatable.params[:search] = { value: 'john doe', regex: 'false' }
625
592
  end
626
593
 
627
- it 'should raise error' do
594
+ it 'raises error' do
628
595
  expect {
629
596
  datatable.data.size
630
597
  }.to raise_error(AjaxDatatablesRails::Error::InvalidSearchCondition).with_message('foo')
631
598
  end
632
599
  end
600
+
601
+ context 'custom column' do
602
+ describe 'it can filter records with custom column' do
603
+ let(:datatable) { DatatableCustomColumn.new(sample_params) }
604
+
605
+ before do
606
+ create(:user, username: 'msmith', email: 'mary.smith@example.com', first_name: 'Mary', last_name: 'Smith')
607
+ create(:user, username: 'jsmith', email: 'john.smith@example.com', first_name: 'John', last_name: 'Smith')
608
+ create(:user, username: 'johndoe', email: 'johndoe@example.com', first_name: 'John', last_name: 'Doe')
609
+ end
610
+
611
+ it 'filters records' do
612
+ skip('unsupported database adapter') if RunningSpec.oracle? || RunningSpec.sqlite?
613
+
614
+ datatable.params[:columns]['4'][:search][:value] = 'John'
615
+ datatable.params[:order]['0'][:column] = '4'
616
+ expect(datatable.data.size).to eq 2
617
+ item = datatable.data.first
618
+ expect(item[:full_name]).to eq 'John Doe'
619
+ end
620
+ end
621
+ end
633
622
  end
634
623
 
635
624
  describe 'formatter option' do
636
625
  let(:datatable) { DatatableWithFormater.new(sample_params) }
637
626
 
638
- before(:each) do
627
+ before do
639
628
  create(:user, username: 'johndoe', email: 'johndoe@example.com', last_name: 'DOE')
640
629
  create(:user, username: 'msmith', email: 'mary.smith@example.com', last_name: 'SMITH')
641
630
  datatable.params[:columns]['3'][:search][:value] = 'doe'
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- describe AjaxDatatablesRails::ORM::ActiveRecord do
5
+ RSpec.describe AjaxDatatablesRails::ORM::ActiveRecord do
4
6
 
5
7
  let(:datatable) { ComplexDatatable.new(sample_params) }
6
8
  let(:records) { User.all }
7
9
 
8
- before(:each) do
10
+ before do
9
11
  create(:user, username: 'johndoe', email: 'johndoe@example.com')
10
12
  create(:user, username: 'msmith', email: 'mary.smith@example.com')
11
13
  end
@@ -16,7 +18,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
16
18
  end
17
19
 
18
20
  it 'paginates records properly' do
19
- if ENV['DB_ADAPTER'] == 'oracle_enhanced'
21
+ if RunningSpec.oracle?
20
22
  if Rails.version.in? %w[4.2.11]
21
23
  expect(datatable.paginate_records(records).to_sql).to include(
22
24
  'rownum <= 10'
@@ -34,7 +36,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
34
36
 
35
37
  datatable.params[:start] = '26'
36
38
  datatable.params[:length] = '25'
37
- if ENV['DB_ADAPTER'] == 'oracle_enhanced'
39
+ if RunningSpec.oracle?
38
40
  if Rails.version.in? %w[4.2.11]
39
41
  expect(datatable.paginate_records(records).to_sql).to include(
40
42
  'rownum <= 51'
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- describe AjaxDatatablesRails::ORM::ActiveRecord do
5
+ RSpec.describe AjaxDatatablesRails::ORM::ActiveRecord do
4
6
 
5
7
  let(:datatable) { ComplexDatatable.new(sample_params) }
6
8
  let(:nulls_last_datatable) { DatatableOrderNullsLast.new(sample_params) }
7
9
  let(:records) { User.all }
8
10
 
9
- before(:each) do
11
+ before do
10
12
  create(:user, username: 'johndoe', email: 'johndoe@example.com')
11
13
  create(:user, username: 'msmith', email: 'mary.smith@example.com')
12
14
  end
@@ -30,7 +32,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
30
32
  )
31
33
  end
32
34
 
33
- it 'should not sort a column which is not orderable' do
35
+ it 'does not sort a column which is not orderable' do
34
36
  datatable.params[:order]['0'] = { column: '0', dir: 'asc' }
35
37
  datatable.params[:order]['1'] = { column: '4', dir: 'desc' }
36
38
 
@@ -49,7 +51,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
49
51
  after { datatable.nulls_last = false }
50
52
 
51
53
  it 'can handle multiple sorting columns' do
52
- skip('unsupported database adapter') if ENV['DB_ADAPTER'] == 'oracle_enhanced'
54
+ skip('unsupported database adapter') if RunningSpec.oracle?
53
55
 
54
56
  # set to order by Users username in ascending order, and
55
57
  # by Users email in descending order
@@ -63,7 +65,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
63
65
 
64
66
  describe '#sort_records with nulls last using column config' do
65
67
  it 'can handle multiple sorting columns' do
66
- skip('unsupported database adapter') if ENV['DB_ADAPTER'] == 'oracle_enhanced'
68
+ skip('unsupported database adapter') if RunningSpec.oracle?
67
69
 
68
70
  # set to order by Users username in ascending order, and
69
71
  # by Users email in descending order
File without changes