File tree Expand file tree Collapse file tree 7 files changed +43
-25
lines changed
Expand file tree Collapse file tree 7 files changed +43
-25
lines changed Original file line number Diff line number Diff line change 11const flatfile = require ( 'flat-file-db' )
22const promise = require ( 'promise' )
33
4- const db = flatfile . sync ( process . env . DB_NAME || 'views.db' )
4+ const adapter = require ( './flat-file-adapter' ) ;
55
6- const promisifiedDb = {
7- // Promisify async operations
8- put : promise . denodeify ( db . put . bind ( db ) ) ,
9- del : promise . denodeify ( db . del . bind ( db ) ) ,
10- clear : promise . denodeify ( db . clear . bind ( db ) ) ,
11-
12- get : db . get . bind ( db ) ,
13- has : db . has . bind ( db ) ,
14- keys : db . keys . bind ( db ) ,
15- close : db . close . bind ( db ) ,
6+ module . exports = {
7+ get : adapter . get ,
8+ getAll : adapter . getAll ,
9+ put : adapter . put ,
10+ has : adapter . has ,
1611}
17-
18- module . exports = promisifiedDb
Original file line number Diff line number Diff line change 1+ const flatfile = require ( 'flat-file-db' )
2+ const promise = require ( 'promise' )
3+
4+ const db = flatfile . sync ( process . env . DB_NAME || 'views.db' )
5+
6+ function getAll ( options ) {
7+ const data = { } ;
8+ const keys = db . keys ( )
9+ . filter ( key => String ( options . filter ) === 'false' ? true : key . startsWith ( pathname ) ) ;
10+
11+ return Promise . resolve ( keys . map ( key => db . get ( key ) ) ) ;
12+ }
13+
14+ module . exports = {
15+ get : promise . denodeify ( db . get . bind ( db ) ) ,
16+ put : promise . denodeify ( db . put . bind ( db ) ) ,
17+ has : promise . denodeify ( db . has . bind ( db ) ) ,
18+ getAll : getAll ,
19+ }
Original file line number Diff line number Diff line change @@ -9,12 +9,9 @@ module.exports = async function (req, res) {
99 // Send all views down if "?all" is true
1010 if ( String ( query . all ) === 'true' ) {
1111 const data = {
12- data : { } ,
12+ data : await db . getAll ( ) ,
1313 time : Date . now ( )
1414 }
15- for ( let key of db . keys ( ) . filter ( key => String ( query . filter ) === 'false' ? true : key . startsWith ( pathname ) ) ) {
16- data . data [ key ] = db . get ( key )
17- }
1815 send ( res , 200 , data )
1916 return
2017 }
@@ -27,7 +24,7 @@ module.exports = async function (req, res) {
2724 }
2825 const shouldIncrement = String ( query . inc ) !== 'false'
2926 try {
30- const currentViews = db . has ( pathname ) ? db . get ( pathname ) . views . length : 0
27+ const currentViews = await db . has ( pathname ) ? ( await db . get ( pathname ) ) . views . length : 0
3128 // Add a view and send the total views back to the client
3229 if ( shouldIncrement ) {
3330 await pushView ( pathname , { time : Date . now ( ) } )
Original file line number Diff line number Diff line change @@ -10,8 +10,8 @@ const pushView = async (key, view) => {
1010 if ( locks [ key ] ) return setImmediate ( async ( ) => { await push ( ) } )
1111 locks [ key ] = true
1212
13- const views = db . has ( key )
14- ? db . get ( key ) . views
13+ const views = await db . has ( key )
14+ ? ( await db . get ( key ) ) . views
1515 : [ ]
1616
1717 try {
Original file line number Diff line number Diff line change 11const request = require ( 'request-promise' )
22const { listen, mockDb } = require ( './utils' )
33
4- jest . mock ( '../src/db ' , ( ) => mockDb )
4+ jest . mock ( '../src/flat-file-adapter ' , ( ) => mockDb )
55const service = require ( '../src' )
66let url
77
Original file line number Diff line number Diff line change 11const request = require ( 'request-promise' )
22const { listen, mockDb } = require ( './utils' )
33
4- jest . mock ( '../src/db ' , ( ) => mockDb )
4+ jest . mock ( '../src/flat-file-adapter ' , ( ) => mockDb )
55const service = require ( '../src' )
66let url
77
Original file line number Diff line number Diff line change @@ -6,15 +6,24 @@ const DB = () => {
66 let DELAY = 1
77
88 return {
9- get : ( key ) => data [ key ] ,
9+ get : ( key ) => new Promise ( ( res , rej ) => {
10+ setTimeout ( ( ) => {
11+ res ( data [ key ] )
12+ } , DELAY )
13+ } ) ,
1014 put : ( key , val ) => new Promise ( ( res , rej ) => {
1115 setTimeout ( ( ) => {
1216 data [ key ] = val
1317 res ( )
1418 } , DELAY )
1519 } ) ,
16- has : ( key ) => ! ! data [ key ] ,
17- keys : ( ) => Object . keys ( data ) ,
20+ has : ( key ) => new Promise ( ( res , rej ) => {
21+ setTimeout ( ( ) => {
22+ res ( ! ! data [ key ] )
23+ } , DELAY )
24+ } ) ,
25+ getAll : ( options ) => Object . assign ( { } , data ) ,
26+
1827 // Custom methods used in tests
1928 _reset : ( ) => { data = { } } ,
2029 _setDelay : ( ms ) => { DELAY = ms || 1 }
You can’t perform that action at this time.
0 commit comments