ajax-datatables-rails 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|