3
3
*/
4
4
5
5
var debug = require ( 'debug' ) ( 'x-ray' ) ;
6
+ var assign = require ( 'object-assign' ) ;
6
7
var Select = require ( 'x-ray-select' ) ;
7
8
var request = require ( './request' ) ;
8
9
var yieldly = require ( 'yieldly' ) ;
@@ -41,6 +42,7 @@ function Xray(url) {
41
42
this . _paginate = false ;
42
43
this . _limit = Infinity ;
43
44
this . _throws = true ;
45
+ this . prepares = { } ;
44
46
this . selects = { } ;
45
47
this . url = url ;
46
48
this . keys = [ ] ;
@@ -122,6 +124,23 @@ Xray.prototype.format = function(fn) {
122
124
return this ;
123
125
} ;
124
126
127
+ /**
128
+ * Prepare
129
+ */
130
+
131
+ Xray . prototype . prepare = function ( str , fn ) {
132
+ if ( ! arguments . length ) return this . prepares ;
133
+
134
+ if ( 1 == arguments . length ) {
135
+ this . prepares = assign ( this . prepares , str ) ;
136
+ } else {
137
+ this . prepares [ str ] = fn ;
138
+ }
139
+
140
+ return this ;
141
+ } ;
142
+
143
+
125
144
126
145
/**
127
146
* Paginate
@@ -255,6 +274,7 @@ Xray.prototype.traverse = function(fn, done) {
255
274
var get = this . request ? this . request : ( this . request = this . use ( request ( ) ) . request ) ;
256
275
var limit = this . _paginate ? this . _limit : 1 ;
257
276
var paginate = this . _paginate ;
277
+ var prepares = this . prepares ;
258
278
var selects = this . selects ;
259
279
var throws = this . _throws ;
260
280
var format = this . _format ;
@@ -270,7 +290,7 @@ Xray.prototype.traverse = function(fn, done) {
270
290
debug ( 'received response' ) ;
271
291
272
292
var $ = load ( body ) ;
273
- var select = Select ( $ ) ;
293
+ var select = Select ( $ , prepares ) ;
274
294
var json = select ( selects ) ;
275
295
var href = select ( paginate ) ;
276
296
0 commit comments