Skip to content

Commit 5149b5b

Browse files
author
Nicolas Rodriguez
committed
Add Datatable#global_search_delimiter, add tests
1 parent 6159de1 commit 5149b5b

File tree

3 files changed

+46
-28
lines changed

3 files changed

+46
-28
lines changed

lib/ajax-datatables-rails/orm/active_record.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ module AjaxDatatablesRails
22
module ORM
33
module ActiveRecord
44

5+
GLOBAL_SEARCH_DELIMITER = ' '.freeze
6+
57
def fetch_records
68
get_raw_records
79
end
@@ -33,7 +35,6 @@ def build_conditions
3335
end
3436

3537
def build_conditions_for_datatable
36-
search_for = datatable.search.value.split(' ')
3738
criteria = search_for.inject([]) do |crit, atom|
3839
search = Datatable::SimpleSearch.new({ value: atom, regex: datatable.search.regexp? })
3940
crit << searchable_columns.map do |simple_column|
@@ -47,6 +48,14 @@ def build_conditions_for_datatable
4748
def build_conditions_for_selected_columns
4849
search_columns.map(&:search_query).compact.reduce(:and)
4950
end
51+
52+
def search_for
53+
datatable.search.value.split(global_search_delimiter)
54+
end
55+
56+
def global_search_delimiter
57+
GLOBAL_SEARCH_DELIMITER
58+
end
5059
end
5160
end
5261
end

spec/ajax-datatables-rails/base_spec.rb

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -86,26 +86,6 @@
8686
expect(item[2]).to eq 'Name &quot;&gt;&lt;img src=x onerror=alert(&quot;first_name&quot;)&gt;'
8787
expect(item[3]).to eq 'Name &quot;&gt;&lt;img src=x onerror=alert(&quot;last_name&quot;)&gt;'
8888
end
89-
90-
context 'with no searchable columns' do
91-
let(:datatable) do
92-
ComplexDatatableArray.new(view).tap do |datatable|
93-
datatable.instance_variable_set :@searchable_columns, []
94-
end
95-
end
96-
97-
context 'when search value is comma-separated string' do
98-
let(:view) { double('view', params: sample_params.merge(search: { value: 'one, two' })) }
99-
100-
it 'should return an array of arrays' do
101-
create_list(:user, 5)
102-
expect(datatable.data).to be_a(Array)
103-
expect(datatable.data.size).to eq 5
104-
item = datatable.data.first
105-
expect(item).to be_a(Array)
106-
end
107-
end
108-
end
10989
end
11090
end
11191

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

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,44 @@
5555
end
5656

5757
context 'with search query' do
58-
before(:each) do
59-
datatable.params[:search] = { value: "john", regex: "false" }
58+
context 'when search value is a string' do
59+
before(:each) do
60+
datatable.params[:search] = { value: 'john', regex: 'false' }
61+
end
62+
63+
it 'returns a filtering query' do
64+
query = datatable.send(:build_conditions_for_datatable)
65+
results = records.where(query).map(&:username)
66+
expect(results).to include('johndoe')
67+
expect(results).not_to include('msmith')
68+
end
6069
end
6170

62-
it 'returns a filtering query' do
63-
query = datatable.send(:build_conditions_for_datatable)
64-
results = records.where(query).map(&:username)
65-
expect(results).to include('johndoe')
66-
expect(results).not_to include('msmith')
71+
context 'when search value is space-separated string' do
72+
before(:each) do
73+
datatable.instance_variable_set :@searchable_columns, []
74+
datatable.params[:search] = { value: 'foo bar', regex: 'false' }
75+
end
76+
77+
it 'returns a filtering query' do
78+
query = datatable.send(:build_conditions_for_datatable)
79+
results = records.where(query).map(&:username)
80+
expect(results).to eq ['johndoe', 'msmith']
81+
end
82+
end
83+
84+
context 'when search value is comma-separated string' do
85+
before(:each) do
86+
datatable.instance_variable_set :@searchable_columns, []
87+
datatable.params[:search] = { value: 'foo, bar', regex: 'false' }
88+
expect(datatable).to receive(:global_search_delimiter).and_return(', ')
89+
end
90+
91+
it 'returns a filtering query' do
92+
query = datatable.send(:build_conditions_for_datatable)
93+
results = records.where(query).map(&:username)
94+
expect(results).to eq ['johndoe', 'msmith']
95+
end
6796
end
6897
end
6998
end

0 commit comments

Comments
 (0)