@@ -31,19 +31,129 @@ if (!JSData) {
31
31
}
32
32
33
33
var DSUtils = JSData . DSUtils ;
34
- var deepMixIn = DSUtils . deepMixIn ;
35
- var forEach = DSUtils . forEach ;
36
34
37
35
function Defaults ( ) {
38
36
39
37
}
40
38
39
+ Defaults . prototype . host = 'localhost' ;
40
+ Defaults . prototype . port = 28015 ;
41
+ Defaults . prototype . authKey = '' ;
42
+ Defaults . prototype . db = 'test' ;
43
+ Defaults . prototype . min = 10 ;
44
+ Defaults . prototype . max = 50 ;
45
+ Defaults . prototype . bufferSize = 10 ;
46
+
47
+ var reserved = [
48
+ 'orderBy' ,
49
+ 'sort' ,
50
+ 'limit' ,
51
+ 'offset' ,
52
+ 'skip' ,
53
+ 'where'
54
+ ] ;
55
+
56
+ function filterQuery ( r , resourceConfig , params ) {
57
+ params = params || { } ;
58
+ params . where = params . where || { } ;
59
+ params . orderBy = params . orderBy || params . sort ;
60
+ params . skip = params . skip || params . offset ;
61
+
62
+ var keys = Object . keys ( params ) ;
63
+ keys . forEach ( function ( k ) {
64
+ var v = params [ k ] ;
65
+ if ( ! DSUtils . contains ( reserved , k ) ) {
66
+ if ( DSUtils . isObject ( v ) ) {
67
+ params . where [ k ] = v ;
68
+ } else {
69
+ params . where [ k ] = {
70
+ '==' : v
71
+ } ;
72
+ }
73
+ delete params [ k ] ;
74
+ }
75
+ } ) ;
76
+
77
+ var query = r . table ( resourceConfig . endpoint ) ;
78
+ var subQuery ;
79
+
80
+ DSUtils . forOwn ( params . where , function ( criteria , field ) {
81
+ if ( ! DSUtils . isObject ( criteria ) ) {
82
+ params . where [ field ] = {
83
+ '==' : criteria
84
+ } ;
85
+ }
86
+ DSUtils . forOwn ( criteria , function ( v , op ) {
87
+ if ( op === '==' || op === '===' ) {
88
+ subQuery = subQuery ? subQuery . and ( r . row ( field ) . eq ( v ) ) : r . row ( field ) . eq ( v ) ;
89
+ } else if ( op === '!=' || op === '!==' ) {
90
+ subQuery = subQuery ? subQuery . and ( r . row ( field ) . ne ( v ) ) : r . row ( field ) . ne ( v ) ;
91
+ } else if ( op === '>' ) {
92
+ subQuery = subQuery ? subQuery . and ( r . row ( field ) . gt ( v ) ) : r . row ( field ) . gt ( v ) ;
93
+ } else if ( op === '>=' ) {
94
+ subQuery = subQuery ? subQuery . and ( r . row ( field ) . ge ( v ) ) : r . row ( field ) . ge ( v ) ;
95
+ } else if ( op === '<' ) {
96
+ subQuery = subQuery ? subQuery . and ( r . row ( field ) . lt ( v ) ) : r . row ( field ) . lt ( v ) ;
97
+ } else if ( op === '<=' ) {
98
+ subQuery = subQuery ? subQuery . and ( r . row ( field ) . le ( v ) ) : r . row ( field ) . le ( v ) ;
99
+ } else if ( op === 'in' ) {
100
+ subQuery = subQuery ? subQuery . and ( r . row ( field ) . contains ( v ) ) : r . row ( field ) . contains ( v ) ;
101
+ } else if ( op === 'notIn' ) {
102
+ subQuery = subQuery ? subQuery . and ( r . row ( field ) . contains ( v ) . not ( ) ) : r . row ( field ) . contains ( v ) . not ( ) ;
103
+ } else if ( op === '|==' || op === '|===' ) {
104
+ subQuery = subQuery ? subQuery . or ( r . row ( field ) . eq ( v ) ) : r . row ( field ) . eq ( v ) ;
105
+ } else if ( op === '|!=' || op === '|!==' ) {
106
+ subQuery = subQuery ? subQuery . or ( r . row ( field ) . ne ( v ) ) : r . row ( field ) . ne ( v ) ;
107
+ } else if ( op === '|>' ) {
108
+ subQuery = subQuery ? subQuery . or ( r . row ( field ) . gt ( v ) ) : r . row ( field ) . gt ( v ) ;
109
+ } else if ( op === '|>=' ) {
110
+ subQuery = subQuery ? subQuery . or ( r . row ( field ) . ge ( v ) ) : r . row ( field ) . ge ( v ) ;
111
+ } else if ( op === '|<' ) {
112
+ subQuery = subQuery ? subQuery . or ( r . row ( field ) . lt ( v ) ) : r . row ( field ) . lt ( v ) ;
113
+ } else if ( op === '|<=' ) {
114
+ subQuery = subQuery ? subQuery . or ( r . row ( field ) . le ( v ) ) : r . row ( field ) . le ( v ) ;
115
+ } else if ( op === '|in' ) {
116
+ subQuery = subQuery ? subQuery . or ( r . row ( field ) . contains ( v ) ) : r . row ( field ) . contains ( v ) ;
117
+ } else if ( op === '|notIn' ) {
118
+ subQuery = subQuery ? subQuery . or ( r . row ( field ) . contains ( v ) . not ( ) ) : r . row ( field ) . contains ( v ) . not ( ) ;
119
+ }
120
+ } ) ;
121
+ } ) ;
122
+
123
+ if ( subQuery ) {
124
+ query = query . filter ( subQuery ) ;
125
+ }
126
+
127
+ if ( params . orderBy ) {
128
+ if ( utils . isString ( params . orderBy ) ) {
129
+ params . orderBy = [
130
+ [ params . orderBy , 'asc' ]
131
+ ] ;
132
+ }
133
+ for ( var i = 0 ; i < params . orderBy . length ; i ++ ) {
134
+ if ( utils . isString ( params . orderBy [ i ] ) ) {
135
+ params . orderBy [ i ] = [ params . orderBy [ i ] , 'asc' ] ;
136
+ }
137
+ query = utils . upperCase ( params . orderBy [ i ] [ 1 ] ) === 'DESC' ? query . orderBy ( r . desc ( params . orderBy [ i ] [ 0 ] ) ) : query . orderBy ( params . orderBy [ i ] [ 0 ] ) ;
138
+ }
139
+ }
140
+
141
+ if ( params . skip ) {
142
+ query = query . skip ( params . skip ) ;
143
+ }
144
+
145
+ if ( params . limit ) {
146
+ query = query . limit ( params . limit ) ;
147
+ }
148
+
149
+ return query ;
150
+ }
151
+
41
152
function DSRethinkDBAdapter ( options ) {
42
- var _this = this ;
43
153
options = options || { } ;
44
- _this . defaults = new Defaults ( ) ;
45
- deepMixIn ( _this . defaults , options ) ;
46
- _this . r = rethinkdbdash ( options ) ;
154
+ this . defaults = new Defaults ( ) ;
155
+ DSUtils . deepMixIn ( this . defaults , options ) ;
156
+ this . r = rethinkdbdash ( this . defaults ) ;
47
157
}
48
158
49
159
var dsRethinkDBAdapterPrototype = DSRethinkDBAdapter . prototype ;
@@ -59,8 +169,7 @@ dsRethinkDBAdapterPrototype.find = function find(resourceConfig, id) {
59
169
} ;
60
170
61
171
dsRethinkDBAdapterPrototype . findAll = function ( resourceConfig , params ) {
62
- params = params || { } ;
63
- return this . r . table ( resourceConfig . endpoint ) . filter ( params ) . run ( ) ;
172
+ return filterQuery ( this . r , resourceConfig , params ) . run ( ) ;
64
173
} ;
65
174
66
175
dsRethinkDBAdapterPrototype . create = function ( resourceConfig , attrs ) {
@@ -76,11 +185,10 @@ dsRethinkDBAdapterPrototype.update = function (resourceConfig, id, attrs) {
76
185
} ;
77
186
78
187
dsRethinkDBAdapterPrototype . updateAll = function ( resourceConfig , attrs , params ) {
79
- var _this = this ;
80
188
params = params || { } ;
81
- return _this . r . table ( resourceConfig . endpoint ) . filter ( params ) . update ( attrs , { returnChanges : true } ) . run ( ) . then ( function ( cursor ) {
189
+ return filterQuery ( this . r , resourceConfig , params ) . update ( attrs , { returnChanges : true } ) . run ( ) . then ( function ( cursor ) {
82
190
var items = [ ] ;
83
- DSUtils . forEach ( cursor . changes , function ( change ) {
191
+ cursor . changes . forEach ( function ( change ) {
84
192
items . push ( change . new_val ) ;
85
193
} ) ;
86
194
return items ;
@@ -95,7 +203,7 @@ dsRethinkDBAdapterPrototype.destroy = function (resourceConfig, id) {
95
203
96
204
dsRethinkDBAdapterPrototype . destroyAll = function ( resourceConfig , params ) {
97
205
params = params || { } ;
98
- return this . r . table ( resourceConfig . endpoint ) . filter ( params ) . delete ( ) . run ( ) . then ( function ( ) {
206
+ return filterQuery ( this . r , resourceConfig , params ) . delete ( ) . run ( ) . then ( function ( ) {
99
207
return undefined ;
100
208
} ) ;
101
209
} ;
0 commit comments