@@ -9,32 +9,39 @@ var StoreScrapeResultWriter = function(db) {
99 this . db = db ;
1010} ;
1111
12+ /**
13+ * Make sure all obj have the same properties
14+ * They can differe if table selector retrieves dynamic columns
15+ */
16+ var normalizeProperties = function ( docs ) {
17+ // get all keys of the objects
18+ var keys = [ ] ;
19+ docs . forEach ( function ( doc ) {
20+ for ( var key in doc ) {
21+ if ( doc . hasOwnProperty ( key ) && keys . indexOf ( key ) === - 1 ) { keys . push ( key ) ; }
22+ } ;
23+ } ) ;
24+
25+ // add missing keys to objects
26+ docs . forEach ( function ( doc ) {
27+ var objKeys = Object . keys ( doc )
28+ keys . forEach ( function ( key ) {
29+ if ( ! ( key in doc ) ) {
30+ doc [ key ] = "" ;
31+ }
32+ } ) ;
33+ } ) ;
34+ } ;
35+
1236StoreScrapeResultWriter . prototype = {
37+
1338 writeDocs : function ( docs , callback ) {
1439 if ( docs . length === 0 ) {
1540 callback ( ) ;
1641 }
1742 else {
1843
19- // get all keys of the objects
20- var keys = [ ] ;
21- docs . forEach ( function ( doc ) {
22- for ( var key in doc ) {
23- if ( doc . hasOwnProperty ( key ) && keys . indexOf ( key ) === - 1 ) { keys . push ( key ) ; }
24- } ;
25- } ) ;
26-
27- // add missing keys to objects
28- // This can happen if same element containing different properties <table>
29- docs . forEach ( function ( doc ) {
30- var objKeys = Object . keys ( doc )
31- keys . forEach ( function ( key ) {
32- if ( ! ( key in doc ) ) {
33- doc [ key ] = "" ;
34- }
35- } ) ;
36- } ) ;
37-
44+ normalizeProperties ( docs ) ;
3845 this . db . bulkDocs ( { docs :docs } , function ( err , response ) {
3946 if ( err !== null ) {
4047 console . log ( "Error while persisting scraped data to db" , err ) ;
@@ -46,7 +53,7 @@ StoreScrapeResultWriter.prototype = {
4653} ;
4754
4855Store . prototype = {
49-
56+
5057 sanitizeSitemapDataDbName : function ( dbName ) {
5158 return 'sitemap-data-' + dbName . replace ( / [ ^ a - z 0 - 9 _ \$ \( \) \+ \- / ] / gi, "_" ) ;
5259 } ,
@@ -86,7 +93,9 @@ Store.prototype = {
8693
8794 this . sitemapDb . put ( sitemapJson , function ( sitemap , err , response ) {
8895 // @TODO handle err
89- sitemap . _rev = response . rev ;
96+ if ( response ) {
97+ sitemap . _rev = response . rev ;
98+ }
9099 callback ( sitemap ) ;
91100 } . bind ( this , sitemap ) ) ;
92101 } ,
@@ -133,8 +142,9 @@ Store.prototype = {
133142 var doc = response . rows [ i ] . doc ;
134143 responseData . push ( doc ) ;
135144 }
145+ normalizeProperties ( responseData ) ;
136146 callback ( responseData ) ;
137- } ) ;
147+ } . bind ( this ) ) ;
138148 } ,
139149 // @TODO make this call lighter
140150 sitemapExists : function ( sitemapId , callback ) {
0 commit comments