@@ -32,9 +32,11 @@ def self.extract_attributes_and_predicates(requested_field)
3232 # @param allowed_fields [Array] a list of allowed fields to be filtered
3333 # @param options [Hash] extra flags to enable/disable features
3434 # @return [ActiveRecord::Base] a collection of resources
35- def jsonapi_filter ( resources , allowed_fields , options = { } )
35+ def jsonapi_filter ( resources , allowed_fields , *allowed_scopes , options )
36+ options = options || { }
37+ allowed_scopes = ( allowed_scopes || [ ] ) . flatten . map ( &:to_s )
3638 allowed_fields = allowed_fields . map ( &:to_s )
37- extracted_params = jsonapi_filter_params ( allowed_fields )
39+ extracted_params = jsonapi_filter_params ( allowed_fields , allowed_scopes )
3840 extracted_params [ :sorts ] = jsonapi_sort_params ( allowed_fields , options )
3941 resources = resources . ransack ( extracted_params )
4042 block_given? ? yield ( resources ) : resources
@@ -47,7 +49,7 @@ def jsonapi_filter(resources, allowed_fields, options = {})
4749 #
4850 # @param allowed_fields [Array] a list of allowed fields to be filtered
4951 # @return [Hash] to be passed to [ActiveRecord::Base#order]
50- def jsonapi_filter_params ( allowed_fields )
52+ def jsonapi_filter_params ( allowed_fields , allowed_scopes )
5153 filtered = { }
5254 requested = params [ :filter ] || { }
5355 allowed_fields = allowed_fields . map ( &:to_s )
@@ -62,9 +64,17 @@ def jsonapi_filter_params(allowed_fields)
6264 to_filter = to_filter . split ( ',' )
6365 end
6466
67+ # filter by attributes
68+ # {"first_name_eq"=>"Beau"}
6569 if predicates . any? && ( field_names - allowed_fields ) . empty?
6670 filtered [ requested_field ] = to_filter
6771 end
72+
73+ # filter by scopes
74+ # {"created_before"=>"2013-02-01"}
75+ if ( field_names - allowed_scopes ) . empty?
76+ filtered [ requested_field ] = to_filter
77+ end
6878 end
6979
7080 filtered
0 commit comments