Added script to add node_modules/.bin path to PATH; updated Makefile to build correctly.
This commit is contained in:
parent
fac48b727a
commit
d10767f0d0
36
Makefile
36
Makefile
|
@ -1,21 +1,39 @@
|
|||
.PHONY: lib test
|
||||
.PHONY: lib test library docs
|
||||
|
||||
lib_sources:= $(wildcard src/*.coffee)
|
||||
lib_objects:= $(subst src/, lib/, $(lib_sources:%.coffee=%.js))
|
||||
COFFEE= ./node_modules/.bin/coffee
|
||||
PEGJS= ./node_modules/.bin/pegjs
|
||||
DOCCO= ./node_modules/.bin/docco
|
||||
MOCHA= ./node_modules/.bin/mocha
|
||||
|
||||
cof_sources:= $(wildcard src/*.coffee)
|
||||
cof_objects:= $(subst src/, lib/, $(cof_sources:%.coffee=%.js))
|
||||
|
||||
peg_sources:= $(wildcard src/*.peg)
|
||||
peg_objects:= $(subst src/, lib/, $(peg_sources:%.peg=%.js))
|
||||
|
||||
library: $(cof_objects) $(peg_objects)
|
||||
|
||||
default: build
|
||||
|
||||
build: $(lib_objects) lib/tokenizer.js
|
||||
build: $(lib_objects)
|
||||
|
||||
lib:
|
||||
mkdir -p lib
|
||||
|
||||
lib/tumble.js: lib src/tumble.peg
|
||||
./node_modules/.bin/pegjs src/tumble.peg lib/tumble.js
|
||||
|
||||
$(lib_objects): $(lib_sources)
|
||||
$(cof_objects): $(cof_sources)
|
||||
@mkdir -p $(@D)
|
||||
coffee -o $(@D) -c $<
|
||||
$(COFFEE) -o $(@D) -c $<
|
||||
|
||||
$(peg_objects): $(peg_sources)
|
||||
@mkdir -p $(@D)
|
||||
$(PEGJS) $< $@
|
||||
|
||||
docs:
|
||||
$(DOCCO) $(cof_sources)
|
||||
|
||||
echo:
|
||||
echo $(cof_sources)
|
||||
echo $(cof_objects)
|
||||
|
||||
test: test/[0-9]*_mocha.coffee lib/tumble.js lib/parser.js
|
||||
./node_modules/.bin/mocha -R tap -C --compilers coffee:coffee-script -u tdd $<
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
#!/bin/bash
|
||||
|
||||
# /bin comes before /node_modules/.bin because sometimes I want to
|
||||
# override the behaviors provided.
|
||||
|
||||
PROJECT_ROOT=`pwd`
|
||||
PATH="$PROJECT_ROOT/bin:$PROJECT_ROOT/node_modules/.bin:$PATH"
|
||||
export PATH
|
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env coffee
|
||||
|
||||
staticserver = require('node-static')
|
||||
files = new(staticserver.Server)('./dist')
|
||||
|
||||
require('http').createServer((request, response) ->
|
||||
request.addListener 'end', ->
|
||||
files.serve request, response, (err, res) ->
|
||||
if (err)
|
||||
console.error("> Error serving " + request.url + " - " + err.message)
|
||||
response.writeHead(err.status, err.headers)
|
||||
response.end()
|
||||
else
|
||||
console.log("> " + request.url + " - " + res.message)
|
||||
).listen(8081)
|
||||
console.log("> node-static is listening on http://127.0.0.1:8081")
|
|
@ -9,42 +9,58 @@ class Contexter
|
|||
@depth = 0
|
||||
|
||||
has_any: (name) ->
|
||||
_.find this.stack, (o) -> _.has(o, name)
|
||||
# Scan the parse stack from more recent to most distant,
|
||||
# return the reference that contains this name.
|
||||
_.find @stack, (o) -> _.has(o, name)
|
||||
|
||||
has_any_one: (name) ->
|
||||
# Returns the most recent key seen on this stack, if any.
|
||||
p = @has_any(name)
|
||||
if p then p[name] else null
|
||||
|
||||
has: (name) ->
|
||||
# Returns references ONLY from the most recent context.
|
||||
if @stack[0][name]? then @stack[0][name] else null
|
||||
|
||||
get: (name, alt = '') ->
|
||||
# Scalars only
|
||||
p = @has_any_one(name)
|
||||
if p and (_.isString(p) or _.isNumber(p)) then p else alt
|
||||
return p if p and (_.isString(p) or _.isNumber(p))
|
||||
return @render(p)
|
||||
|
||||
once: (obj, cb) ->
|
||||
# Create a new context, execute the block associated with that
|
||||
# context, pop the context, and return the production.
|
||||
@stack.unshift obj
|
||||
r = cb this
|
||||
r = cb @
|
||||
@stack.shift()
|
||||
r
|
||||
|
||||
if: (name, cb) ->
|
||||
# Execute and return this specifiecd block if and only if the
|
||||
# requested context is valid.
|
||||
p = @has_any_one(name)
|
||||
if p then cb(this) else ''
|
||||
if p then cb(@) else ''
|
||||
|
||||
block: (name, cb) ->
|
||||
# Execute and return this specified block if and only if the
|
||||
# requested context is valid and entrant.
|
||||
p = @has_any_one(name)
|
||||
if p and _.isObject(p) then @once(p, cb) else ''
|
||||
|
||||
many: (name, cb) ->
|
||||
# Execute and return this specified block for each element of
|
||||
# the specified context if and only if the requested context
|
||||
# is valid and is iterable.
|
||||
ps = @has(name)
|
||||
if not (ps and _.isArray(ps))
|
||||
return ""
|
||||
(_.map ps, (p) => @once(p, cb)).join('')
|
||||
|
||||
templatize: (name, cb) ->
|
||||
template: (name, cb) ->
|
||||
# Store the specified block under a name. No production.
|
||||
@templates[name] = cb
|
||||
""
|
||||
return ""
|
||||
|
||||
render: (name) ->
|
||||
if @templates[name]? and _.isfunction(@templates[name]) then @templates[name](@) else ""
|
||||
|
|
Loading…
Reference in New Issue