@@ -8,40 +8,20 @@ var _ = {
88} ;
99var debug = require ( "../debugging.js" ) ;
1010
11- var FILTER_OPERATORS = [ "<" , ">" , "~" , ":" ] ;
12-
1311filter . action = function ( request , response , callback ) {
14- var allFilters = _ . assign ( { } , request . params . filter ) ;
15- if ( ! allFilters ) return callback ( ) ;
16-
17- var filters = { } ;
18- for ( var i in allFilters ) {
19- if ( ! request . resourceConfig . attributes [ i ] ) {
20- return callback ( {
21- status : "403" ,
22- code : "EFORBIDDEN" ,
23- title : "Invalid filter" ,
24- detail : request . resourceConfig . resource + " do not have property " + i
25- } ) ;
26- }
27- if ( allFilters [ i ] instanceof Array ) {
28- allFilters [ i ] = allFilters [ i ] . join ( "," ) ;
29- }
30- if ( typeof allFilters [ i ] === "string" ) {
31- filters [ i ] = allFilters [ i ] ;
32- }
33- }
12+ var filters = request . processedFilter ;
13+ if ( ! filters ) return callback ( ) ;
3414
3515 if ( response . data instanceof Array ) {
3616 for ( var j = 0 ; j < response . data . length ; j ++ ) {
37- if ( ! filter . _filterKeepObject ( response . data [ j ] , filters , request . resourceConfig . attributes ) ) {
17+ if ( ! filter . _filterKeepObject ( response . data [ j ] , filters ) ) {
3818 debug . filter ( "removed" , filters , JSON . stringify ( response . data [ j ] . attributes ) ) ;
3919 response . data . splice ( j , 1 ) ;
4020 j -- ;
4121 }
4222 }
4323 } else if ( response . data instanceof Object ) {
44- if ( ! filter . _filterKeepObject ( response . data , filters , request . resourceConfig . attributes ) ) {
24+ if ( ! filter . _filterKeepObject ( response . data , filters ) ) {
4525 debug . filter ( "removed" , filters , JSON . stringify ( response . data . attributes ) ) ;
4626 response . data = null ;
4727 }
@@ -50,27 +30,10 @@ filter.action = function(request, response, callback) {
5030 return callback ( ) ;
5131} ;
5232
53- filter . _splitFilterElement = function ( filterElementStr ) {
54- if ( FILTER_OPERATORS . indexOf ( filterElementStr [ 0 ] ) !== - 1 ) {
55- return { operator : filterElementStr [ 0 ] , value : filterElementStr . substring ( 1 ) } ;
56- }
57- return { operator : null , value : filterElementStr } ;
58- } ;
59-
60- filter . _filterMatches = function ( filterElementStr , attributeValue , attributeConfig ) {
61- var filterElement = filter . _splitFilterElement ( filterElementStr ) ;
62- var validationResult = attributeConfig . validate ( filterElement . value ) ;
63- if ( validationResult . error ) {
64- debug . filter ( "invalid filter condition value:" , validationResult . error ) ;
65- return false ;
66- }
67- filterElement . value = validationResult . value ;
33+ filter . _filterMatches = function ( filterElement , attributeValue ) {
6834 if ( ! filterElement . operator ) {
6935 return _ . isEqual ( attributeValue , filterElement . value ) ;
7036 }
71- if ( [ "~" , ":" ] . indexOf ( filterElement . operator ) !== - 1 && typeof filterElement . value !== "string" ) {
72- return false ;
73- }
7437 var filterFunction = {
7538 ">" : function filterGreaterThan ( attrValue , filterValue ) {
7639 return attrValue > filterValue ;
@@ -89,15 +52,14 @@ filter._filterMatches = function(filterElementStr, attributeValue, attributeConf
8952 return result ;
9053} ;
9154
92- filter . _filterKeepObject = function ( someObject , filters , attributesConfig ) {
55+ filter . _filterKeepObject = function ( someObject , filters ) {
9356 for ( var filterName in filters ) {
94- var whitelist = filters [ filterName ] . split ( "," ) ;
95- var attributeConfig = attributesConfig [ filterName ] ;
57+ var whitelist = filters [ filterName ] ;
9658
9759 if ( someObject . attributes . hasOwnProperty ( filterName ) || ( filterName === "id" ) ) {
9860 var attributeValue = someObject . attributes [ filterName ] ;
9961 if ( filterName === "id" ) attributeValue = someObject . id ;
100- var attributeMatches = filter . _attributesMatchesOR ( attributeValue , attributeConfig , whitelist ) ;
62+ var attributeMatches = filter . _attributesMatchesOR ( attributeValue , whitelist ) ;
10163 if ( ! attributeMatches ) return false ;
10264 } else if ( someObject . relationships . hasOwnProperty ( filterName ) ) {
10365 var relationships = someObject . relationships [ filterName ] ;
@@ -110,10 +72,10 @@ filter._filterKeepObject = function(someObject, filters, attributesConfig) {
11072 return true ;
11173} ;
11274
113- filter . _attributesMatchesOR = function ( attributeValue , attributeConfig , whitelist ) {
75+ filter . _attributesMatchesOR = function ( attributeValue , whitelist ) {
11476 var matchOR = false ;
115- whitelist . forEach ( function ( filterElementStr ) {
116- if ( filter . _filterMatches ( filterElementStr , attributeValue , attributeConfig ) ) {
77+ whitelist . forEach ( function ( filterElement ) {
78+ if ( filter . _filterMatches ( filterElement , attributeValue ) ) {
11779 matchOR = true ;
11880 }
11981 } ) ;
@@ -131,8 +93,8 @@ filter._relationshipMatchesOR = function(relationships, whitelist) {
13193 return relation . id ;
13294 } ) ;
13395
134- whitelist . forEach ( function ( filterElementStr ) {
135- if ( data . indexOf ( filterElementStr ) !== - 1 ) {
96+ whitelist . forEach ( function ( filterElement ) {
97+ if ( data . indexOf ( filterElement . value ) !== - 1 ) {
13698 matchOR = true ;
13799 }
138100 } ) ;
0 commit comments