Skip to content

Commit 511e0ac

Browse files
committed
We should use formatted_value when checking for searchable integers
1 parent e6fb8f2 commit 511e0ac

File tree

3 files changed

+30
-3
lines changed

3 files changed

+30
-3
lines changed

lib/ajax-datatables-rails/datatable/column/search.rb

+3-3
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,11 @@ def empty_search
9090
end
9191

9292
def is_searchable_integer?
93-
if search.value.is_a?(Array)
94-
valids = search.value.map { |v| is_integer?(v) && !is_out_of_range?(v) }
93+
if formated_value.is_a?(Array)
94+
valids = formated_value.map { |v| is_integer?(v) && !is_out_of_range?(v) }
9595
!valids.include?(false)
9696
else
97-
is_integer?(search.value) && !is_out_of_range?(search.value)
97+
is_integer?(formated_value) && !is_out_of_range?(formated_value)
9898
end
9999
end
100100

spec/ajax-datatables-rails/orm/active_record_filter_records_spec.rb

+17
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,23 @@
495495
end
496496
end
497497

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+
498515
describe 'Integer overflows' do
499516
let(:datatable) { DatatableCondEq.new(view) }
500517
let(:largest_postgresql_integer_value) { 2147483647 }

spec/support/datatable_cond_numeric.rb

+10
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,13 @@ def view_columns
3939
super.deep_merge(post_id: { cond: :in })
4040
end
4141
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

0 commit comments

Comments
 (0)