Skip to content

Commit 31ec9f5

Browse files
committed
Merge pull request #238 from john-griffin/filter-context
Provide options context to apply_filter
2 parents 247a7ac + 4f494a4 commit 31ec9f5

File tree

3 files changed

+10
-10
lines changed

3 files changed

+10
-10
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ control over how the filters are applied to the `Arel` relation.
358358
This example shows how you can implement different approaches for different filters.
359359

360360
```ruby
361-
def self.apply_filter(records, filter, value)
361+
def self.apply_filter(records, filter, value, options)
362362
case filter
363363
when :visibility
364364
records.where('users.publicly_visible = ?', value == :public)

lib/jsonapi/resource.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -326,24 +326,24 @@ def apply_sort(records, order_options)
326326
end
327327
end
328328

329-
def apply_filter(records, filter, value)
329+
def apply_filter(records, filter, value, options = {})
330330
records.where(filter => value)
331331
end
332332

333-
def apply_filters(records, filters)
333+
def apply_filters(records, filters, options = {})
334334
required_includes = []
335335

336336
if filters
337337
filters.each do |filter, value|
338338
if _associations.include?(filter)
339339
if _associations[filter].is_a?(JSONAPI::Association::HasMany)
340340
required_includes.push(filter)
341-
records = apply_filter(records, "#{filter}.#{_associations[filter].primary_key}", value)
341+
records = apply_filter(records, "#{filter}.#{_associations[filter].primary_key}", value, options)
342342
else
343-
records = apply_filter(records, "#{_associations[filter].foreign_key}", value)
343+
records = apply_filter(records, "#{_associations[filter].foreign_key}", value, options)
344344
end
345345
else
346-
records = apply_filter(records, filter, value)
346+
records = apply_filter(records, filter, value, options)
347347
end
348348
end
349349
end
@@ -362,7 +362,7 @@ def filter_records(filters, options)
362362

363363
records = records(options)
364364
records = apply_includes(records, include_directives)
365-
apply_filters(records, filters)
365+
apply_filters(records, filters, options)
366366
end
367367

368368
def sort_records(records, order_options)
@@ -603,7 +603,7 @@ def _associate(klass, *attrs)
603603

604604
if resource_class
605605
records = public_send(associated_records_method_name)
606-
records = resource_class.apply_filters(records, filters)
606+
records = resource_class.apply_filters(records, filters, options)
607607
order_options = self.class.construct_order_options(sort_criteria)
608608
records = resource_class.apply_sort(records, order_options)
609609
records = resource_class.apply_pagination(records, paginator, order_options)

test/unit/resource/resource_test.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def test_has_many_association_filters
143143

144144
# define apply_filters method on post resource to not respect filters
145145
PostResource.instance_eval do
146-
def apply_filters(records, filters)
146+
def apply_filters(records, filters, options)
147147
# :nocov:
148148
records
149149
# :nocov:
@@ -155,7 +155,7 @@ def apply_filters(records, filters)
155155

156156
# reset method to original implementation
157157
PostResource.instance_eval do
158-
def apply_filters(records, filters)
158+
def apply_filters(records, filters, options)
159159
# :nocov:
160160
super
161161
# :nocov:

0 commit comments

Comments
 (0)