8000 Improve colum#filter method, add tests · GUI/ajax-datatables-rails@12f9709 · GitHub
[go: up one dir, main page]

Skip to content

Commit 12f9709

Browse files
author
Nicolas Rodriguez
committed
Improve colum#filter method, add tests
1 parent edf7a17 commit 12f9709

File tree

3 files changed

+32
-7
lines changed

3 files changed

+32
-7
lines changed

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ def cond
4242
@view_column[:cond] || :like
4343
end
4444

45-
def filter(value)
46-
@view_column[:cond].call(self)
45+
def filter
46+
@view_column[:cond].call(self, formated_value)
4747
end
4848

4949
def source
@@ -88,6 +88,10 @@ def sort_query
8888
custom_field? ? source : "#{table.name}.#{sort_field}"
8989
end
9090

91+
def formated_value
92+
formater ? formater.call(search.value) : search.value
93+
end
94+
9195
private
9296

9397
def custom_field?
@@ -98,10 +102,6 @@ def config
98102
@config ||= AjaxDatatablesRails.config
99103
end
100104

101-
def formated_value
102-
formater ? formater.call(search.value) : search.value
103-
end
104-
105105
# Using multi-select filters in JQuery Datatable auto-enables regex_search.
106106
# Unfortunately regex_search doesn't work when filtering on primary keys with integer.
107107
# It generates this kind of query : AND ("regions"."id" ~ '2|3') which throws an error :
@@ -118,7 +118,7 @@ def regex_search
118118
def non_regex_search
119119
case cond
120120
when Proc
121-
filter(formated_value)
121+
filter
122122
when :eq, :not_eq, :lt, :gt, :lteq, :gteq, :in
123123
numeric_search
124124
when :null_value

spec/ajax-datatables-rails/datatable/column_spec.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,17 @@
8787
expect(column.formater) 8000 .to be_a(Proc)
8888
end
8989
end
90+
91+
describe '#filter' do
92+
let(:datatable) { ReallyComplexDatatableProc.new(view) }
93+
let(:column) { datatable.datatable.columns.find { |c| c.data == 'username' } }
94+
95+
it 'should be a proc' do
96+
config = column.instance_variable_get('@view_column')
97+
filter = config[:cond]
98+
expect(filter).to be_a(Proc)
99+
expect(filter).to receive(:call).with(column, column.formated_value)
100+
column.filter
101+
end
102+
end
90103
end

spec/support/test_helpers.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,3 +172,15 @@ def view_columns
172172
super.deep_merge(post_id: { cond: :in })
173173
end
174174
end
175+
176+
class ReallyComplexDatatableProc < ReallyComplexDatatable
177+
def view_columns
178+
super.deep_merge(username: { cond: custom_filter })
179+
end
180+
181+
private
182+
183+
def custom_filter
184+
->(column, value) { ::Arel::Nodes::SqlLiteral.new(column.field.to_s).matches("#{value}%") }
185+
end
186+
end

0 commit comments

Comments
 (0)
0