couchapp-requirejs-onepageapp/grunt.coffee

193 lines
6.0 KiB
CoffeeScript

path = require "path"
async = require "async"
fs = require "fs"
coffee = require 'coffee-script'
module.exports = (grunt) ->
grunt.loadNpmTasks "grunt-coffee"
grunt.loadNpmTasks "grunt-requirejs"
grunt.initConfig
pkg: "<json:CouchappRequirejsOnepage.json>"
meta:
banner: "/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - " + "<%= grunt.template.today(\"yyyy-mm-dd\") %>\n" + "<%= pkg.homepage ? \"* \" + pkg.homepage + \"\n\" : \"\" %>" + "* Copyright (c) <%= grunt.template.today(\"yyyy\") %> <%= pkg.author.name %>;" + " Licensed <%= _.pluck(pkg.licenses, \"type\").join(\", \") %> */"
concat:
dist:
src: [ "<banner:meta.banner>", "<file_strip_banner:src/<%= pkg.name %>.js>" ]
dest: "dist/<%= pkg.name %>.js"
min:
dist:
src: [ "<banner:meta.banner>", "<config:concat.dist.dest>" ]
dest: "dist/<%= pkg.name %>.min.js"
qunit:
files: [ "test/**/*.html" ]
lint:
files: [ "grunt.js", "src/**/*.js", "test/**/*.js" ]
watch:
files: "<config:lint.files>"
tasks: "lint qunit"
jshint:
options:
curly: true
eqeqeq: true
immed: true
latedef: true
newcap: true
noarg: true
sub: true
undef: true
boss: true
eqnull: true
browser: true
globals:
jQuery: true
# ___ ___ _ __ __
# / _ \ _ _ _ _ / __| |_ _ _ / _|/ _|
# | (_) | || | '_| \__ \ _| || | _| _|
# \___/ \_,_|_| |___/\__|\_,_|_| |_|
#
haml:
dev:
src: ['src/index.haml']
dest: 'app/attachments/'
coffee:
app:
src: ['src/app.coffee']
dest: 'app/'
client:
src: ['src/client.coffee', 'src/library.coffee']
dest: 'dist/'
requirejs:
dir: 'dist-compiled'
appDir: 'dist'
baseUrl: '.'
paths:
'jquery': '../libs/jquery/jquery'
deps: ['../libs/require/require']
modules: [
{
name: "client"
}
]
couchapp:
demo:
app: 'app/app.js'
db: 'http://localhost:5984/demo-couchapp'
install:
appclient:
src: ['dist-compiled/client.js']
dest: 'app/attachments/js'
recess:
dev:
src: ["src/style.less"]
dest: "dist/style.css"
options:
compile: true
grunt.registerTask "default", "coffee:app coffee:client requirejs install:appclient haml:dev couchapp:demo"
grunt.registerTask "test", "default qunit"
# ___ _ _ _ ___ _
# |_ _|_ _ __| |_ __ _| | | / __|___ _ _ __| |_ __ _ _ __ _ __
# | || ' \(_-< _/ _` | | | | (__/ _ \ || / _| ' \/ _` | '_ \ '_ \
# |___|_||_/__/\__\__,_|_|_| \___\___/\_,_\__|_||_\__,_| .__/ .__/
# |_| |_|
grunt.registerMultiTask "couchapp", "Install Couchapp", ->
couchapp = require 'couchapp'
appobj = require(path.join(process.cwd(), path.normalize(this.data.app)))
done = @async()
couchapp.createApp appobj, this.data.db, (app) ->
app.push(done)
# _ _ _ __ __ _ _ _ _ _____ __ __ _
# | || | /_\ | \/ | | | |_ ___ | || |_ _| \/ | |
# | __ |/ _ \| |\/| | |__ | _/ _ \ | __ | | | | |\/| | |__
# |_||_/_/ \_\_| |_|____| \__\___/ |_||_| |_| |_| |_|____|
#
grunt.registerHelper "haml", (src, dest, done) ->
args =
cmd: "haml"
args: [ "--unix-newlines", "--no-escape-attrs", "--double-quote-attributes", src ]
grunt.utils.spawn args, (err, result) ->
console.log err if err
out = path.basename(src, ".haml")
grunt.file.write path.join(dest, out + ".html"), result.stdout
done()
grunt.registerMultiTask "haml", "Compile HAML", ->
done = @async()
sources = grunt.file.expandFiles(this.file.src)
dest = this.file.dest
async.forEachSeries sources, ((path, cb) ->
grunt.helper "haml", path, dest, cb
), done
# ___ _ ___ __ __
# / __|_ _ _ _ _ _| |_ / __|___ / _|/ _|___ ___
# | (_ | '_| || | ' \ _| (__/ _ \ _| _/ -_) -_)
# \___|_| \_,_|_||_\__|\___\___/_| |_| \___\___|
#
grunt.registerTask "gruntjs", "convert grunt.coffee to grunt.js", ->
jFileName = path.join __dirname, "grunt.js"
cFileName = path.join __dirname, "grunt.coffee"
jStat = fs.statSync jFileName
cStat = fs.statSync cFileName
jmTime = jStat.mtime
cmTime = cStat.mtime
if cmTime < jmTime
grunt.verbose.writeln "grunt.js newer than grunt.coffee, skipping compile"
return
cSource = fs.readFileSync cFileName, "utf-8"
try
jSource = coffee.compile cSource,
bare: true
catch e
grunt.fail.fatal e
fs.writeFileSync jFileName, jSource, "utf-8"
grunt.log.writeln "compiled #{cFileName} to #{jFileName}"
# ___
# / __|___ _ __ _ _
# | (__/ _ \ '_ \ || |
# \___\___/ .__/\_, |
# |_| |__/
grunt.registerHelper "install", (src, dest, done) ->
grunt.file.copy src, path.join(dest, path.basename(src))
done() if done
grunt.registerMultiTask "install", "Install Files", ->
sources = grunt.file.expandFiles(this.file.src)
dest = this.file.dest
sources.forEach (path) ->
grunt.helper "install", path, dest, null