ajax-datatables-rails 0.4.1 → 0.4.2
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/ajax-datatables-rails/datatable/column/search.rb +25 -1
- data/lib/ajax-datatables-rails/version.rb +1 -1
- data/spec/ajax-datatables-rails/orm/active_record_filter_records_spec.rb +44 -0
- data/spec/support/datatable_cond_numeric.rb +10 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2064c07e3bb12f0a75c6dc7836a55bc4dd867346b14a94201d44cda7bd79acb
|
4
|
+
data.tar.gz: c22548d1c62ffc8a80c93dc4b5d22bd6de5fd31fc6cd97b6fc06fc4a6e7689ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da9707d5d8c8b8af19739f6286b5c3e7eef88b59482975f209ff4f6cf5296fed91ed512a5f8802e81ca6ec58e140d15c7598748cae0c75db06adf9a5c797e7d8
|
7
|
+
data.tar.gz: 6bfb29fa4b4ffb222a144acfa378947edc7112e180968ddf10807ba4c63e9f77ce10fe784782273a6f119c0c9e077ec5ef987321f20e4f96de5369c6ce843365
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 0.4.2 (2018-05-11)
|
4
|
+
|
5
|
+
* Fix: Integer out of range [PR #289](https://github.com/jbox-web/ajax-datatables-rails/pull/289) from [PR #284](https://github.com/jbox-web/ajax-datatables-rails/pull/284)
|
6
|
+
|
3
7
|
## 0.4.1 (2018-05-06)
|
4
8
|
|
5
9
|
* Fix: Restore behavior of #filter method [Comment](https://github.com/jbox-web/ajax-datatables-rails/commit/07795fd26849ff1b3b567f4ce967f722907a45be#comments)
|
@@ -5,6 +5,9 @@ module AjaxDatatablesRails
|
|
5
5
|
class Column
|
6
6
|
module Search
|
7
7
|
|
8
|
+
SMALLEST_PQ_INTEGER = -2147483648
|
9
|
+
LARGEST_PQ_INTEGER = 2147483647
|
10
|
+
|
8
11
|
def searchable?
|
9
12
|
@view_column.fetch(:searchable, true)
|
10
13
|
end
|
@@ -54,7 +57,7 @@ module AjaxDatatablesRails
|
|
54
57
|
when Proc
|
55
58
|
filter
|
56
59
|
when :eq, :not_eq, :lt, :gt, :lteq, :gteq, :in
|
57
|
-
numeric_search
|
60
|
+
is_searchable_integer? ? numeric_search : empty_search
|
58
61
|
when :null_value
|
59
62
|
null_value_search
|
60
63
|
when :start_with
|
@@ -82,6 +85,27 @@ module AjaxDatatablesRails
|
|
82
85
|
end
|
83
86
|
end
|
84
87
|
|
88
|
+
def empty_search
|
89
|
+
casted_column.matches('')
|
90
|
+
end
|
91
|
+
|
92
|
+
def is_searchable_integer?
|
93
|
+
if formated_value.is_a?(Array)
|
94
|
+
valids = formated_value.map { |v| is_integer?(v) && !is_out_of_range?(v) }
|
95
|
+
!valids.include?(false)
|
96
|
+
else
|
97
|
+
is_integer?(formated_value) && !is_out_of_range?(formated_value)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def is_out_of_range?(search_value)
|
102
|
+
Integer(search_value) > LARGEST_PQ_INTEGER || Integer(search_value) < SMALLEST_PQ_INTEGER
|
103
|
+
end
|
104
|
+
|
105
|
+
def is_integer?(string)
|
106
|
+
true if Integer(string) rescue false
|
107
|
+
end
|
108
|
+
|
85
109
|
end
|
86
110
|
end
|
87
111
|
end
|
@@ -494,5 +494,49 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
|
|
494
494
|
expect(item[:first_name]).to eq 'john'
|
495
495
|
end
|
496
496
|
end
|
497
|
+
|
498
|
+
describe 'it can filter records with condition :in with regex' do
|
499
|
+
let(:datatable) { DatatableCondInWithRegex.new(view) }
|
500
|
+
|
501
|
+
before(:each) do
|
502
|
+
create(:user, first_name: 'john', post_id: 1)
|
503
|
+
create(:user, first_name: 'mary', post_id: 2)
|
504
|
+
end
|
505
|
+
|
506
|
+
it 'should filter records matching' do
|
507
|
+
datatable.params[:columns]['4'][:search][:value] = '1|2'
|
508
|
+
datatable.params[:order]['0'] = { column: '4', dir: 'asc' }
|
509
|
+
expect(datatable.data.size).to eq 2
|
510
|
+
item = datatable.data.first
|
511
|
+
expect(item[:first_name]).to eq 'john'
|
512
|
+
end
|
513
|
+
end
|
514
|
+
|
515
|
+
describe 'Integer overflows' do
|
516
|
+
let(:datatable) { DatatableCondEq.new(view) }
|
517
|
+
let(:largest_postgresql_integer_value) { 2147483647 }
|
518
|
+
let(:smallest_postgresql_integer_value) { -2147483648 }
|
519
|
+
|
520
|
+
before(:each) do
|
521
|
+
create(:user, first_name: 'john', post_id: 1)
|
522
|
+
create(:user, first_name: 'mary', post_id: 2)
|
523
|
+
create(:user, first_name: 'phil', post_id: largest_postgresql_integer_value)
|
524
|
+
end
|
525
|
+
|
526
|
+
it 'Returns an empty result if input value is too large' do
|
527
|
+
datatable.params[:columns]['4'][:search][:value] = largest_postgresql_integer_value + 1
|
528
|
+
expect(datatable.data.size).to eq 0
|
529
|
+
end
|
530
|
+
|
531
|
+
it 'Returns an empty result if input value is too small' do
|
532
|
+
datatable.params[:columns]['4'][:search][:value] = smallest_postgresql_integer_value - 1
|
533
|
+
expect(datatable.data.size).to eq 0
|
534
|
+
end
|
535
|
+
|
536
|
+
it 'returns the matching user' do
|
537
|
+
datatable.params[:columns]['4'][:search][:value] = largest_postgresql_integer_value
|
538
|
+
expect(datatable.data.size).to eq 1
|
539
|
+
end
|
540
|
+
end
|
497
541
|
end
|
498
542
|
end
|
@@ -39,3 +39,13 @@ class DatatableCondIn < ComplexDatatable
|
|
39
39
|
super.deep_merge(post_id: { cond: :in })
|
40
40
|
end
|
41
41
|
end
|
42
|
+
|
43
|
+
class DatatableCondInWithRegex < DatatableCondIn
|
44
|
+
def view_columns
|
45
|
+
super.deep_merge(post_id: { cond: :in, use_regex: false, orderable: true, formater: ->(str) { cast_regex_value(str) } })
|
46
|
+
end
|
47
|
+
|
48
|
+
def cast_regex_value(value)
|
49
|
+
value.split('|').map(&:to_i)
|
50
|
+
end
|
51
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ajax-datatables-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Quenneville
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-05-
|
12
|
+
date: 2018-05-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|