Comparing version 0.1.2 to 0.1.3
@@ -13,1 +13,5 @@ var crema = require('../lib'); | ||
route = "request -method=POST hello//:test(\\w+.js(a))/fdsdfs -> world" | ||
console.log(JSON.stringify(crema(route), null, 2)); | ||
@@ -0,1 +1,2 @@ | ||
var strscanner = require("strscanner"); | ||
@@ -39,16 +40,71 @@ | ||
function scanGroups(scanner) { | ||
var buffer = "("; | ||
while(scanner.cchar() != ")") { | ||
buffer += scanner.cchar(); | ||
scanner.nextChar(); | ||
if(scanner.cchar() == "(") { | ||
scanner.nextChar(); | ||
buffer += scanGroups(scanner); | ||
} | ||
} | ||
scanner.nextChar(); | ||
return buffer + ")"; | ||
} | ||
function parsePath(path) { | ||
var segments = path instanceof Array ? path : path.replace(/^\/|\/$/g,'').split(/[\s\/]+/g); | ||
var scanner = strscanner(path), | ||
segs = []; | ||
var expr = { value: segments.join('/'), segments: [] }; | ||
while(!scanner.eof()) { | ||
for(var i = 0, n = segments.length; i < n; i++) { | ||
var segment = segments[i], | ||
isParam = (segment.substr(0,1) == ':'); | ||
var cchar = scanner.cchar(); | ||
expr.segments.push({ value: isParam ? segment.substr(1) : segment, param: isParam }); | ||
if(cchar != '/') { | ||
var isParam = false, | ||
name = null, | ||
test = null; | ||
//param flag present? | ||
if(cchar == ":") { | ||
isParam = true; | ||
cchar = scanner.nextChar(); | ||
} | ||
//params not present? mustbe the name | ||
if(cchar != "(") { | ||
name = scanner.nextUntil(/[\/(]/); | ||
cchar = scanner.cchar(); | ||
} | ||
//params present? must be a test | ||
if(cchar == "(") { | ||
scanner.nextChar(); | ||
test = new RegExp(scanGroups(scanner)); | ||
} | ||
segs.push({ | ||
value: name, | ||
param: isParam, | ||
test: test | ||
}); | ||
} | ||
scanner.nextChar(); | ||
} | ||
return expr; | ||
return { | ||
value: module.exports.stringifySegments(segs), | ||
segments: segs | ||
} | ||
} | ||
@@ -165,20 +221,9 @@ | ||
module.exports.stringifySegments = function(segments, params, ignoreParams) { | ||
var stringified = []; | ||
if(!params) params = {}; | ||
for(var i = 0, n = segments.length; i < n; i++) { | ||
var segment = segments[i], segmentValue; | ||
if(!ignoreParams && segment.param) { | ||
segmentValue = params[segment.value] || ':' + segment.value; | ||
} else { | ||
segmentValue = segment.value; | ||
} | ||
stringified.push(segmentValue); | ||
} | ||
return stringified.join('/'); | ||
return segments.map(function(seg) { | ||
var buffer = ""; | ||
if(seg.param) buffer += ":"; | ||
if(seg.value) buffer += seg.value; | ||
if(seg.test) buffer += seg.test.source; | ||
return buffer; | ||
}).join("/"); | ||
} | ||
@@ -185,0 +230,0 @@ |
{ | ||
"name": "crema", | ||
"description": "syntactic sugar for your javascript functions", | ||
"version": "0.1.2", | ||
"repository": {}, | ||
"engines": {}, | ||
"dependencies": {}, | ||
"devDependencies": { | ||
"pegjs": "0.6.2" | ||
}, | ||
"main": "./lib/index.js" | ||
"name": "crema", | ||
"description": "syntactic sugar for your javascript functions", | ||
"version": "0.1.3", | ||
"repository": {}, | ||
"engines": {}, | ||
"dependencies": { | ||
"strscanner": "0.0.x", | ||
"StringScanner": "0.0.x" | ||
}, | ||
"devDependencies": { | ||
"pegjs": "0.6.2" | ||
}, | ||
"main": "./lib/index.js" | ||
} |
28906
9
217
2
+ AddedStringScanner@0.0.x
+ Addedstrscanner@0.0.x
+ AddedStringScanner@0.0.3(transitive)
+ Addedstrscanner@0.0.8(transitive)