Skip to content

Commit 80d56f5

Browse files
committed
BaseFilter#default_scope? method
1 parent fb96d98 commit 80d56f5

File tree

2 files changed

+27
-12
lines changed

2 files changed

+27
-12
lines changed

Diff for: lib/datagrid/filters/base_filter.rb

+11-12
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def initialize(grid_class, name, options = {}, &block)
1717
self.grid_class = grid_class
1818
self.name = name.to_sym
1919
self.options = options
20-
self.block = block || default_filter_block
20+
self.block = block
2121
end
2222

2323
def parse(value)
@@ -39,7 +39,7 @@ def apply(grid_object, scope, value)
3939

4040
return scope unless result
4141

42-
result = default_filter(value, scope, grid_object) if result == Datagrid::Filters::DEFAULT_FILTER_BLOCK
42+
result = default_filter(value, scope) if result == Datagrid::Filters::DEFAULT_FILTER_BLOCK
4343
unless grid_object.driver.match?(result)
4444
raise(
4545
Datagrid::FilteringError,
@@ -116,13 +116,6 @@ def self.form_builder_helper_name
116116
:"datagrid_#{to_s.demodulize.underscore}"
117117
end
118118

119-
def default_filter_block
120-
filter = self
121-
lambda do |value, scope, grid|
122-
filter.default_filter(value, scope, grid)
123-
end
124-
end
125-
126119
def supports_range?
127120
self.class.ancestors.include?(::Datagrid::Filters::RangedFilter)
128121
end
@@ -150,17 +143,23 @@ def enum_checkboxes?
150143
false
151144
end
152145

146+
def default_scope?
147+
!block
148+
end
149+
153150
protected
154151

155152
def default_filter_where(scope, value)
156153
driver.where(scope, name, value)
157154
end
158155

159156
def execute(value, scope, grid_object)
160-
if block.arity == 1
157+
if block&.arity == 1
161158
scope.instance_exec(value, &block)
162-
else
159+
elsif block
163160
Datagrid::Utils.apply_args(value, scope, grid_object, &block)
161+
else
162+
default_filter(value, scope)
164163
end
165164
end
166165

@@ -185,7 +184,7 @@ def driver
185184
grid_class.driver
186185
end
187186

188-
def default_filter(value, scope, _grid)
187+
def default_filter(value, scope)
189188
return nil if dummy?
190189

191190
if !driver.scope_has_column?(scope, name) && scope.respond_to?(name, true)

Diff for: spec/datagrid/filters/base_filter_spec.rb

+16
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,20 @@ def name_default
1515
expect(report.assets).not_to include(Entry.create!(name: "world"))
1616
expect(report.assets).not_to include(Entry.create!(name: ""))
1717
end
18+
19+
describe "#default_scope?" do
20+
21+
it "identifies filters without custom block" do
22+
grid = test_report do
23+
scope { Entry }
24+
filter(:id, :integer)
25+
filter(:group_id, :integer) do |value, scope|
26+
scope("group_id >= ?", value)
27+
end
28+
end
29+
30+
expect(grid.filter_by_name(:id)).to be_default_scope
31+
expect(grid.filter_by_name(:group_id)).to_not be_default_scope
32+
end
33+
end
1834
end

0 commit comments

Comments
 (0)