Skip to content

Commit 5035718

Browse files
committed
Add :string_eq condition. Fix jbox-web#291
1 parent 6a8e53d commit 5035718

File tree

4 files changed

+49
-3
lines changed

4 files changed

+49
-3
lines changed

README.md

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

205205
`cond` can be :
206206

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

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def non_regex_search
5757
when Proc
5858
filter
5959
when :eq, :not_eq, :lt, :gt, :lteq, :gteq, :in
60-
is_searchable_integer? ? numeric_search : empty_search
60+
is_searchable_integer? ? raw_search(cond) : empty_search
6161
when :null_value
6262
null_value_search
6363
when :start_with
@@ -66,6 +66,8 @@ def non_regex_search
6666
casted_column.matches("%#{formatted_value}")
6767
when :like
6868
casted_column.matches("%#{formatted_value}%")
69+
when :string_eq
70+
raw_search(:eq)
6971
end
7072
end
7173

@@ -77,7 +79,7 @@ def null_value_search
7779
end
7880
end
7981

80-
def numeric_search
82+
def raw_search(cond)
8183
if custom_field?
8284
::Arel::Nodes::SqlLiteral.new(field).eq(formatted_value)
8385
else

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,38 @@
358358
end
359359
end
360360

361+
describe 'it can filter records with condition :like' do
362+
let(:datatable) { DatatableCondLike.new(view) }
363+
364+
before(:each) do
365+
create(:user, email: 'john@foo.com')
366+
create(:user, email: 'mary@bar.com')
367+
end
368+
369+
it 'should filter records matching' do
370+
datatable.params[:columns]['1'][:search][:value] = 'foo'
371+
expect(datatable.data.size).to eq 1
372+
item = datatable.data.first
373+
expect(item[:email]).to eq 'john@foo.com'
374+
end
375+
end
376+
377+
describe 'it can filter records with condition :string_eq' do
378+
let(:datatable) { DatatableCondStringEq.new(view) }
379+
380+
before(:each) do
381+
create(:user, email: 'john@foo.com')
382+
create(:user, email: 'mary@bar.com')
383+
end
384+
385+
it 'should filter records matching' do
386+
datatable.params[:columns]['1'][:search][:value] = 'john@foo.com'
387+
expect(datatable.data.size).to eq 1
388+
item = datatable.data.first
389+
expect(item[:email]).to eq 'john@foo.com'
390+
end
391+
end
392+
361393
describe 'it can filter records with condition :null_value' do
362394
let(:datatable) { DatatableCondNullValue.new(view) }
363395

spec/support/datatable_cond_string.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@ def view_columns
1010
end
1111
end
1212

13+
class DatatableCondLike < ComplexDatatable
14+
def view_columns
15+
super.deep_merge(email: { cond: :like })
16+
end
17+
end
18+
19+
class DatatableCondStringEq < ComplexDatatable
20+
def view_columns
21+
super.deep_merge(email: { cond: :string_eq })
22+
end
23+
end
24+
1325
class DatatableCondNullValue < ComplexDatatable
1426
def view_columns
1527
super.deep_merge(email: { cond: :null_value })

0 commit comments

Comments
 (0)