10000 Add :string_eq condition. Fix https://github.com/jbox-web/ajax-datata… · jbox-web/ajax-datatables-rails@2b2485c · GitHub
[go: up one dir, main page]

Skip to content

Commit 2b2485c

Browse files
committed
Add :string_eq condition. Fix #291
1 parent 511e0ac commit 2b2485c

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
@@ -205,7 +205,7 @@ end
205205

206206
`cond` can be :
207207

208-
* `:like`, `:start_with`, `:end_with` for string or full text search
208+
* `:like`, `:start_with`, `:end_with`, `:string_eq` for string or full text search
209209
* `:eq`, `:not_eq`, `:lt`, `:gt`, `:lteq`, `:gteq`, `:in` for numeric
210210
* `:date_range` for date range (only for Rails > 4.2.x, see [here](#daterange-search))
211211
* `: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("%#{formated_value}")
6767
when :like
6868
casted_column.matches("%#{formated_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(formated_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
@@ -360,6 +360,38 @@
360360
end
361361
end
362362

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

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)
0