| 
									
										
										
										
											2015-11-09 17:27:56 -08:00
										 |  |  | import path from 'path'; | 
					
						
							|  |  |  | import { Observable } from 'rx'; | 
					
						
							| 
									
										
										
										
											2016-01-30 00:13:41 -08:00
										 |  |  | import adler32 from 'adler32'; | 
					
						
							| 
									
										
										
										
											2015-11-09 17:27:56 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | const basePath = process.cwd() + '/seed/challenges/'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default function getFromDisk$(challenge) { | 
					
						
							| 
									
										
										
										
											2015-11-09 22:37:16 -08:00
										 |  |  |   if (challenge && !challenge.fileName) { | 
					
						
							|  |  |  |     throw new Error( | 
					
						
							|  |  |  |       `Challenge ${challenge.name} has no fileName.
 | 
					
						
							|  |  |  |       Did you remember run node seed?`
 | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-11-09 17:27:56 -08:00
										 |  |  |   delete require.cache[require.resolve( | 
					
						
							|  |  |  |     path.join(basePath, challenge.fileName) | 
					
						
							|  |  |  |   )]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return Observable.just(require(path.join(basePath, challenge.fileName))) | 
					
						
							| 
									
										
										
										
											2016-01-15 00:55:08 -08:00
										 |  |  |     .map(challengeSpec => { | 
					
						
							|  |  |  |       const _challenge = challengeSpec.challenges[challenge.suborder - 1]; | 
					
						
							|  |  |  |       _challenge.helpRoom = challengeSpec.helpRoom || 'Help'; | 
					
						
							|  |  |  |       return _challenge; | 
					
						
							|  |  |  |     }) | 
					
						
							| 
									
										
										
										
											2015-11-09 17:27:56 -08:00
										 |  |  |     .map(challenge => { | 
					
						
							| 
									
										
										
										
											2016-01-30 00:13:41 -08:00
										 |  |  |       challenge.checksum = adler32.sum( | 
					
						
							|  |  |  |         Buffer(challenge.title + | 
					
						
							|  |  |  |           JSON.stringify(challenge.description) + | 
					
						
							|  |  |  |           JSON.stringify(challenge.challengeSeed) + | 
					
						
							|  |  |  |           JSON.stringify(challenge.tests))); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-09 17:27:56 -08:00
										 |  |  |       challenge.head = challenge.head || []; | 
					
						
							|  |  |  |       challenge.tail = challenge.tail || []; | 
					
						
							|  |  |  |       challenge.challengeType = '' + challenge.challengeType; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-11 22:47:49 -08:00
										 |  |  |       challenge.name = challenge.title.replace(/[^a-zA-Z0-9\s]/g, ''); | 
					
						
							| 
									
										
										
										
											2015-11-09 17:27:56 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |       challenge.dashedName = challenge.name | 
					
						
							|  |  |  |         .toLowerCase() | 
					
						
							|  |  |  |         .replace(/\:/g, '') | 
					
						
							|  |  |  |         .replace(/\s/g, '-'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       return challenge; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | } |