Skip to content

Commit fb604af

Browse files
authored
Merge pull request #323 from donnguyen/feature/add-string-in-cond
Add :string_in cond
2 parents 87fe4d7 + d29e6bc commit fb604af

File tree

4 files changed

+42
-1
lines changed

4 files changed

+42
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ end
215215

216216
`cond` can be :
217217

218-
* `:like`, `:start_with`, `:end_with`, `:string_eq` for string or full text search
218+
* `:like`, `:start_with`, `:end_with`, `:string_eq`, `:string_in` for string or full text search
219219
* `:eq`, `:not_eq`, `:lt`, `:gt`, `:lteq`, `:gteq`, `:in` for numeric
220220
* `:date_range` for date range (only for Rails > 4.2.x, see [here](#daterange-search))
221221
* `:null_value` for nil field

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ def non_regex_search
7171
casted_column.matches("%#{formatted_value}%")
7272
when :string_eq
7373
raw_search(:eq)
74+
when :string_in
75+
raw_search(:in)
7476
when :date_range
7577
date_range_search
7678
end

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,39 @@
339339
end
340340
end
341341

342+
describe 'it can filter records with condition :string_in' do
343+
let(:datatable) { DatatableCondStringIn.new(sample_params) }
344+
345+
before(:each) do
346+
create(:user, email: 'john@foo.com')
347+
create(:user, email: 'mary@bar.com')
348+
create(:user, email: 'henry@baz.com')
349+
end
350+
351+
it 'should filter records matching' do
352+
datatable.params[:columns]['1'][:search][:value] = 'john@foo.com'
353+
expect(datatable.data.size).to eq 1
354+
item = datatable.data.first
355+
expect(item[:email]).to eq 'john@foo.com'
356+
end
357+
358+
it 'should filter records matching with multiple' do
359+
datatable.params[:columns]['1'][:search][:value] = 'john@foo.com|henry@baz.com'
360+
expect(datatable.data.size).to eq 2
361+
item_first = datatable.data.first
362+
item_last = datatable.data.last
363+
expect(item_first[:email]).to eq 'john@foo.com'
364+
expect(item_last[:email]).to eq 'henry@baz.com'
365+
end
366+
367+
it 'should filter records matching with multiple contains not found' do
368+
datatable.params[:columns]['1'][:search][:value] = 'john@foo.com|henry_not@baz.com'
369+
expect(datatable.data.size).to eq 1
370+
item = datatable.data.first
371+
expect(item[:email]).to eq 'john@foo.com'
372+
end
373+
end
374+
342375
describe 'it can filter records with condition :null_value' do
343376
let(:datatable) { DatatableCondNullValue.new(sample_params) }
344377

spec/support/datatable_cond_string.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ def view_columns
2222
end
2323
end
2424

25+
class DatatableCondStringIn < ComplexDatatable
26+
def view_columns
27+
super.deep_merge(email: { cond: :string_in, formatter: -> (o) { o.split("|") } })
28+
end
29+
end
30+
2531
class DatatableCondNullValue < ComplexDatatable
2632
def view_columns
2733
super.deep_merge(email: { cond: :null_value })

0 commit comments

Comments
 (0)