{"_id":"coffee-toaster","_rev":"126-b6fa448b82763dc50bafbb8c9fa04aea","name":"coffee-toaster","description":"Minimalist build system for CoffeeScript.","dist-tags":{"latest":"0.6.13"},"versions":{"0.1.0":{"author":{"name":"Anderson Arboleya","email":"me@nybras.com"},"name":"coffee-toaster","description":"Minimalist inheritance-aware build system for coffee-script projects.","version":"0.1.0","homepage":"TODO: add homepage","repository":{"type":"git","url":"TODO: add repository"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"scripts":{"test":"test.js"},"engines":{"node":"0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.0"},"devDependencies":{},"_npmJsonOpts":{"file":"/Users/nybras/.npm/coffee-toaster/0.1.0/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"coffee-toaster@0.1.0","_engineSupported":true,"_npmVersion":"1.0.27","_nodeVersion":"v0.4.9","_defaultsLoaded":true,"dist":{"shasum":"fb22e29a8e4437a80319d049320f838bd84d8473","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.1.0.tgz","integrity":"sha512-Ti5lbyK9abcW9ucIZf/mJlRD6im0jh7MdTCKaxR5ssWsgJKnpCXdD9J2haACWUrum4HpTRf68+/BvMO7h/cVVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1o93zBBSIi55VUnU17/SAuY0SxG2BHhePdznaXIiGdwIhALzmnwxFxuheehr8fy8nVcRNTgs5UloWbNkQxcpTg1Tu"}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"}]},"0.1.2":{"author":{"name":"Anderson Arboleya","email":"me@nybras.com"},"name":"coffee-toaster","description":"Minimalist dependency management system for coffee-script.","version":"0.1.2","homepage":"TODO: add homepage","repository":{"type":"git","url":"git://github.com/serpentem/coffee-toaster.git"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"scripts":{"test":"test.js"},"engines":{"node":"0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.0"},"devDependencies":{},"_npmJsonOpts":{"file":"/Users/nybras/.npm/coffee-toaster/0.1.2/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"coffee-toaster@0.1.2","_engineSupported":true,"_npmVersion":"1.0.27","_nodeVersion":"v0.4.9","_defaultsLoaded":true,"dist":{"shasum":"bb82a8d93f959a8f89d51eb3bd61bcc99bf3d338","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.1.2.tgz","integrity":"sha512-BAHMMG4xTPLWfaIUQ0M67iusadqCKu52Lkon5FIc/Uklf8lTs6yTu1rw6ZWQNIQz/sSWaTe4Hcvd2XqZQuKGMw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHi8b4BEZdSGzluu1KzgDOflwZWSgEl0PJ/Z4GsHUcx4AiBVePoGke6SmmmC/Zb9E2jo3UfRtemFgBoIhG5ruuJtNg=="}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"}]},"0.2.0":{"author":{"name":"Anderson Arboleya","email":"me@nybras.com"},"name":"coffee-toaster","description":"Minimalist dependency management system for coffee-script.","version":"0.2.0","homepage":"TODO: add homepage","repository":{"type":"git","url":"git://github.com/serpentem/coffee-toaster.git"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"scripts":{"test":"test.js"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.0"},"devDependencies":{},"_npmJsonOpts":{"file":"/Users/nybras/.npm/coffee-toaster/0.2.0/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"coffee-toaster@0.2.0","_engineSupported":true,"_npmVersion":"1.0.27","_nodeVersion":"v0.4.9","_defaultsLoaded":true,"dist":{"shasum":"e5038e4e8a7f8f044850fbb95b0a9529b2bfc884","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.2.0.tgz","integrity":"sha512-sdxdSiQblbD1fnekDjLIs7Vmg5NJy46GhOPWBduaVQLPfx3sCRS2lwaxMaNEgviYzIQ5I1C4ygXHPFx39R9rtA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsmsu9IB9ve5nfJwu6H9xrW8wY9pyTwn/ARk4fJ0VrUQIhAI2ePtNrxDqxOTwBsQc70JE+sGqx3ZB0AUrqISEmy00A"}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"}]},"0.2.1":{"author":{"name":"Anderson Arboleya","email":"me@nybras.com"},"name":"coffee-toaster","description":"Minimalist dependency management system for coffee-script.","version":"0.2.1","homepage":"TODO: add homepage","repository":{"type":"git","url":"git://github.com/serpentem/coffee-toaster.git"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"scripts":{"test":"test.js"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.0","optimist":"0.2.6"},"devDependencies":{},"_npmJsonOpts":{"file":"/Users/nybras/.npm/coffee-toaster/0.2.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"coffee-toaster@0.2.1","_engineSupported":true,"_npmVersion":"1.0.27","_nodeVersion":"v0.4.9","_defaultsLoaded":true,"dist":{"shasum":"8f37f57ba6566895ecdc3f001b24f0846d47c092","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.2.1.tgz","integrity":"sha512-L93B3EOqsL11XNaf0NcTKIzyWX0FNienJvANedg4m9oScwQWojd/2aMaaYmR768oVlAW8GsM1Q3kfCpH0fqJyw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDM/veH5wU8/4FKcBqAhBkd076TJnVx7YesZfWEwPXRcAiEA/GPe/fVw5dmEUDPN1skMAD7o+okmXpo4+t4jm8jq+kQ="}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"}]},"0.2.2":{"author":{"name":"Anderson Arboleya","email":"me@nybras.com"},"name":"coffee-toaster","description":"Minimalist dependency management system for coffee-script.","version":"0.2.2","repository":{"type":"git","url":"git://github.com/serpentem/coffee-toaster.git"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"scripts":{"test":"vows --spec tests/all.js"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.x","optimist":"0.2.x"},"devDependencies":{"vows-bdd":"0.1.0","vows":"0.5.11"},"_npmJsonOpts":{"file":"/Users/nybras/.npm/coffee-toaster/0.2.2/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"coffee-toaster@0.2.2","_engineSupported":true,"_npmVersion":"1.0.27","_nodeVersion":"v0.4.9","_defaultsLoaded":true,"dist":{"shasum":"59ec8a49ecb908ecd09964bedf39d9c2b93367ea","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.2.2.tgz","integrity":"sha512-9kINhZZc5NbzP4yK55XSG9uk7PwF9l45BRa0n4m/AKdTTUJJYeLGlLJ4ehPuEpO9pOfKqvtDkfnE03EGvyn8Xw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCABWLqIpakeQdO53K0hagHwMPazg7MLLYi7YWiB20mEQIhAJI4cZv7EKeGNE7B09uhB1ZVnDqxyCjVLNpl0Ax8zlvy"}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"}]},"0.3.0":{"author":{"name":"Anderson Arboleya","email":"me@nybras.com"},"name":"coffee-toaster","description":"Minimalist dependency management system for coffee-script.","version":"0.3.0","repository":{"type":"git","url":"git://github.com/serpentem/coffee-toaster.git"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"scripts":{"test":"vows --spec tests/all.js"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.x","optimist":"0.2.x"},"devDependencies":{"vows-bdd":"0.1.0","vows":"0.5.11"},"_npmJsonOpts":{"file":"/Users/nybras/.npm/coffee-toaster/0.3.0/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"coffee-toaster@0.3.0","_engineSupported":true,"_npmVersion":"1.0.27","_nodeVersion":"v0.4.9","_defaultsLoaded":true,"dist":{"shasum":"61dc6f4a731910c60026c285864000dd0fd955f4","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.3.0.tgz","integrity":"sha512-PZFzdiN9eObM9pekL0dYS61CRyKx2p3q3/CTit7Oa8QYF0j9qbOY6BRRKwKd5nayLODZ1vaaTHEjj8SVIRRi9A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDv5cWyKwMq0T3OGsOGU1n7YE2SDvAXv4PvYLM6yqR2IAIhAIl422QWjx6VrGZS2TdjOaV5GE9B4vTqfy4f0T+Sxfa+"}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"}]},"0.3.5":{"author":{"name":"Anderson Arboleya","email":"me@nybras.com"},"name":"coffee-toaster","description":"Minimalist dependency management system for coffee-script.","version":"0.3.5","repository":{"type":"git","url":"git://github.com/serpentem/coffee-toaster.git"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"files":["build"],"bin":{"toaster":"./bin/toaster"},"scripts":{"test":"vows --spec tests/all.js"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.x","optimist":"0.2.x"},"devDependencies":{"vows-bdd":"0.1.0","vows":"0.5.11"},"_npmJsonOpts":{"file":"/Users/nybras/.npm/coffee-toaster/0.3.5/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"coffee-toaster@0.3.5","_engineSupported":true,"_npmVersion":"1.0.27","_nodeVersion":"v0.4.9","_defaultsLoaded":true,"dist":{"shasum":"8e4a1a644de42d2b93c0531929ccd9930e6e3354","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.3.5.tgz","integrity":"sha512-0HZOcMqwTvaLBL/Nb0fViRUAfNJn+ozXTfiTYQKS4yD0Mgi4tcj5Ajl33oc0Ipvj/FJOmmCqoeGW90cTrV2b2A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMr3IECvJSiqYDYbwwdwM9O+oes8iUa1mOarWxH6euiQIhAOb5oKXuNqCL6HFD/zmqgtv+wlhsh1GAMVlJCTRZnU/P"}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"}]},"0.3.6":{"author":{"name":"Anderson Arboleya","email":"me@nybras.com"},"name":"coffee-toaster","description":"Minimalist dependency management system for coffee-script.","version":"0.3.6","repository":{"type":"git","url":"git://github.com/serpentem/coffee-toaster.git"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"files":["build"],"bin":{"toaster":"./bin/toaster"},"scripts":{"test":"vows --spec tests/all.js"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.x","optimist":"0.2.x"},"devDependencies":{"vows-bdd":"0.1.0","vows":"0.5.11"},"_npmUser":{"name":"nybras","email":"me@nybras.com"},"_id":"coffee-toaster@0.3.6","_engineSupported":true,"_npmVersion":"1.0.103","_nodeVersion":"v0.4.9","_defaultsLoaded":true,"dist":{"shasum":"170a41291d3ef15b6a4a6c58b9617387b4595536","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.3.6.tgz","integrity":"sha512-1ZMiKU/qxx9ZMCOruld18G5c4uzhKlhTZGRBigCZGxJ1nto+HWREwqAk/rOVmdpzjsqJwqWKIvAGIy2hJsiicQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsNx3rX98WDSk7Xej4EHAwm7ILmKSsIi361KUiSKbnCwIgTAmD8fqcmZtWgtusNPcZ8i8YqYwSZVBPezerKd/yYSE="}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"}]},"0.3.7":{"author":{"name":"Anderson Arboleya","email":"me@nybras.com"},"name":"coffee-toaster","description":"Minimalist dependency management system for coffee-script.","version":"0.3.7","repository":{"type":"git","url":"git://github.com/serpentem/coffee-toaster.git"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"files":["build"],"bin":{"toaster":"./bin/toaster"},"scripts":{"test":"vows --spec tests/all.js"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.x","optimist":"0.2.x"},"devDependencies":{"vows-bdd":"0.1.0","vows":"0.5.11"},"_npmUser":{"name":"nybras","email":"me@nybras.com"},"_id":"coffee-toaster@0.3.7","_engineSupported":true,"_npmVersion":"1.0.103","_nodeVersion":"v0.4.9","_defaultsLoaded":true,"dist":{"shasum":"cc617856547378e8a16b449abfd5fee3afdc7f00","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.3.7.tgz","integrity":"sha512-0cxf/4AzLC9zcPxdFbj6sNY9btdiSWsaMxFJDL3KpzA2ESwCi3yQm6z7zZ4fyl88zrDqkT9AGymYLanQZERjLg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCqijwkKRxqy9oOqX6RJ8QpG8Um3WCCvS16yhubIdXzcwIgQmNwhfGYF5SBsaMYV62g6yDbwYippbvLYVOu2rosWss="}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"}]},"0.3.8":{"author":{"name":"Anderson Arboleya","email":"me@nybras.com"},"name":"coffee-toaster","description":"Minimalist dependency management system for coffee-script.","version":"0.3.8","repository":{"type":"git","url":"git://github.com/serpentem/coffee-toaster.git"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"files":["build"],"bin":{"toaster":"./bin/toaster"},"scripts":{"test":"vows --spec tests/all.js"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.x","optimist":"0.2.x"},"devDependencies":{"vows-bdd":"0.1.0","vows":"0.5.11"},"_npmUser":{"name":"nybras","email":"me@nybras.com"},"_id":"coffee-toaster@0.3.8","_engineSupported":true,"_npmVersion":"1.0.103","_nodeVersion":"v0.4.9","_defaultsLoaded":true,"dist":{"shasum":"15912ffd3e5504296189b9e192f3d94aec9f2a20","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.3.8.tgz","integrity":"sha512-hkM2Yl28sCLjUWaLUXM2KIYo6wsTfEpXiXgRONhNxYvg4yQiGbUn9tJDSOsGFj3M+T+cMfgdfKqYwwhamxiaXg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9iXV/wvx6/Lp0rApDq0+RS4lj5hNnvgIUktOgI1vvJgIgFwNWiYjY6hH78tfOnN8CWwEM4lJ1EGVEKWUIzOCJlLU="}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"}]},"0.3.9":{"author":{"name":"Anderson Arboleya","email":"me@nybras.com"},"name":"coffee-toaster","description":"Minimalist dependency management system for coffee-script.","version":"0.3.9","repository":{"type":"git","url":"git://github.com/serpentem/coffee-toaster.git"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"scripts":{"test":"vows --spec tests/all.js"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.x","optimist":"0.2.x"},"devDependencies":{"vows-bdd":"0.1.0","vows":"0.5.11"},"_npmUser":{"name":"nybras","email":"me@nybras.com"},"_id":"coffee-toaster@0.3.9","_engineSupported":true,"_npmVersion":"1.0.103","_nodeVersion":"v0.4.9","_defaultsLoaded":true,"dist":{"shasum":"b734557eada6b3fb4697916d46b5f0953caffab5","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.3.9.tgz","integrity":"sha512-icGqA8nzQcZ1Ub+ZayJgEPUmnI2vxwIAfdNjKQ4HS0g2gGYRRxPTt3p4o/sxR9SuWKDH2Oo2vTjjgJe7uoBetw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDgwMb65AztjYzPn0phvR5gs/LO723v7o7VP0z3vfGaEAiEA0N3KKcfACoPZ8tRwpiE9QF4YRoESouLezj26/mU/tfQ="}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"}]},"0.5.0":{"author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"name":"coffee-toaster","description":"Minimalist dependency management system for coffee-script.","version":"0.5.0","repository":{"type":"git","url":"git://github.com/serpentem/coffee-toaster.git"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.x","uglify-js":"1.1.1","optimist":"0.2.x","growl":"1.2.0"},"_npmUser":{"name":"arboleya","email":"anderson@arboleya.me"},"_id":"coffee-toaster@0.5.0","devDependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.15","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"7fddc8a3c25168f02009957c416940fe62cb36b4","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.5.0.tgz","integrity":"sha512-mZbKsH5bzEkT+9dMBchd2YN2jqPdoqiYMVJdDDgx6D4kxvhBIEkeL4IlbC/GNtcFJP8D8GO9nA5tkkudkPr/2A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDim78vxDBQZOO7uYY6uDCAv7jyY1JMP6smrNYp6auv6AiBqWRBYr5P5l18efYhLvxBLDmHBlCO9kT+wlJyCLwKMUQ=="}]},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nVersion 0.5.0\n\nCoffeeToaster is a dependency manager and build system for CoffeeScript.\n\nThe main purpose is to provide a very comfortable environment to code large<BR>\nlibraries using such things as class definitions and namespaces, in order to<BR>\nto help avoid naming collisions in your architecture.\n\nA smart 'require' powered by wild-cards is also provided, together with a<BR>\npowerful build system that concatenates everything and outputs a single<BR>\njavascript release file that can be even minified if you like.\n\nThe build system was developed to offer vendors support as well as merging<BR>\nroutines for multiple modules, with specific ordering options. If you are<BR>\nadept of the extends directive in CoffeeScript, Toaster will even check if<BR>\nyou have required base classes for the classes that extends another.\n\nThe CLI program informs you about everything that is happening when a new<BR>\nfile is created, deleted or modified. You can even drag'n'drop a folder with<BR>\nlots of CoffeeScript files inside your source folder and everything will be<BR>\nhandled gracefully.\n\nIf you are building for the browser you can use the debug option to compile<BR>\neverything individually -- plus, node targeted support is on the way. In <BR>\ndebug mode you'll be gifted with a boot-loader that will load every file in<BR>\nthe proper order according your needs.\n\nKeep on reading this README, and please do not hesitate to open a feature<BR>\nrequest or a bug report.<BR>\nhttps://github.com/serpentem/coffee-toaster/issues\n\nIn case of any doubts, drop an email at the email group and luckily you'll<BR>\nbe answered sooner than later.<BR>\nhttps://groups.google.com/group/coffee-toaster\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n * You can require any file whenever your want to.\n* Vendors management\n* Multiple modules support in the same environment\n* Micro build routines across all modules and vendors\n* Packaging System & Namespaces\n * Automagic packaging system that uses folders as namespaces, \n* Exports aliases\n * Lets you set a top package to list all your modules\n* Broken and circular-loop dependencies validation\n * Helps you prevent some mistakes with circular dependencies loops and<BR>\n alerts you against dependencies not found\n* Live syntax-check\n * Precise live syntax-check with file path and line number information\n* Growl support\n * Warning/Error messages are shown even in growl\n* Debug Mode\n * In order to provide an easy debugging routine once inside the browser,<BR>\n all files will be compiled individually into its respectives '.js' versions<BR>\n and a smart boot-loader (toaster.js) is provided to load every file<BR>\n orderly. Just include this boot-loader in your html file and voilà\n* Minify support\n * Aiming to be practical, the output can be even minified (using uglify-js)\n* Scaffolding routines\n * Interactive creation of a very simple skeleton for new projects and<BR>\n config file for existent projects\n\n\n# Installation\n\n\tnpm install -g coffee-toaster\n\n# Usage\n\n## Creating a new App\n\nCoffeeToaster suggests a very simple structure for initial projects, you can<BR>\ncustomize it as you like.\n\n\ttoaster -n mynewapp\n\nYou will be asked for some things:\n\n1. **src** - Relative folderpath to your source folder.\n  * i.e.: src\n1. **main module** - Name of your main module folder (shoud be inside src).\n  * i.e.: app\n1. **release** - Release filepath for your main build routine.\n  * i.e.: release/app.js\n\nConsidering all the default values, you'll end up with a structure as such:\n\n\tmynewapp/\n\t├── release\n\t├── src\n\t│   └── app\n\t├── toaster.coffee\n\t└── vendors\n\nThe toaster.coffee file will have this content:\n\n````ruby\n\t# ROOT SRC FOLDER\n\tsrc 'src'\n\n\t# MODULES\n\tmodule 'app'\n\n\t# BUILD ROUTINES\n\tbuild \"main\"\n\t\tmodules: ['app']\n\t\trelease: 'release/app.js'\n\t\tdebug: 'release/app-debug.js'\n````\n\nConfigure everything following the inline help and you'll end up with a<BR>\nworking project.\n\n## Toasting an existing project\n\nYour can toast an existing project as such:\n\n\tcd existing-project\n\ttoaster -i\n\nOr:\n\n\ttoaster -i existing-project\n\nSome of the same information (src, release) will be required -- answer<BR>\neverything according to your project's structure.\n\nA 'toaster.coffee' file will be created inside it.\n\n## When the magic happens\n\nTo see all that CoffeeToaster can do for you, enter the project folder and<BR>\ntype 'toaster -w' after creating or toasting a new project:\n\n\tcd existing-project\n\ttoaster -w\n\nOr:\n\n\ttoaster -w existing-project\n\nYour release file will be saved according to your needs.\n\n# Debug Mode\n\nIn debug mode (option -d) all files will be compiled individually inside a<BR>\nfolder called \"toaster\" in the same directory you've pointed your debug file,<BR>\n\taiming to ease the debugging process.\n\n\tcd existing-project\n\ttoaster -wd\n\nFor example, if you have \"release/app-debug.js\", a folder will be created in<BR>\n\"release/toaster\" and all your CoffeeScript files will be compiled to<BR>\nJavascript within.\n\nBellow is a representative directory structure:\n\n\t├── release\n\t│   ├── app-debug.js\n\t│   ├── app.js\n\t│   ├── index.html\n\t│   └── toaster\n\t│       └── basic\n\t│           ├── app.js\n\t│           ├── letters\n\t│           │   ├── a.js\n\t│           │   └── b.js\n\t│           ├── repeating\n\t│           │   ├── a.js\n\t│           │   └── b.js\n\t│           ├── single\n\t│           │   └── script.js\n\t│           └── toplevel.js\n\t├── src\n\t│   └── basic\n\t│       ├── app.coffee\n\t│       ├── letters\n\t│       │   ├── a.coffee\n\t│       │   └── b.coffee\n\t│       ├── repeating\n\t│       │   ├── a.coffee\n\t│       │   └── b.coffee\n\t│       ├── single\n\t│       │   └── script.coffee\n\t│       └── toplevel.coffee\n\t├── toaster.coffee\n\t└── vendors\n\t    ├── _.js\n\t    └── jquery.js\n\n\nThe debug file you've chosen is the boot-loader responsible to load all your<BR>\nfiles into the right order.\n\nSo in your .html you'll have two options:\n\n**1)** Include your release file (release/app.js)\n\n````html\n\t<script src=\"app.js\"></script>\n````\n \n**2)** Include the toaster boot-loader (release/toaster/toaster.js)\n\n````html\n\t<script src=\"app-debug.js\"></script>\n````\n\n\n# How does everything work?\n\nCoffeeToaster will create a file called 'toaster.coffee' in your app main folder.\n\n## Config File (toaster.coffee)\n\nThis file contains information on the modules you have in your app, i.e:\n\n````ruby\n\n\tsrc 'src'\n\t\n\tmodule 'basic'\n\t\tvendors: ['_', 'jquery']\n\t\tbare: false\n\t\tpackaging: true\n\t\texpose: 'window'\n\t\tminify: false\n````\n\nSo when you call 'toaster -w' in this directory, this config is loaded and<BR>\nevery file and folder inside 'src' folder will be watched.\n\nIf debug is enabled (option -d), files will be also compiled individually<BR>\nfor a sane debugging routine, inside the browser.\n\nEvery time something changes, CoffeeToaster re-compiles all of your<BR>\napplication by:\n\n* collecting all .coffee files and processing everything, adding package<BR>\ndeclarations to class definitions, based on the folder they are located\n* re-ordering everything, always defining files and classes before<BR>\nthey're needed\n\nHold it! How the hell does it know when my files or classes are needed?\n\n## Import directive\n\nThe import directive is known by:\n\n * #<< mvc/views/user_view\n * #<< utils/*\n\nBy putting '#<< package/name/View' in your CoffeeScript file, you're telling<BR>\nCoffeeToaster that there's a dependency.\n\nWild cards '#<< utils/*' are also accepted as a handy option.\n\n## Vendors\n\nYou can define vendors such as:\n\n````ruby\n\n\tvendor 'jquery', 'vendors/jquery.js'\n\tvendor '_', 'vendors/_.js'\n````\n\nBasically you name it and inform where it is, and the file must be purely<BR>\nin javascript, preferably minified ones -- Toaster will not compile or<BR>\nminify them, only concatenate everything.\n\n\n## Multi Modules\n\nYou can have as many modules as you want such as:\n\n````ruby\n\n\tsrc 'src'\n\t\n\tmodule 'foo'\n\t\tvendors: ['_', 'jquery']\n\n\tmodule 'boo'\n\t\tvendors: ['towerjs', 'dojo']\n````\n\nIn order to concatenate multiple modules, you will need to use build routines.\n\n## Build Routines\n\nBuild routines are simple specifications where you tell Toaster how to build<BR>\nyour library. You can have as many modules and vendors as you want.\n\n````ruby\n\n\tbuild \"main\"\n\t\tmodules: ['module1', 'module2', ...N]\n\t\trelease: './release/app.js'\n\t\tdebug: './release/app-debug.js'\n````\n\nNote that the array order you choose when informing the modules for your<BR>\nbuild will be preserved.\n\n## Minify Support\n\nTo minify you release file all you need to do is turn on the minify<BR>\nproperty in the 'toaster.coffee' file for your desired module.\n\n````ruby\n\t\n\tmodule 'foo'\n\t\tvendors: ['_', 'jquery']\n\t\tminify: true\n````\n\n# Examples\n\nYou'll certainly find some useful resources in the two examples provided.<BR>\nExamine them and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the examples and try different config options<BR>\nalways looking for the differences in your javascript release file.\n\n## Basic Example\n\nThis example uses:\n\n* One single module\n* Two vendors\n\nThere are files and classes with the same name to show the packaging system.\n\nThe packaging system will address every class definition to a namespace,that<BR>\nis computed automatically according to the path where your physical file is.\n\nImagine that you have a class \"Foo\" inside a \"my/path/foo.coffee\" file. This<BR>\nclass will be addressed to the namespace \"my.path\", so you can instantiate it:\n\n````ruby\n\n\t# usual way\n\tnew Foo\n\t\n\t# unique way using the packaging system\n\tnew my.path.Foo\n```\n\n### Config file \n\nThe config file explained (exemplified):\n\n```ruby\n\n\t# VENDORS\n\tvendor 'jquery', 'vendors/jquery.js'\n\tvendor '_', 'vendors/_.js'\n\n\n\t# ROOT SRC FOLDER\n\tsrc 'src'\n\n\n\t# MODULES\n\tmodule 'basic' # module folder (inside src)\n\t\tvendors: ['_', 'jquery'] # (ordered vendor's array)\n\t\tbare: false # default = false (compile coffeescript with bare option)\n\t\tpackaging: true # default = true\n\t\texpose: \"window\" # default = null (if informed, link all objects inside it)\n\t\tminify: false # default = false (minifies release file only)\n\n\n\t# BUILD ROUTINES\n\tbuild \"main\"\n\t\tmodules: ['basic']\n\t\trelease: './release/app.js'\n\t\tdebug: './release/app-debug.js'\n```\n\n> [Source Code](https://github.com/serpentem/coffee-toaster/tree/master/examples/basic)\n\n## Multi-Modules Example\n\nThis example uses:\n\n* Two modules\n* Two build-configs with different merging options to show possibilities\n\nThe packaging system is enabled here as well, try different options and do<BR>\nnot forget to check the<BR> differences in your javascript release file.\n\n> [Source Code](https://github.com/serpentem/coffee-toaster/tree/master/examples/multimodules)\n\n# Issues\n\nDo not hesitate to open a feature request or a bug report.<BR>\nhttps://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\n\nA place to talk about it, ask anything, get in touch. Luckily you'll<BR>\nbe answered sooner than later.<BR>\nhttps://groups.google.com/group/coffee-toaster\n\n# Changelog\n\n## 0.5.0 - 04/12/2012\n * Packaging system completely revamped\n * Added some beauty to log messages\n * Growl integration implemented\n * Expose / Export aliases - export/expose your definitions to another scope\n * Minify support added\n * On/Off switches for:\n  * Bare option to compile CoffeeScript with the 'bare' option\n  * Packaging system\n  * Minify\n\n## 0.3.8 - 10/29/2011\n * Fixing bugs in generators\n * Fixing a bunch of small emergencial bugs\n\n## 0.3.7 - 10/29/2011\n * Simplify config file syntax [feature done [#8](https://github.com/serpentem/coffee-toaster/issues/8)]\n * Adding buid routines [feature done [#9](https://github.com/serpentem/coffee-toaster/issues/9)]\n * Adding support for vendors across modules and build configs [feature [#10](https://github.com/serpentem/coffee-toaster/issues/10)]\n\n## 0.3.6 - 10/25/2011\n * Critical bugfixes in the reorder routine\n * Optimizing architecture\n * Condensing src scructure\n\n## 0.3.5 - 10/24/2011\n * Avoiding tmp files from being watched [closing issue [#4](http://github.com/serpentem/coffee-toaster/issues/4)]\n * Adding support for ordinary files again (with no class definitions inside)\n * Now all requirements must to be done based on filepath with slash<BR>\nnotation \"foldera/folderb/filename\"\n * Adding extra base class validation\n * Lots of improvements and bugfixes\n\n## 0.3.0 - 10/16/2011\n * Refactoring entire Script class\n * Support for extends directive have been removed, now all dependencies<BR>\nmust be informed through '#<< package.name.ClassName'\n * Support for files without class declarations was (sadly) removed\n * Adding full package support automagically\n * Implementing wild-cards on requirements '#<< package.name.*'\n\n## 0.2.2 - 10/02/2011\n * Starting tests implementation (using Vows BDD)\n * Implementing debug mode (-d --debug). Files are compiled individually<BR>\nplus a boot file (toaster.js) file that will load everything in the right order.\n * Improving interactive processes to become good guessers\n * Adding support for file requirements based on 'a/b/c/filepath'<BR>\nsimultaneously with class requirements based in 'ClassName' notation (both<BR>\nare case sensitive)\n * Bumping 'build/coffee-toaster' submodule to use tag 0.2.2 (level up)\n\n## 0.2.1 - 09/22/2011\n * Implementing OptionParser (using Optimist)\n\n## 0.2.0 - 09/18/2011\n * Tag 0.1.2 is now used as submodule in order to self-toast (aka manage<BR>\ndependencies) of new versions of CoffeeToaster itself, starting from now\n * Refactoring everything, classes are now one per file, using dependency<BR>\ndirectives from CoffeeToaster itself. From now on, things should evolve<BR>\na little easier.\n * Individualizing CoffeeScript handling\n * Starting plans for CoffeeKup and CoffeeCss support\n\n## 0.1.2 - 09/17/2011\n * Fixing compilation method that was requiring coffee-script to be installed\n * Adding precise error handling\n * Checking circular dependency conflicts [closing issue [#2](http://github.com/serpentem/coffee-toaster/issues/2)]\n\n## 0.1.1 - 09/16/2011\n * Adding basic error handling [closing issue [#1](http://github.com/serpentem/coffee-toaster/issues/1)]\n\n## 0.1.0 - 09/11/2011\n * Scaffolding routine for new projects\n * Scaffolding routine for configuration file (toaster.coffee)\n * Dependency handlers:\n  * Extends directive (class A extends B)\n  * Include directive (#<< ClassNameA, ClassNameB..)\n","maintainers":[{"name":"nybras","email":"me@nybras.com"},{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.5.5":{"author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"name":"coffee-toaster","description":"Dependency manager and build system for CoffeeScript.","version":"0.5.5","repository":{"type":"git","url":"git://github.com/serpentem/coffee-toaster.git"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.x","uglify-js":"1.1.1","optimist":"0.2.x","growl":"1.2.0"},"_npmUser":{"name":"arboleya","email":"anderson@arboleya.me"},"_id":"coffee-toaster@0.5.5","devDependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.15","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"902004ef8137b756440e405bbfc974193184f57b","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.5.5.tgz","integrity":"sha512-X6IVGrJVz01ir5fTK3k8zeLXT4otPo8kzyh00Jx4R4e8KkMcx+U9Fy4DqqUBolDQvAtPvjmQg/QaCKBXcKbRBw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoXandUss0tC3Q5RhU6HGo7XmDEcEBpxdA6qZVoartZAIhALWnr6JTfCWDMxqIYEmr+UUwVcXaU6cttNEaN7Fdf8uV"}]},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nVersion 0.5.5\n\nCoffeeToaster is a dependency manager and build system for CoffeeScript.\n\nThe main purpose is to provide a very comfortable environment to code large<BR>\nlibraries using such things as class definitions and namespaces, in order to<BR>\nto help avoid naming collisions in your architecture.\n\nA smart 'require' powered by wild-cards is also provided, together with a<BR>\npowerful build system that concatenates everything and outputs a single<BR>\njavascript release file that can be even minified if you like.\n\nThe build system was developed to offer vendors support, with specific<BR>\nordering options. If you are adept of the extends directive in CoffeeScript,<BR>\nToaster will even check if you have required base classes for the classes<BR>\nthat extends another.\n\nThe CLI program informs you about everything that is happening when a new<BR>\nfile is created, deleted or modified. You can even drag'n'drop a folder with<BR>\nlots of CoffeeScript files inside your source folder and everything will be<BR>\nhandled gracefully.\n\nIf you are building for the browser you can use the debug option to compile<BR>\neverything individually -- plus, node targeted support is on the way. In <BR>\ndebug mode you'll be gifted with a boot-loader that will load every file in<BR>\nthe proper order according your needs.\n\nI should also mention that it's not some kind of AMD or CJS implementation,<BR>\nas you may be thinking. It's much more like a new point of view based on my<BR>\nspecific needs and personal taste, which I didn't come up with a fancy name yet.\n\nKeep on reading this README, and please do not hesitate to open a feature<BR>\nrequest or a bug report.<BR>\nhttps://github.com/serpentem/coffee-toaster/issues\n\nIn case of any doubts, drop an email at the email group and luckily you'll<BR>\nbe answered sooner than later.<BR>\nhttps://groups.google.com/group/coffee-toaster\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n * You can require any file whenever your want to\n* Vendors management\n* Packaging System & Namespaces\n * Automagic packaging system that uses folders as namespaces\n* Micro build routines to help you customize and release your peace of code\n* Exports aliases\n * Lets you set a top package to list all your modules\n* Broken and circular-loop dependencies validation\n * Helps you prevent some mistakes with circular dependencies loops and<BR>\n alerts you against dependencies not found\n* Live syntax-check\n * Precise live syntax-check with file path and line number information\n* Growl support\n * Warning/Error messages are shown even in growl\n* Debug Mode\n * In order to provide an easy debugging routine once inside the browser,<BR>\n all files will be compiled individually into its respectives '.js' versions<BR>\n and a smart boot-loader (your-debug-file.js) is provided to load every file<BR>\n orderly. Just include this boot-loader in your html file and voilà\n* Minify support\n * Aiming to be practical, the output can be even minified (using uglify-js)\n* Scaffolding routines\n * Interactive creation of a very simple skeleton for new projects and<BR>\n config file for existent projects\n\n\n# Installation\n\n\tnpm install -g coffee-toaster\n\n# Usage\n\n## Creating a new App\n\nCoffeeToaster suggests a very simple structure for initial projects, you can<BR>\ncustomize it as you like.\n\n\ttoaster -n mynewapp\n\nYou will be asked for some things:\n\n1. **source folder** - Relative folderpath to your source folder.\n  * i.e.: src\n1. **release file** - Path to your release file.\n  * i.e.: www/js/app.js\n1. **http folder** - The folderpath to reach your debug file through http,<BR>\nin case it is  not inside your root directory. Imagine that the 'www' is<BR>\nyour root folder, so you'd just need to inform 'js' as the http folder.\n  * i.e.: js\n\nYour release file will not be affected by the 'http folder' property.\n\nConsidering all the default values, you'll end up with a structure as such:\n\n\tmyawsomeapp/\n\t├── src\n\t├── vendors\n\t├── www\n\t    └── js\n\t└── toaster.coffee\n\n\t4 directories, 1 file\n\nThe toaster.coffee file will have this content:\n\n````ruby\n\n\t# => SRC FOLDER\n\t\ttoast 'src'\n\t\t\t# => VENDORS (optional)\n\t\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t\t# => OPTIONS (optional, default values listed)\n\t\t\t# bare: false\n\t\t\t# packaging: true\n\t\t\t# expose: ''\n\t\t\t# minify: false\n\n\t\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\t\thttpfolder: 'js'\n\t\t\trelease: 'www/js/app.js'\n\t\t\tdebug: 'www/js/app-debug.js'\n````\n\n## Toasting an existing project\n\nYour can toast an existing project as such:\n\n\tcd existing-project\n\ttoaster -i\n\nOr:\n\n\ttoaster -i existing-project\n\nSome of the same information (src, release and http folder) will be required,<BR>\nanswer everything according to your project's structure.\n\nA 'toaster.coffee' file will be created inside of it.\n\n## When the magic happens\n\nTo see all that CoffeeToaster can do for you, enter the project folder and<BR>\ntype 'toaster -w' after creating or toasting a new project:\n\n\tcd existing-project\n\ttoaster -w\n\nOr:\n\n\ttoaster -w existing-project\n\nYour release file will be saved according your configuration.\n\n# Debug Mode\n\nIn debug mode (option -d) all files will be compiled individually inside a<BR>\nfolder called \"toaster\" in the same directory you've pointed your debug file,<BR>\n\taiming to ease the debugging process.\n\n\tcd existing-project\n\ttoaster -wd\n\nFor example, if you have \"release/app-debug.js\", a folder will be created in<BR>\n\"release/toaster\" and all your CoffeeScript files will be compiled to<BR>\nJavascript within.\n\nBellow is a representative directory structure:\n\n\tusage/\n\t├── vendors\n\t├── src\n\t│   ├── app\n\t│   │   └── app.coffee\n\t│   ├── artists\n\t│   │   ├── progressive\n\t│   │   │   ├── kingcrimson.coffee\n\t│   │   │   ├── themarsvolta.coffee\n\t│   │   │   └── tool.coffee\n\t│   │   └── triphop\n\t│   │       ├── lovage.coffee\n\t│   │       ├── massiveattack.coffee\n\t│   │       └── portishead.coffee\n\t│   └── genres\n\t│       ├── progressive.coffee\n\t│       └── triphop.coffee\n\t├── www\n\t│   ├── index.html\n\t│   └── js\n\t│       ├── app.js\n\t│       ├── app-debug.js\n\t│       └── toaster\n\t│           ├── app\n\t│           │   └── app.js\n\t│           ├── artists\n\t│           │   ├── progressive\n\t│           │   │   ├── kingcrimson.js\n\t│           │   │   ├── themarsvolta.js\n\t│           │   │   └── tool.js\n\t│           │   └── triphop\n\t│           │       ├── lovage.js\n\t│           │       ├── massiveattack.js\n\t│           │       └── portishead.js\n\t│           └── genres\n\t│               ├── progressive.js\n\t│               └── triphop.js\n\t└── toaster.coffee\n\nThe debug file you've chosen is the boot-loader responsible to load all your<BR>\nfiles into the right order.\n\nSo in your .html you'll have two options:\n\n**1)** Include your release file.\n\n````html\n\t<script src=\"js/app.js\"></script>\n````\n \n**2)** Include the toaster boot-loader (your debug mode).\n\n````html\n\t<script src=\"js/app-debug.js\"></script>\n````\n\n# How does everything work?\n\nCoffeeToaster will create a file called 'toaster.coffee' in your app main folder.\n\n## Config File (toaster.coffee)\n\nThis file contains information of your app, i.e:\n\n````ruby\n\n\t# => SRC FOLDER\n\t\ttoast 'src'\n\t\t\t# => VENDORS (optional)\n\t\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t\t# => OPTIONS (optional, default values listed)\n\t\t\t# bare: false\n\t\t\t# packaging: true\n\t\t\t# expose: ''\n\t\t\t# minify: false\n\n\t\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\t\thttpfolder: 'js'\n\t\t\trelease: 'www/js/app.js'\n\t\t\tdebug: 'www/js/app-debug.js'\n````\n\n### Vendors\n\nYou can define vendors such as:\n\n````ruby\n\n\tvendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely<BR>\njavascript, preferably minified ones -- Toaster will not compile or minify<BR>\nthem, only concatenate everything.\n\n### Bare\n\nIf true, compile your CS files without the top-level function safety wrapper:\n\n````javascript\n\n\t(function() {\n\t  # bunch of code\n\t}).call(this);\n````\n\nSo you will end up with just 'bunch of code':\n\n\n````javascript\n\n\t# bunch of code\n````\n\n### Packaging\n\nIf true, use all your folders as namespaces to your class definitions.\n\nIf you have class 'Lovage' declared inside the \"artists/triphop\" folder, you<BR>\ncan access it through 'artists.triphop.Lovage'.\n\n````javascript\n\n\t# usual way\n\tnew Lovage\n\t\n\t# with packaging=true\n\tnew artists.triphop.Lovage\n````\n\n### Expose\n\nIf informed, list all you packages of classes in the given scope. If you use<BR>\n'window' as your expose scope, your classes will be available also in the<BR>\nwindow object -- or whatever scope you inform.\n\n````javascript\n\t\n\tnew window.artists.triphop.Lovage\n````\n\n### Minify\n\nIf true, minify your release file -- debug files are never minified.\n\n### HTTP Folder\n\nThe folder path to reach your debug file through http, in case it is not<BR>\ninside your root directory. Imagine that the 'www' is your root folder, and<BR>\nyou have a 'js' folder inside of it with your 'debug.js' file inside of it.\n\nFollowing this case you'd just need to inform 'js' as your http folder.\n\nSo the declarations inside the debug boot loader will follow this location<BR>\nin order to import your scripts in debug mode, prepending your http folder<BR>\nto all file paths.\n\nYour release file will not be affected by this property.\n\n### Release\n\nThe file path to your release file.\n\n### Debug\n\nThe file path to your debug file.\n\n## Conlusion\n\nSo when you call 'toaster -w' in this directory, this config is loaded and<BR>\nevery file and folder inside 'src' folder will be watched.\n\nIf debug is enabled (option -d), files will be also compiled individually<BR>\nfor a sane debugging routine inside the browser, in the same directory you<BR>\nhave your debug file.\n\nEvery time something changes, CoffeeToaster re-compiles all of your<BR>\napplication by:\n\n* collecting all .coffee files and processing everything, adding package<BR>\ndeclarations to class definitions based on the folder they are located\n* re-ordering everything, always defining files and classes before<BR>\nthey're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\nHold it! How the hell does it know when my files or classes are needed?\n\n## Import directive\n\nThe import directive is known by:\n\n * #<< app/views/user_view\n * #<< app/utils/*\n\nBy putting '#<< app/views/user_view' in your CoffeeScript file, you're<BR>\ntelling CoffeeToaster that there's a dependency.\n\nWild cards '#<< app/utils/*' are also accepted as a handy option.\n\n# Examples\n\nYou'll certainly find some useful resources in the usage example provided.<BR>\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config<BR>\noptions, always looking for the differences in your javascript release file.\n\n> [Source Code](https://github.com/serpentem/coffee-toaster/tree/master/usage)\n\n# Issues\n\nDo not hesitate to open a feature request or a bug report.<BR>\nhttps://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\n\nA place to talk about it, ask anything, get in touch. Luckily you'll<BR>\nbe answered sooner than later.<BR>\nhttps://groups.google.com/group/coffee-toaster\n\n# Changelog\n\n## 0.5.5 - 04/19/2012\n * Config file was re-written to be more practical\n * Build routines removed in favor of simplicity\n * Multi-modules option is default now, without configuring anything\n * HTTP Folder property added to 'toaster.coffee' config file\n * Scaffolding routines improved according the design changes\n\n## 0.5.0 - 04/12/2012\n * Packaging system completely revamped\n * Added some beauty to log messages\n * Growl integration implemented\n * Expose / Export aliases - export/expose your definitions to another scope\n * Minify support added\n * On/Off switches for:\n  * Bare option to compile CoffeeScript with the 'bare' option\n  * Packaging system\n  * Minify\n\n## 0.3.8 - 10/29/2011\n * Fixing bugs in generators\n * Fixing a bunch of small emergencial bugs\n\n## 0.3.7 - 10/29/2011\n * Simplify config file syntax [feature done [#8](https://github.com/serpentem/coffee-toaster/issues/8)]\n * Adding buid routines [feature done [#9](https://github.com/serpentem/coffee-toaster/issues/9)]\n * Adding support for vendors across modules and build configs [feature [#10](https://github.com/serpentem/coffee-toaster/issues/10)]\n\n## 0.3.6 - 10/25/2011\n * Critical bugfixes in the reorder routine\n * Optimizing architecture\n * Condensing src scructure\n\n## 0.3.5 - 10/24/2011\n * Avoiding tmp files from being watched [closing issue [#4](http://github.com/serpentem/coffee-toaster/issues/4)]\n * Adding support for ordinary files again (with no class definitions inside)\n * Now all requirements must to be done based on filepath with slash<BR>\nnotation \"foldera/folderb/filename\"\n * Adding extra base class validation\n * Lots of improvements and bugfixes\n\n## 0.3.0 - 10/16/2011\n * Refactoring entire Script class\n * Support for extends directive have been removed, now all dependencies<BR>\nmust be informed through '#<< package.name.ClassName'\n * Support for files without class declarations was (sadly) removed\n * Adding full package support automagically\n * Implementing wild-cards on requirements '#<< package.name.*'\n\n## 0.2.2 - 10/02/2011\n * Starting tests implementation (using Vows BDD)\n * Implementing debug mode (-d --debug). Files are compiled individually<BR>\nplus a boot file (toaster.js) file that will load everything in the right order.\n * Improving interactive processes to become good guessers\n * Adding support for file requirements based on 'a/b/c/filepath'<BR>\nsimultaneously with class requirements based in 'ClassName' notation (both<BR>\nare case sensitive)\n * Bumping 'build/coffee-toaster' submodule to use tag 0.2.2 (level up)\n\n## 0.2.1 - 09/22/2011\n * Implementing OptionParser (using Optimist)\n\n## 0.2.0 - 09/18/2011\n * Tag 0.1.2 is now used as submodule in order to self-toast (aka manage<BR>\ndependencies) of new versions of CoffeeToaster itself, starting from now\n * Refactoring everything, classes are now one per file, using dependency<BR>\ndirectives from CoffeeToaster itself. From now on, things should evolve<BR>\na little easier.\n * Individualizing CoffeeScript handling\n * Starting plans for CoffeeKup and CoffeeCss support\n\n## 0.1.2 - 09/17/2011\n * Fixing compilation method that was requiring coffee-script to be installed\n * Adding precise error handling\n * Checking circular dependency conflicts [closing issue [#2](http://github.com/serpentem/coffee-toaster/issues/2)]\n\n## 0.1.1 - 09/16/2011\n * Adding basic error handling [closing issue [#1](http://github.com/serpentem/coffee-toaster/issues/1)]\n\n## 0.1.0 - 09/11/2011\n * Scaffolding routine for new projects\n * Scaffolding routine for configuration file (toaster.coffee)\n * Dependency handlers:\n  * Extends directive (class A extends B)\n  * Include directive (#<< ClassNameA, ClassNameB..)\n","maintainers":[{"name":"nybras","email":"me@nybras.com"},{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.6.0":{"author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"name":"coffee-toaster","description":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)","version":"0.6.0","repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.x","uglify-js":"1.1.1","optimist":"0.2.x","growl":"1.2.0"},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nVersion 0.6.0\n\nCoffeeToaster is a dependency manager and build system for CoffeeScript.\n\nThe main purpose is to provide a very comfortable environment to code large<BR>\nlibraries using such things as class definitions and namespaces, in order to<BR>\nto help avoid naming collisions in your architecture.\n\nA smart 'require' powered by wild-cards is also provided, together with a<BR>\npowerful build system that concatenates everything and outputs a single<BR>\njavascript release file that can be even minified if you like.\n\nThe build system was developed to offer vendors support, with specific<BR>\nordering options. If you are adept of the extends directive in CoffeeScript,<BR>\nToaster will even check if you have required base classes for the classes<BR>\nthat extends another.\n\nThe CLI program informs you about everything that is happening when a new<BR>\nfile is created, deleted or modified. You can even drag'n'drop a folder with<BR>\nlots of CoffeeScript files inside your source folder and everything will be<BR>\nhandled gracefully.\n\nIf you are building for the browser you can use the debug option to compile<BR>\neverything individually -- plus, node targeted support is on the way. In <BR>\ndebug mode you'll be gifted with a boot-loader that will load every file in<BR>\nthe proper order according your needs.\n\nI should also mention that it's not some kind of AMD or CJS implementation,<BR>\nas you may be thinking. It's much more like a new point of view based on my<BR>\nspecific needs and personal taste, which I didn't come up with a fancy name yet.\n\nKeep on reading this README, and please do not hesitate to open a feature<BR>\nrequest or a bug report.<BR>\nhttps://github.com/serpentem/coffee-toaster/issues\n\nIn case of any doubts, drop an email at the email group and luckily you'll<BR>\nbe answered sooner than later.<BR>\nhttps://groups.google.com/group/coffee-toaster\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n * You can require any file whenever your want to\n* Vendors management\n* Packaging System & Namespaces\n * Automagic packaging system that uses folders as namespaces\n* Micro build routines to help you customize and release your peace of code\n* Exports aliases\n * Lets you set a top package to list all your modules\n* Broken and circular-loop dependencies validation\n * Helps you prevent some mistakes with circular dependencies loops and<BR>\n alerts you against dependencies not found\n* Live syntax-check\n * Precise live syntax-check with file path and line number information\n* Growl support\n * Warning/Error messages are shown even in growl\n* Debug Mode\n * In order to provide an easy debugging routine once inside the browser,<BR>\n all files will be compiled individually into its respectives '.js' versions<BR>\n and a smart boot-loader (your-debug-file.js) is provided to load every file<BR>\n orderly. Just include this boot-loader in your html file and voilà\n* Minify support\n * Aiming to be practical, the output can be even minified (using uglify-js)\n* Scaffolding routines\n * Interactive creation of a very simple skeleton for new projects and<BR>\n config file for existent projects\n\n\n# Installation\n\n\tnpm install -g coffee-toaster\n\n# Usage\n\n## Creating a new App\n\nCoffeeToaster suggests a very simple structure for initial projects, you can<BR>\ncustomize it as you like.\n\n\ttoaster -n mynewapp\n\nYou will be asked for some things:\n\n1. **source folder** - Relative folderpath to your source folder.\n  * i.e.: src\n1. **release file** - Path to your release file.\n  * i.e.: www/js/app.js\n1. **http folder** - The folderpath to reach your debug file through http,<BR>\nin case it is  not inside your root directory. Imagine that the 'www' is<BR>\nyour root folder, so you'd just need to inform 'js' as the http folder.\n  * i.e.: js\n\nYour release file will not be affected by the 'http folder' property.\n\nConsidering all the default values, you'll end up with a structure as such:\n\n\tmyawsomeapp/\n\t├── src\n\t├── vendors\n\t├── www\n\t    └── js\n\t└── toaster.coffee\n\n\t4 directories, 1 file\n\nThe toaster.coffee file will have this content:\n\n````ruby\n\n\t# => SRC FOLDER\n\ttoast 'src'\n\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\n## Toasting an existing project\n\nYour can toast an existing project as such:\n\n\tcd existing-project\n\ttoaster -i\n\nOr:\n\n\ttoaster -i existing-project\n\nSome of the same information (src, release and http folder) will be required,<BR>\nanswer everything according to your project's structure.\n\nA 'toaster.coffee' file will be created inside of it.\n\n## When the magic happens\n\nTo see all that CoffeeToaster can do for you, enter the project folder and<BR>\ntype 'toaster -w' after creating or toasting a new project:\n\n\tcd existing-project\n\ttoaster -w\n\nOr:\n\n\ttoaster -w existing-project\n\nYour release file will be saved according your configuration.\n\n# Debug Mode\n\nIn debug mode (option -d) all files will be compiled individually inside a<BR>\nfolder called \"toaster\" in the same directory you've pointed your debug file,<BR>\n\taiming to ease the debugging process.\n\n\tcd existing-project\n\ttoaster -wd\n\nFor example, if you have \"release/app-debug.js\", a folder will be created in<BR>\n\"release/toaster\" and all your CoffeeScript files will be compiled to<BR>\nJavascript within.\n\nBellow is a representative directory structure:\n\n\tusage/\n\t├── vendors\n\t├── src\n\t│   ├── app\n\t│   │   └── app.coffee\n\t│   ├── artists\n\t│   │   ├── progressive\n\t│   │   │   ├── kingcrimson.coffee\n\t│   │   │   ├── themarsvolta.coffee\n\t│   │   │   └── tool.coffee\n\t│   │   └── triphop\n\t│   │       ├── lovage.coffee\n\t│   │       ├── massiveattack.coffee\n\t│   │       └── portishead.coffee\n\t│   └── genres\n\t│       ├── progressive.coffee\n\t│       └── triphop.coffee\n\t├── www\n\t│   ├── index.html\n\t│   └── js\n\t│       ├── app.js\n\t│       ├── app-debug.js\n\t│       └── toaster\n\t│           ├── app\n\t│           │   └── app.js\n\t│           ├── artists\n\t│           │   ├── progressive\n\t│           │   │   ├── kingcrimson.js\n\t│           │   │   ├── themarsvolta.js\n\t│           │   │   └── tool.js\n\t│           │   └── triphop\n\t│           │       ├── lovage.js\n\t│           │       ├── massiveattack.js\n\t│           │       └── portishead.js\n\t│           └── genres\n\t│               ├── progressive.js\n\t│               └── triphop.js\n\t└── toaster.coffee\n\nThe debug file you've chosen is the boot-loader responsible to load all your<BR>\nfiles into the right order.\n\nSo in your .html you'll have two options:\n\n**1)** Include your release file.\n\n````html\n\t<script src=\"js/app.js\"></script>\n````\n \n**2)** Include the toaster boot-loader (your debug mode).\n\n````html\n\t<script src=\"js/app-debug.js\"></script>\n````\n\n# How does everything work?\n\nCoffeeToaster will create a file called 'toaster.coffee' in your app main folder.\n\n## Config File (toaster.coffee)\n\nThis file contains information of your app, i.e:\n\n````ruby\n\n\t# => SRC FOLDER\n\ttoast 'src'\n\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\nYou can have a multi src folders as well, i.e:\n\n````ruby\n\n\ttoast\n\t\t# SRC FOLDERS\n\t\tfolders:\n\t\t\t\"src/app\": \"app\"\n\t\t\t\"src/theoricus\": \"theoricus\"\n\t\t\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\n### Folders\n\nAn array of objects containing setup information about the folders.\n\nWhen using multi-folders, you can specify this option to map everything as<BR>\nyou need. The hash-key is the path of your folder, and the hash-value is the<BR>\nalias you want to prepend to all files under that.\n\n### Exclude\n\nLet's you excplicity exclude some folders from Toaster search/process mechanism.\n\n### Vendors\n\nYou can define vendors such as:\n\n````ruby\n\n\tvendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely<BR>\njavascript, preferably minified ones -- Toaster will not compile or minify<BR>\nthem, only concatenate everything.\n\n### Bare\n\nIf true, compile your CS files without the top-level function safety wrapper:\n\n````javascript\n\n\t(function() {\n\t  # bunch of code\n\t}).call(this);\n````\n\nSo you will end up with just 'bunch of code':\n\n\n````javascript\n\n\t# bunch of code\n````\n\n### Packaging\n\nIf true, use all your folders as namespaces to your class definitions.\n\nIf you have class 'Lovage' declared inside the \"artists/triphop\" folder, you<BR>\ncan access it through 'artists.triphop.Lovage'.\n\n````javascript\n\n\t# usual way\n\tnew Lovage\n\t\n\t# with packaging=true\n\tnew artists.triphop.Lovage\n````\n\n### Expose\n\nIf informed, list all you packages of classes in the given scope. If you use<BR>\n'window' as your expose scope, your classes will be available also in the<BR>\nwindow object -- or whatever scope you inform.\n\n````javascript\n\t\n\tnew window.artists.triphop.Lovage\n````\n\n### Minify\n\nIf true, minify your release file -- debug files are never minified.\n\n### HTTP Folder\n\nThe folder path to reach your debug file through http, in case it is not<BR>\ninside your root directory. Imagine that the 'www' is your root folder, and<BR>\nyou have a 'js' folder inside of it with your 'debug.js' file inside of it.\n\nFollowing this case you'd just need to inform 'js' as your http folder.\n\nSo the declarations inside the debug boot loader will follow this location<BR>\nin order to import your scripts in debug mode, prepending your http folder<BR>\nto all file paths.\n\nYour release file will not be affected by this property.\n\n### Release\n\nThe file path to your release file.\n\n### Debug\n\nThe file path to your debug file.\n\n## Conlusion\n\nSo when you call 'toaster -w' in this directory, this config is loaded and<BR>\nevery file and folder inside 'src' folder will be watched.\n\nIf debug is enabled (option -d), files will be also compiled individually<BR>\nfor a sane debugging routine inside the browser, in the same directory you<BR>\nhave your debug file.\n\nEvery time something changes, CoffeeToaster re-compiles all of your<BR>\napplication by:\n\n* collecting all .coffee files and processing everything, adding package<BR>\ndeclarations to class definitions based on the folder they are located\n* re-ordering everything, always defining files and classes before<BR>\nthey're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\nHold it! How the hell does it know when my files or classes are needed?\n\n## Import directive\n\nThe import directive is known by:\n\n * #<< app/views/user_view\n * #<< app/utils/*\n\nBy putting '#<< app/views/user_view' in your CoffeeScript file, you're<BR>\ntelling CoffeeToaster that there's a dependency.\n\nWild cards '#<< app/utils/*' are also accepted as a handy option.\n\n# Advanced options\n\nYou can pass your own config file for toaster instead of the default one<BR>\n'toaster.coffee', with the '-f' or '--config-file' option:\n\n````javascript\n\n\ttoaster -wdf mycustomconfig.coffee\n````\n\nOr even pass even the whole configuration as a JSON string, with the '-j' or<BR>\n'--config' option:\n\n````javascript\n\n\ttoaster -wdj '{\"folders\":{\"src\":\"\"},\"expose\":\"window\",\"release\":\"app.js\",\"debug\":\"app-debug.js\"}'\n````\n\n\n\n\n\n# Examples\n\nYou'll certainly find some useful resources in the examples provided.<BR>\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config<BR>\noptions, always looking for the differences in your javascript release file.\n\n > [Single folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/single-folder)<BR>\n > [Multi folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/multi-folder)<BR>\n > [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n# API\n\nYou can use Toaster through API as well, in case you want to power up your<BR>\ncompiling tasks or even buid some framework on top of it.\n\nSee the API example for further information.\n > [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n````ruby\n\n\tToaster = require(\"coffee-toaster\").Toaster\n\t\n\ttoasting = new Toaster basedir, options, skip_initial_build\n\ttoasting.build header_code_injection, footer_code_injection\n````\n\n\n# Issues\n\nDo not hesitate to open a feature request or a bug report.<BR>\nhttps://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\n\nA place to talk about it, ask anything, get in touch. Luckily you'll<BR>\nbe answered sooner than later.<BR>\nhttps://groups.google.com/group/coffee-toaster\n\n# Changelog\n\n## 0.6.0 - 06/16/2012\n * Adding 'exclude' property to config file\n * Improving and fixing a bunch of things\n * Completely refactoring fs-util to improve it's usage and avoid memory-leak\n * Organizing single-folder and multi-folder examples\n * Standardizing API for javascript usage\n * Adding 'introspection' example with many javascript uses\n\n## 0.5.5 - 04/19/2012\n * Config file was re-written to be more practical\n * Build routines removed in favor of simplicity\n * Multi-modules option is default now, without configuring anything\n * HTTP Folder property added to 'toaster.coffee' config file\n * Scaffolding routines improved according the design changes\n\n## 0.5.0 - 04/12/2012\n * Packaging system completely revamped\n * Added some beauty to log messages\n * Growl integration implemented\n * Expose / Export aliases - export/expose your definitions to another scope\n * Minify support added\n * On/Off switches for:\n  * Bare option to compile CoffeeScript with the 'bare' option\n  * Packaging system\n  * Minify\n\n## 0.3.8 - 10/29/2011\n * Fixing bugs in generators\n * Fixing a bunch of small emergencial bugs\n\n## 0.3.7 - 10/29/2011\n * Simplify config file syntax [feature done [#8](https://github.com/serpentem/coffee-toaster/issues/8)]\n * Adding buid routines [feature done [#9](https://github.com/serpentem/coffee-toaster/issues/9)]\n * Adding support for vendors across modules and build configs [feature [#10](https://github.com/serpentem/coffee-toaster/issues/10)]\n\n## 0.3.6 - 10/25/2011\n * Critical bugfixes in the reorder routine\n * Optimizing architecture\n * Condensing src scructure\n\n## 0.3.5 - 10/24/2011\n * Avoiding tmp files from being watched [closing issue [#4](http://github.com/serpentem/coffee-toaster/issues/4)]\n * Adding support for ordinary files again (with no class definitions inside)\n * Now all requirements must to be done based on filepath with slash<BR>\nnotation \"foldera/folderb/filename\"\n * Adding extra base class validation\n * Lots of improvements and bugfixes\n\n## 0.3.0 - 10/16/2011\n * Refactoring entire Script class\n * Support for extends directive have been removed, now all dependencies<BR>\nmust be informed through '#<< package.name.ClassName'\n * Support for files without class declarations was (sadly) removed\n * Adding full package support automagically\n * Implementing wild-cards on requirements '#<< package.name.*'\n\n## 0.2.2 - 10/02/2011\n * Starting tests implementation (using Vows BDD)\n * Implementing debug mode (-d --debug). Files are compiled individually<BR>\nplus a boot file (toaster.js) file that will load everything in the right order.\n * Improving interactive processes to become good guessers\n * Adding support for file requirements based on 'a/b/c/filepath'<BR>\nsimultaneously with class requirements based in 'ClassName' notation (both<BR>\nare case sensitive)\n * Bumping 'build/coffee-toaster' submodule to use tag 0.2.2 (level up)\n\n## 0.2.1 - 09/22/2011\n * Implementing OptionParser (using Optimist)\n\n## 0.2.0 - 09/18/2011\n * Tag 0.1.2 is now used as submodule in order to self-toast (aka manage<BR>\ndependencies) of new versions of CoffeeToaster itself, starting from now\n * Refactoring everything, classes are now one per file, using dependency<BR>\ndirectives from CoffeeToaster itself. From now on, things should evolve<BR>\na little easier.\n * Individualizing CoffeeScript handling\n * Starting plans for CoffeeKup and CoffeeCss support\n\n## 0.1.2 - 09/17/2011\n * Fixing compilation method that was requiring coffee-script to be installed\n * Adding precise error handling\n * Checking circular dependency conflicts [closing issue [#2](http://github.com/serpentem/coffee-toaster/issues/2)]\n\n## 0.1.1 - 09/16/2011\n * Adding basic error handling [closing issue [#1](http://github.com/serpentem/coffee-toaster/issues/1)]\n\n## 0.1.0 - 09/11/2011\n * Scaffolding routine for new projects\n * Scaffolding routine for configuration file (toaster.coffee)\n * Dependency handlers:\n  * Extends directive (class A extends B)\n  * Include directive (#<< ClassNameA, ClassNameB..)\n","_id":"coffee-toaster@0.6.0","dist":{"shasum":"d605c411665c18789a483761adfdacb113586061","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.6.0.tgz","integrity":"sha512-wCoOiTk7+PR97eegeSpGxiXWPz/oajyDZ1uBwpiK+0x4OZas/KsjUpCioVSixrZY+6U434ic0bzzWTVzhzM3YQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfSfPOdDfRkJn9SyDAmigAM+aifKtxKMnAoYcO/muj4gIhAPyowkSADtmPCo5s0Kx0b1zwsRQHA5a3RE23wemmv4/k"}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"},{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.6.1":{"author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"name":"coffee-toaster","description":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)","version":"0.6.1","repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.x","uglify-js":"1.1.1","optimist":"0.2.x","growl":"1.2.0"},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nVersion 0.6.1\n\nCoffeeToaster is a dependency manager and build system for CoffeeScript.\n\nThe main purpose is to provide a very comfortable environment to code large<BR>\nlibraries using such things as class definitions and namespaces, in order to<BR>\nto help avoid naming collisions in your architecture.\n\nA smart 'require' powered by wild-cards is also provided, together with a<BR>\npowerful build system that concatenates everything and outputs a single<BR>\njavascript release file that can be even minified if you like.\n\nThe build system was developed to offer vendors support, with specific<BR>\nordering options. If you are adept of the extends directive in CoffeeScript,<BR>\nToaster will even check if you have required base classes for the classes<BR>\nthat extends another.\n\nThe CLI program informs you about everything that is happening when a new<BR>\nfile is created, deleted or modified. You can even drag'n'drop a folder with<BR>\nlots of CoffeeScript files inside your source folder and everything will be<BR>\nhandled gracefully.\n\nIf you are building for the browser you can use the debug option to compile<BR>\neverything individually -- plus, node targeted support is on the way. In <BR>\ndebug mode you'll be gifted with a boot-loader that will load every file in<BR>\nthe proper order according your needs.\n\nI should also mention that it's not some kind of AMD or CJS implementation,<BR>\nas you may be thinking. It's much more like a new point of view based on my<BR>\nspecific needs and personal taste, which I didn't come up with a fancy name yet.\n\nKeep on reading this README, and please do not hesitate to open a feature<BR>\nrequest or a bug report.<BR>\nhttps://github.com/serpentem/coffee-toaster/issues\n\nIn case of any doubts, drop an email at the email group and luckily you'll<BR>\nbe answered sooner than later.<BR>\nhttps://groups.google.com/group/coffee-toaster\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n * You can require any file whenever your want to\n* Vendors management\n* Packaging System & Namespaces\n * Automagic packaging system that uses folders as namespaces\n* Micro build routines to help you customize and release your peace of code\n* Exports aliases\n * Lets you set a top package to list all your modules\n* Broken and circular-loop dependencies validation\n * Helps you prevent some mistakes with circular dependencies loops and<BR>\n alerts you against dependencies not found\n* Live syntax-check\n * Precise live syntax-check with file path and line number information\n* Growl support\n * Warning/Error messages are shown even in growl\n* Debug Mode\n * In order to provide an easy debugging routine once inside the browser,<BR>\n all files will be compiled individually into its respectives '.js' versions<BR>\n and a smart boot-loader (your-debug-file.js) is provided to load every file<BR>\n orderly. Just include this boot-loader in your html file and voilà\n* Minify support\n * Aiming to be practical, the output can be even minified (using uglify-js)\n* Scaffolding routines\n * Interactive creation of a very simple skeleton for new projects and<BR>\n config file for existent projects\n\n\n# Installation\n\n\tnpm install -g coffee-toaster\n\n# Usage\n\n## Creating a new App\n\nCoffeeToaster suggests a very simple structure for initial projects, you can<BR>\ncustomize it as you like.\n\n\ttoaster -n mynewapp\n\nYou will be asked for some things:\n\n1. **source folder** - Relative folderpath to your source folder.\n  * i.e.: src\n1. **release file** - Path to your release file.\n  * i.e.: www/js/app.js\n1. **http folder** - The folderpath to reach your debug file through http,<BR>\nin case it is  not inside your root directory. Imagine that the 'www' is<BR>\nyour root folder, so you'd just need to inform 'js' as the http folder.\n  * i.e.: js\n\nYour release file will not be affected by the 'http folder' property.\n\nConsidering all the default values, you'll end up with a structure as such:\n\n\tmyawsomeapp/\n\t├── src\n\t├── vendors\n\t├── www\n\t    └── js\n\t└── toaster.coffee\n\n\t4 directories, 1 file\n\nThe toaster.coffee file will have this content:\n\n````ruby\n\n\t# => SRC FOLDER\n\ttoast 'src'\n\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\n## Toasting an existing project\n\nYour can toast an existing project as such:\n\n\tcd existing-project\n\ttoaster -i\n\nOr:\n\n\ttoaster -i existing-project\n\nSome of the same information (src, release and http folder) will be required,<BR>\nanswer everything according to your project's structure.\n\nA 'toaster.coffee' file will be created inside of it.\n\n## When the magic happens\n\nTo see all that CoffeeToaster can do for you, enter the project folder and<BR>\ntype 'toaster -w' after creating or toasting a new project:\n\n\tcd existing-project\n\ttoaster -w\n\nOr:\n\n\ttoaster -w existing-project\n\nYour release file will be saved according your configuration.\n\n# Debug Mode\n\nIn debug mode (option -d) all files will be compiled individually inside a<BR>\nfolder called \"toaster\" in the same directory you've pointed your debug file,<BR>\n\taiming to ease the debugging process.\n\n\tcd existing-project\n\ttoaster -wd\n\nFor example, if you have \"release/app-debug.js\", a folder will be created in<BR>\n\"release/toaster\" and all your CoffeeScript files will be compiled to<BR>\nJavascript within.\n\nBellow is a representative directory structure:\n\n\tusage/\n\t├── vendors\n\t├── src\n\t│   ├── app\n\t│   │   └── app.coffee\n\t│   ├── artists\n\t│   │   ├── progressive\n\t│   │   │   ├── kingcrimson.coffee\n\t│   │   │   ├── themarsvolta.coffee\n\t│   │   │   └── tool.coffee\n\t│   │   └── triphop\n\t│   │       ├── lovage.coffee\n\t│   │       ├── massiveattack.coffee\n\t│   │       └── portishead.coffee\n\t│   └── genres\n\t│       ├── progressive.coffee\n\t│       └── triphop.coffee\n\t├── www\n\t│   ├── index.html\n\t│   └── js\n\t│       ├── app.js\n\t│       ├── app-debug.js\n\t│       └── toaster\n\t│           ├── app\n\t│           │   └── app.js\n\t│           ├── artists\n\t│           │   ├── progressive\n\t│           │   │   ├── kingcrimson.js\n\t│           │   │   ├── themarsvolta.js\n\t│           │   │   └── tool.js\n\t│           │   └── triphop\n\t│           │       ├── lovage.js\n\t│           │       ├── massiveattack.js\n\t│           │       └── portishead.js\n\t│           └── genres\n\t│               ├── progressive.js\n\t│               └── triphop.js\n\t└── toaster.coffee\n\nThe debug file you've chosen is the boot-loader responsible to load all your<BR>\nfiles into the right order.\n\nSo in your .html you'll have two options:\n\n**1)** Include your release file.\n\n````html\n\t<script src=\"js/app.js\"></script>\n````\n \n**2)** Include the toaster boot-loader (your debug mode).\n\n````html\n\t<script src=\"js/app-debug.js\"></script>\n````\n\n# How does everything work?\n\nCoffeeToaster will create a file called 'toaster.coffee' in your app main folder.\n\n## Config File (toaster.coffee)\n\nThis file contains information of your app, i.e:\n\n````ruby\n\n\t# => SRC FOLDER\n\ttoast 'src'\n\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\nYou can have a multi src folders as well, i.e:\n\n````ruby\n\n\ttoast\n\t\t# SRC FOLDERS\n\t\tfolders:\n\t\t\t\"src/app\": \"app\"\n\t\t\t\"src/theoricus\": \"theoricus\"\n\t\t\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\n### Folders\n\nAn array of objects containing setup information about the folders.\n\nWhen using multi-folders, you can specify this option to map everything as<BR>\nyou need. The hash-key is the path of your folder, and the hash-value is the<BR>\nalias you want to prepend to all files under that.\n\n### Exclude\n\nLet's you excplicity exclude some folders from Toaster search/process mechanism.\n\n### Vendors\n\nYou can define vendors such as:\n\n````ruby\n\n\tvendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely<BR>\njavascript, preferably minified ones -- Toaster will not compile or minify<BR>\nthem, only concatenate everything.\n\n### Bare\n\nIf true, compile your CS files without the top-level function safety wrapper:\n\n````javascript\n\n\t(function() {\n\t  # bunch of code\n\t}).call(this);\n````\n\nSo you will end up with just 'bunch of code':\n\n\n````javascript\n\n\t# bunch of code\n````\n\n### Packaging\n\nIf true, use all your folders as namespaces to your class definitions.\n\nIf you have class 'Lovage' declared inside the \"artists/triphop\" folder, you<BR>\ncan access it through 'artists.triphop.Lovage'.\n\n````javascript\n\n\t# usual way\n\tnew Lovage\n\t\n\t# with packaging=true\n\tnew artists.triphop.Lovage\n````\n\n### Expose\n\nIf informed, list all you packages of classes in the given scope. If you use<BR>\n'window' as your expose scope, your classes will be available also in the<BR>\nwindow object -- or whatever scope you inform.\n\n````javascript\n\t\n\tnew window.artists.triphop.Lovage\n````\n\n### Minify\n\nIf true, minify your release file -- debug files are never minified.\n\n### HTTP Folder\n\nThe folder path to reach your debug file through http, in case it is not<BR>\ninside your root directory. Imagine that the 'www' is your root folder, and<BR>\nyou have a 'js' folder inside of it with your 'debug.js' file inside of it.\n\nFollowing this case you'd just need to inform 'js' as your http folder.\n\nSo the declarations inside the debug boot loader will follow this location<BR>\nin order to import your scripts in debug mode, prepending your http folder<BR>\nto all file paths.\n\nYour release file will not be affected by this property.\n\n### Release\n\nThe file path to your release file.\n\n### Debug\n\nThe file path to your debug file.\n\n## Conlusion\n\nSo when you call 'toaster -w' in this directory, this config is loaded and<BR>\nevery file and folder inside 'src' folder will be watched.\n\nIf debug is enabled (option -d), files will be also compiled individually<BR>\nfor a sane debugging routine inside the browser, in the same directory you<BR>\nhave your debug file.\n\nEvery time something changes, CoffeeToaster re-compiles all of your<BR>\napplication by:\n\n* collecting all .coffee files and processing everything, adding package<BR>\ndeclarations to class definitions based on the folder they are located\n* re-ordering everything, always defining files and classes before<BR>\nthey're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\nHold it! How the hell does it know when my files or classes are needed?\n\n## Import directive\n\nThe import directive is known by:\n\n * #<< app/views/user_view\n * #<< app/utils/*\n\nBy putting '#<< app/views/user_view' in your CoffeeScript file, you're<BR>\ntelling CoffeeToaster that there's a dependency.\n\nWild cards '#<< app/utils/*' are also accepted as a handy option.\n\n# Advanced options\n\nYou can pass your own config file for toaster instead of the default one<BR>\n'toaster.coffee', with the '-f' or '--config-file' option:\n\n````javascript\n\n\ttoaster -wdf mycustomconfig.coffee\n````\n\nOr even pass even the whole configuration as a JSON string, with the '-j' or<BR>\n'--config' option:\n\n````javascript\n\n\ttoaster -wdj '{\"folders\":{\"src\":\"\"},\"expose\":\"window\",\"release\":\"app.js\",\"debug\":\"app-debug.js\"}'\n````\n\n\n\n\n\n# Examples\n\nYou'll certainly find some useful resources in the examples provided.<BR>\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config<BR>\noptions, always looking for the differences in your javascript release file.\n\n > [Single folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/single-folder)<BR>\n > [Multi folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/multi-folder)<BR>\n > [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n# API\n\nYou can use Toaster through API as well, in case you want to power up your<BR>\ncompiling tasks or even buid some framework on top of it.\n\nSee the API example for further information.\n > [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n````ruby\n\n\tToaster = require(\"coffee-toaster\").Toaster\n\t\n\ttoasting = new Toaster basedir, options, skip_initial_build\n\ttoasting.build header_code_injection, footer_code_injection\n````\n\n\n# Issues\n\nDo not hesitate to open a feature request or a bug report.<BR>\nhttps://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\n\nA place to talk about it, ask anything, get in touch. Luckily you'll<BR>\nbe answered sooner than later.<BR>\nhttps://groups.google.com/group/coffee-toaster\n\n# Changelog\n\n## 0.6.1 - 06/16/2012\n * Adjusting everything for self-toasting at version 0.6.0\n * Fixing example package.json file that was broken npm installation\n\n## 0.6.0 - 06/16/2012\n * Adding 'exclude' property to config file\n * Improving and fixing a bunch of things\n * Completely refactoring fs-util to improve it's usage and avoid memory-leak\n * Organizing single-folder and multi-folder examples\n * Standardizing API for javascript usage\n * Adding 'introspection' example with many javascript uses\n\n## 0.5.5 - 04/19/2012\n * Config file was re-written to be more practical\n * Build routines removed in favor of simplicity\n * Multi-modules option is default now, without configuring anything\n * HTTP Folder property added to 'toaster.coffee' config file\n * Scaffolding routines improved according the design changes\n\n## 0.5.0 - 04/12/2012\n * Packaging system completely revamped\n * Added some beauty to log messages\n * Growl integration implemented\n * Expose / Export aliases - export/expose your definitions to another scope\n * Minify support added\n * On/Off switches for:\n  * Bare option to compile CoffeeScript with the 'bare' option\n  * Packaging system\n  * Minify\n\n## 0.3.8 - 10/29/2011\n * Fixing bugs in generators\n * Fixing a bunch of small emergencial bugs\n\n## 0.3.7 - 10/29/2011\n * Simplify config file syntax [feature done [#8](https://github.com/serpentem/coffee-toaster/issues/8)]\n * Adding buid routines [feature done [#9](https://github.com/serpentem/coffee-toaster/issues/9)]\n * Adding support for vendors across modules and build configs [feature [#10](https://github.com/serpentem/coffee-toaster/issues/10)]\n\n## 0.3.6 - 10/25/2011\n * Critical bugfixes in the reorder routine\n * Optimizing architecture\n * Condensing src scructure\n\n## 0.3.5 - 10/24/2011\n * Avoiding tmp files from being watched [closing issue [#4](http://github.com/serpentem/coffee-toaster/issues/4)]\n * Adding support for ordinary files again (with no class definitions inside)\n * Now all requirements must to be done based on filepath with slash<BR>\nnotation \"foldera/folderb/filename\"\n * Adding extra base class validation\n * Lots of improvements and bugfixes\n\n## 0.3.0 - 10/16/2011\n * Refactoring entire Script class\n * Support for extends directive have been removed, now all dependencies<BR>\nmust be informed through '#<< package.name.ClassName'\n * Support for files without class declarations was (sadly) removed\n * Adding full package support automagically\n * Implementing wild-cards on requirements '#<< package.name.*'\n\n## 0.2.2 - 10/02/2011\n * Starting tests implementation (using Vows BDD)\n * Implementing debug mode (-d --debug). Files are compiled individually<BR>\nplus a boot file (toaster.js) file that will load everything in the right order.\n * Improving interactive processes to become good guessers\n * Adding support for file requirements based on 'a/b/c/filepath'<BR>\nsimultaneously with class requirements based in 'ClassName' notation (both<BR>\nare case sensitive)\n * Bumping 'build/coffee-toaster' submodule to use tag 0.2.2 (level up)\n\n## 0.2.1 - 09/22/2011\n * Implementing OptionParser (using Optimist)\n\n## 0.2.0 - 09/18/2011\n * Tag 0.1.2 is now used as submodule in order to self-toast (aka manage<BR>\ndependencies) of new versions of CoffeeToaster itself, starting from now\n * Refactoring everything, classes are now one per file, using dependency<BR>\ndirectives from CoffeeToaster itself. From now on, things should evolve<BR>\na little easier.\n * Individualizing CoffeeScript handling\n * Starting plans for CoffeeKup and CoffeeCss support\n\n## 0.1.2 - 09/17/2011\n * Fixing compilation method that was requiring coffee-script to be installed\n * Adding precise error handling\n * Checking circular dependency conflicts [closing issue [#2](http://github.com/serpentem/coffee-toaster/issues/2)]\n\n## 0.1.1 - 09/16/2011\n * Adding basic error handling [closing issue [#1](http://github.com/serpentem/coffee-toaster/issues/1)]\n\n## 0.1.0 - 09/11/2011\n * Scaffolding routine for new projects\n * Scaffolding routine for configuration file (toaster.coffee)\n * Dependency handlers:\n  * Extends directive (class A extends B)\n  * Include directive (#<< ClassNameA, ClassNameB..)\n","_id":"coffee-toaster@0.6.1","dist":{"shasum":"185880063023a0487dae89ef10dbed6f848ffc33","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.6.1.tgz","integrity":"sha512-Is4gnUNTpkUsbRg7sqrXns4fc9X9bGMIkX5qdHtat4bVRfPbf1euIj72Z2Y+Jx93j6jI/jbQkDaHyBij8jrZPA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE8YEupwtAIM3Oh0a8uH6G3K+bwnDpkL0ft2BxuFuw6HAiBfQD1l2j9D4sPAJK3XNo4/NMIcETSpNzCuacMSNQAejA=="}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"},{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.6.2":{"author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"name":"coffee-toaster","description":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)","version":"0.6.2","repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.x","colors":"0.5.x","uglify-js":"1.1.1","optimist":"0.2.x","growl":"1.2.0"},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nVersion 0.6.2\n\nCoffeeToaster is a dependency manager and build system for CoffeeScript.\n\nThe main purpose is to provide a very comfortable environment to code large<BR>\nlibraries using such things as class definitions and namespaces, in order to<BR>\nto help avoid naming collisions in your architecture.\n\nA smart 'require' powered by wild-cards is also provided, together with a<BR>\npowerful build system that concatenates everything and outputs a single<BR>\njavascript release file that can be even minified if you like.\n\nThe build system was developed to offer vendors support, with specific<BR>\nordering options. If you are adept of the extends directive in CoffeeScript,<BR>\nToaster will even check if you have required base classes for the classes<BR>\nthat extends another.\n\nThe CLI program informs you about everything that is happening when a new<BR>\nfile is created, deleted or modified. You can even drag'n'drop a folder with<BR>\nlots of CoffeeScript files inside your source folder and everything will be<BR>\nhandled gracefully.\n\nIf you are building for the browser you can use the debug option to compile<BR>\neverything individually -- plus, node targeted support is on the way. In <BR>\ndebug mode you'll be gifted with a boot-loader that will load every file in<BR>\nthe proper order according your needs.\n\nI should also mention that it's not some kind of AMD or CJS implementation,<BR>\nas you may be thinking. It's much more like a new point of view based on my<BR>\nspecific needs and personal taste, which I didn't come up with a fancy name yet.\n\nKeep on reading this README, and please do not hesitate to open a feature<BR>\nrequest or a bug report.<BR>\nhttps://github.com/serpentem/coffee-toaster/issues\n\nIn case of any doubts, drop an email at the email group and luckily you'll<BR>\nbe answered sooner than later.<BR>\nhttps://groups.google.com/group/coffee-toaster\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n * You can require any file whenever your want to\n* Vendors management\n* Packaging System & Namespaces\n * Automagic packaging system that uses folders as namespaces\n* Micro build routines to help you customize and release your peace of code\n* Exports aliases\n * Lets you set a top package to list all your modules\n* Broken and circular-loop dependencies validation\n * Helps you prevent some mistakes with circular dependencies loops and<BR>\n alerts you against dependencies not found\n* Live syntax-check\n * Precise live syntax-check with file path and line number information\n* Growl support\n * Warning/Error messages are shown even in growl\n* Debug Mode\n * In order to provide an easy debugging routine once inside the browser,<BR>\n all files will be compiled individually into its respectives '.js' versions<BR>\n and a smart boot-loader (your-debug-file.js) is provided to load every file<BR>\n orderly. Just include this boot-loader in your html file and voilà\n* Minify support\n * Aiming to be practical, the output can be even minified (using uglify-js)\n* Scaffolding routines\n * Interactive creation of a very simple skeleton for new projects and<BR>\n config file for existent projects\n\n\n# Installation\n\n\tnpm install -g coffee-toaster\n\n# Usage\n\n## Creating a new App\n\nCoffeeToaster suggests a very simple structure for initial projects, you can<BR>\ncustomize it as you like.\n\n\ttoaster -n mynewapp\n\nYou will be asked for some things:\n\n1. **source folder** - Relative folderpath to your source folder.\n  * i.e.: src\n1. **release file** - Path to your release file.\n  * i.e.: www/js/app.js\n1. **http folder** - The folderpath to reach your debug file through http,<BR>\nin case it is  not inside your root directory. Imagine that the 'www' is<BR>\nyour root folder, so you'd just need to inform 'js' as the http folder.\n  * i.e.: js\n\nYour release file will not be affected by the 'http folder' property.\n\nConsidering all the default values, you'll end up with a structure as such:\n\n\tmyawsomeapp/\n\t├── src\n\t├── vendors\n\t├── www\n\t    └── js\n\t└── toaster.coffee\n\n\t4 directories, 1 file\n\nThe toaster.coffee file will have this content:\n\n````ruby\n\n\t# => SRC FOLDER\n\ttoast 'src'\n\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\n## Toasting an existing project\n\nYour can toast an existing project as such:\n\n\tcd existing-project\n\ttoaster -i\n\nOr:\n\n\ttoaster -i existing-project\n\nSome of the same information (src, release and http folder) will be required,<BR>\nanswer everything according to your project's structure.\n\nA 'toaster.coffee' file will be created inside of it.\n\n## When the magic happens\n\nTo see all that CoffeeToaster can do for you, enter the project folder and<BR>\ntype 'toaster -w' after creating or toasting a new project:\n\n\tcd existing-project\n\ttoaster -w\n\nOr:\n\n\ttoaster -w existing-project\n\nYour release file will be saved according your configuration.\n\n# Debug Mode\n\nIn debug mode (option -d) all files will be compiled individually inside a<BR>\nfolder called \"toaster\" in the same directory you've pointed your debug file,<BR>\n\taiming to ease the debugging process.\n\n\tcd existing-project\n\ttoaster -wd\n\nFor example, if you have \"release/app-debug.js\", a folder will be created in<BR>\n\"release/toaster\" and all your CoffeeScript files will be compiled to<BR>\nJavascript within.\n\nBellow is a representative directory structure:\n\n\tusage/\n\t├── vendors\n\t├── src\n\t│   ├── app\n\t│   │   └── app.coffee\n\t│   ├── artists\n\t│   │   ├── progressive\n\t│   │   │   ├── kingcrimson.coffee\n\t│   │   │   ├── themarsvolta.coffee\n\t│   │   │   └── tool.coffee\n\t│   │   └── triphop\n\t│   │       ├── lovage.coffee\n\t│   │       ├── massiveattack.coffee\n\t│   │       └── portishead.coffee\n\t│   └── genres\n\t│       ├── progressive.coffee\n\t│       └── triphop.coffee\n\t├── www\n\t│   ├── index.html\n\t│   └── js\n\t│       ├── app.js\n\t│       ├── app-debug.js\n\t│       └── toaster\n\t│           ├── app\n\t│           │   └── app.js\n\t│           ├── artists\n\t│           │   ├── progressive\n\t│           │   │   ├── kingcrimson.js\n\t│           │   │   ├── themarsvolta.js\n\t│           │   │   └── tool.js\n\t│           │   └── triphop\n\t│           │       ├── lovage.js\n\t│           │       ├── massiveattack.js\n\t│           │       └── portishead.js\n\t│           └── genres\n\t│               ├── progressive.js\n\t│               └── triphop.js\n\t└── toaster.coffee\n\nThe debug file you've chosen is the boot-loader responsible to load all your<BR>\nfiles into the right order.\n\nSo in your .html you'll have two options:\n\n**1)** Include your release file.\n\n````html\n\t<script src=\"js/app.js\"></script>\n````\n \n**2)** Include the toaster boot-loader (your debug mode).\n\n````html\n\t<script src=\"js/app-debug.js\"></script>\n````\n\n# How does everything work?\n\nCoffeeToaster will create a file called 'toaster.coffee' in your app main folder.\n\n## Config File (toaster.coffee)\n\nThis file contains information of your app, i.e:\n\n````ruby\n\n\t# => SRC FOLDER\n\ttoast 'src'\n\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\nYou can have a multi src folders as well, i.e:\n\n````ruby\n\n\ttoast\n\t\t# SRC FOLDERS\n\t\tfolders:\n\t\t\t\"src/app\": \"app\"\n\t\t\t\"src/theoricus\": \"theoricus\"\n\t\t\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\n### Folders\n\nAn array of objects containing setup information about the folders.\n\nWhen using multi-folders, you can specify this option to map everything as<BR>\nyou need. The hash-key is the path of your folder, and the hash-value is the<BR>\nalias you want to prepend to all files under that.\n\n### Exclude\n\nLet's you excplicity exclude some folders from Toaster search/process mechanism.\n\n### Vendors\n\nYou can define vendors such as:\n\n````ruby\n\n\tvendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely<BR>\njavascript, preferably minified ones -- Toaster will not compile or minify<BR>\nthem, only concatenate everything.\n\n### Bare\n\nIf true, compile your CS files without the top-level function safety wrapper:\n\n````javascript\n\n\t(function() {\n\t  # bunch of code\n\t}).call(this);\n````\n\nSo you will end up with just 'bunch of code':\n\n\n````javascript\n\n\t# bunch of code\n````\n\n### Packaging\n\nIf true, use all your folders as namespaces to your class definitions.\n\nIf you have class 'Lovage' declared inside the \"artists/triphop\" folder, you<BR>\ncan access it through 'artists.triphop.Lovage'.\n\n````javascript\n\n\t# usual way\n\tnew Lovage\n\t\n\t# with packaging=true\n\tnew artists.triphop.Lovage\n````\n\n### Expose\n\nIf informed, list all you packages of classes in the given scope. If you use<BR>\n'window' as your expose scope, your classes will be available also in the<BR>\nwindow object -- or whatever scope you inform.\n\n````javascript\n\t\n\tnew window.artists.triphop.Lovage\n````\n\n### Minify\n\nIf true, minify your release file -- debug files are never minified.\n\n### HTTP Folder\n\nThe folder path to reach your debug file through http, in case it is not<BR>\ninside your root directory. Imagine that the 'www' is your root folder, and<BR>\nyou have a 'js' folder inside of it with your 'debug.js' file inside of it.\n\nFollowing this case you'd just need to inform 'js' as your http folder.\n\nSo the declarations inside the debug boot loader will follow this location<BR>\nin order to import your scripts in debug mode, prepending your http folder<BR>\nto all file paths.\n\nYour release file will not be affected by this property.\n\n### Release\n\nThe file path to your release file.\n\n### Debug\n\nThe file path to your debug file.\n\n## Conlusion\n\nSo when you call 'toaster -w' in this directory, this config is loaded and<BR>\nevery file and folder inside 'src' folder will be watched.\n\nIf debug is enabled (option -d), files will be also compiled individually<BR>\nfor a sane debugging routine inside the browser, in the same directory you<BR>\nhave your debug file.\n\nEvery time something changes, CoffeeToaster re-compiles all of your<BR>\napplication by:\n\n* collecting all .coffee files and processing everything, adding package<BR>\ndeclarations to class definitions based on the folder they are located\n* re-ordering everything, always defining files and classes before<BR>\nthey're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\nHold it! How the hell does it know when my files or classes are needed?\n\n## Import directive\n\nThe import directive is known by:\n\n * #<< app/views/user_view\n * #<< app/utils/*\n\nBy putting '#<< app/views/user_view' in your CoffeeScript file, you're<BR>\ntelling CoffeeToaster that there's a dependency.\n\nWild cards '#<< app/utils/*' are also accepted as a handy option.\n\n# Advanced options\n\nYou can pass your own config file for toaster instead of the default one<BR>\n'toaster.coffee', with the '-f' or '--config-file' option:\n\n````javascript\n\n\ttoaster -wdf mycustomconfig.coffee\n````\n\nOr even pass even the whole configuration as a JSON string, with the '-j' or<BR>\n'--config' option:\n\n````javascript\n\n\ttoaster -wdj '{\"folders\":{\"src\":\"\"},\"expose\":\"window\",\"release\":\"app.js\",\"debug\":\"app-debug.js\"}'\n````\n\n\n\n\n\n# Examples\n\nYou'll certainly find some useful resources in the examples provided.<BR>\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config<BR>\noptions, always looking for the differences in your javascript release file.\n\n > [Single folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/single-folder)<BR>\n > [Multi folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/multi-folder)<BR>\n > [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n# API\n\nYou can use Toaster through API as well, in case you want to power up your<BR>\ncompiling tasks or even buid some framework on top of it.\n\nSee the API example for further information.\n > [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n````ruby\n\n\tToaster = require(\"coffee-toaster\").Toaster\n\t\n\ttoasting = new Toaster basedir, options, skip_initial_build\n\ttoasting.build header_code_injection, footer_code_injection\n````\n\n\n# Issues\n\nDo not hesitate to open a feature request or a bug report.<BR>\nhttps://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\n\nA place to talk about it, ask anything, get in touch. Luckily you'll<BR>\nbe answered sooner than later.<BR>\nhttps://groups.google.com/group/coffee-toaster\n\n# Changelog\n\n## 0.6.1 - 06/16/2012\n * Adjusting everything for self-toasting at version 0.6.0\n * Fixing example package.json file that was broken npm installation\n\n## 0.6.0 - 06/16/2012\n * Adding 'exclude' property to config file\n * Improving and fixing a bunch of things\n * Completely refactoring fs-util to improve it's usage and avoid memory-leak\n * Organizing single-folder and multi-folder examples\n * Standardizing API for javascript usage\n * Adding 'introspection' example with many javascript uses\n\n## 0.5.5 - 04/19/2012\n * Config file was re-written to be more practical\n * Build routines removed in favor of simplicity\n * Multi-modules option is default now, without configuring anything\n * HTTP Folder property added to 'toaster.coffee' config file\n * Scaffolding routines improved according the design changes\n\n## 0.5.0 - 04/12/2012\n * Packaging system completely revamped\n * Added some beauty to log messages\n * Growl integration implemented\n * Expose / Export aliases - export/expose your definitions to another scope\n * Minify support added\n * On/Off switches for:\n  * Bare option to compile CoffeeScript with the 'bare' option\n  * Packaging system\n  * Minify\n\n## 0.3.8 - 10/29/2011\n * Fixing bugs in generators\n * Fixing a bunch of small emergencial bugs\n\n## 0.3.7 - 10/29/2011\n * Simplify config file syntax [feature done [#8](https://github.com/serpentem/coffee-toaster/issues/8)]\n * Adding buid routines [feature done [#9](https://github.com/serpentem/coffee-toaster/issues/9)]\n * Adding support for vendors across modules and build configs [feature [#10](https://github.com/serpentem/coffee-toaster/issues/10)]\n\n## 0.3.6 - 10/25/2011\n * Critical bugfixes in the reorder routine\n * Optimizing architecture\n * Condensing src scructure\n\n## 0.3.5 - 10/24/2011\n * Avoiding tmp files from being watched [closing issue [#4](http://github.com/serpentem/coffee-toaster/issues/4)]\n * Adding support for ordinary files again (with no class definitions inside)\n * Now all requirements must to be done based on filepath with slash<BR>\nnotation \"foldera/folderb/filename\"\n * Adding extra base class validation\n * Lots of improvements and bugfixes\n\n## 0.3.0 - 10/16/2011\n * Refactoring entire Script class\n * Support for extends directive have been removed, now all dependencies<BR>\nmust be informed through '#<< package.name.ClassName'\n * Support for files without class declarations was (sadly) removed\n * Adding full package support automagically\n * Implementing wild-cards on requirements '#<< package.name.*'\n\n## 0.2.2 - 10/02/2011\n * Starting tests implementation (using Vows BDD)\n * Implementing debug mode (-d --debug). Files are compiled individually<BR>\nplus a boot file (toaster.js) file that will load everything in the right order.\n * Improving interactive processes to become good guessers\n * Adding support for file requirements based on 'a/b/c/filepath'<BR>\nsimultaneously with class requirements based in 'ClassName' notation (both<BR>\nare case sensitive)\n * Bumping 'build/coffee-toaster' submodule to use tag 0.2.2 (level up)\n\n## 0.2.1 - 09/22/2011\n * Implementing OptionParser (using Optimist)\n\n## 0.2.0 - 09/18/2011\n * Tag 0.1.2 is now used as submodule in order to self-toast (aka manage<BR>\ndependencies) of new versions of CoffeeToaster itself, starting from now\n * Refactoring everything, classes are now one per file, using dependency<BR>\ndirectives from CoffeeToaster itself. From now on, things should evolve<BR>\na little easier.\n * Individualizing CoffeeScript handling\n * Starting plans for CoffeeKup and CoffeeCss support\n\n## 0.1.2 - 09/17/2011\n * Fixing compilation method that was requiring coffee-script to be installed\n * Adding precise error handling\n * Checking circular dependency conflicts [closing issue [#2](http://github.com/serpentem/coffee-toaster/issues/2)]\n\n## 0.1.1 - 09/16/2011\n * Adding basic error handling [closing issue [#1](http://github.com/serpentem/coffee-toaster/issues/1)]\n\n## 0.1.0 - 09/11/2011\n * Scaffolding routine for new projects\n * Scaffolding routine for configuration file (toaster.coffee)\n * Dependency handlers:\n  * Extends directive (class A extends B)\n  * Include directive (#<< ClassNameA, ClassNameB..)\n","_id":"coffee-toaster@0.6.2","dist":{"shasum":"6509b9109050982611ba837494221507c9c8340a","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.6.2.tgz","integrity":"sha512-cAu4WD49afZoGIJ1QefRb0unIxVWrM2uSB8KlvuAN2E6aWPF4gjHZlTGITfTSFCdQ8Nj0YN1jd7XyMjDEf/pcQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEp9uf1wjIq/XRJO122F8EspOBQSM6v4+lq2Iq3HnTz7AiEAnIZmHo1If6Oi2lzIwXM0S17GX6mIIkGjjFI0JU16f50="}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"},{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.6.3":{"author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"name":"coffee-toaster","description":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)","version":"0.6.3","repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"scripts":{"test":"vows spec/*.coffee --spec"},"engines":{"node":">= 0.4.9"},"dependencies":{"coffee-script":"1.3.3","colors":"0.5.x","uglify-js":"1.1.1","optimist":"0.2.x","growl":"1.2.0","vows":"0.6.3"},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nVersion 0.6.3\n\nCoffeeToaster is a dependency manager and build system for CoffeeScript.\n\nThe main purpose is to provide a very comfortable environment to code large<BR>\nlibraries using such things as class definitions and namespaces, in order to<BR>\nto help avoid naming collisions in your architecture.\n\nA smart 'require' powered by wild-cards is also provided, together with a<BR>\npowerful build system that concatenates everything and outputs a single<BR>\njavascript release file that can be even minified if you like.\n\nThe build system was developed to offer vendors support, with specific<BR>\nordering options. If you are adept of the extends directive in CoffeeScript,<BR>\nToaster will even check if you have required base classes for the classes<BR>\nthat extends another.\n\nThe CLI program informs you about everything that is happening when a new<BR>\nfile is created, deleted or modified. You can even drag'n'drop a folder with<BR>\nlots of CoffeeScript files inside your source folder and everything will be<BR>\nhandled gracefully.\n\nIf you are building for the browser you can use the debug option to compile<BR>\neverything individually -- plus, node targeted support is on the way. In <BR>\ndebug mode you'll be gifted with a boot-loader that will load every file in<BR>\nthe proper order according your needs.\n\nI should also mention that it's not some kind of AMD or CJS implementation,<BR>\nas you may be thinking. It's much more like a new point of view based on my<BR>\nspecific needs and personal taste, which I didn't come up with a fancy name yet.\n\nKeep on reading this README, and please do not hesitate to open a feature<BR>\nrequest or a bug report.<BR>\nhttps://github.com/serpentem/coffee-toaster/issues\n\nIn case of any doubts, drop an email at the email group and luckily you'll<BR>\nbe answered sooner than later.<BR>\nhttps://groups.google.com/group/coffee-toaster\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n * You can require any file whenever your want to\n* Vendors management\n* Packaging System & Namespaces\n * Automagic packaging system that uses folders as namespaces\n* Micro build routines to help you customize and release your peace of code\n* Exports aliases\n * Lets you set a top package to list all your modules\n* Broken and circular-loop dependencies validation\n * Helps you prevent some mistakes with circular dependencies loops and<BR>\n alerts you against dependencies not found\n* Live syntax-check\n * Precise live syntax-check with file path and line number information\n* Growl support\n * Warning/Error messages are shown even in growl\n* Debug Mode\n * In order to provide an easy debugging routine once inside the browser,<BR>\n all files will be compiled individually into its respectives '.js' versions<BR>\n and a smart boot-loader (your-debug-file.js) is provided to load every file<BR>\n orderly. Just include this boot-loader in your html file and voilà\n* Minify support\n * Aiming to be practical, the output can be even minified (using uglify-js)\n* Scaffolding routines\n * Interactive creation of a very simple skeleton for new projects and<BR>\n config file for existent projects\n\n\n# Installation\n\n\tnpm install -g coffee-toaster\n\n# Usage\n\n## Creating a new App\n\nCoffeeToaster suggests a very simple structure for initial projects, you can<BR>\ncustomize it as you like.\n\n\ttoaster -n mynewapp\n\nYou will be asked for some things:\n\n1. **source folder** - Relative folderpath to your source folder.\n  * i.e.: src\n1. **release file** - Path to your release file.\n  * i.e.: www/js/app.js\n1. **http folder** - The folderpath to reach your debug file through http,<BR>\nin case it is  not inside your root directory. Imagine that the 'www' is<BR>\nyour root folder, so you'd just need to inform 'js' as the http folder.\n  * i.e.: js\n\nYour release file will not be affected by the 'http folder' property.\n\nConsidering all the default values, you'll end up with a structure as such:\n\n\tmyawsomeapp/\n\t├── src\n\t├── vendors\n\t├── www\n\t    └── js\n\t└── toaster.coffee\n\n\t4 directories, 1 file\n\nThe toaster.coffee file will have this content:\n\n````ruby\n\n\t# => SRC FOLDER\n\ttoast 'src'\n\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\n## Toasting an existing project\n\nYour can toast an existing project as such:\n\n\tcd existing-project\n\ttoaster -i\n\nOr:\n\n\ttoaster -i existing-project\n\nSome of the same information (src, release and http folder) will be required,<BR>\nanswer everything according to your project's structure.\n\nA 'toaster.coffee' file will be created inside of it.\n\n## When the magic happens\n\nTo see all that CoffeeToaster can do for you, enter the project folder and<BR>\ntype 'toaster -w' after creating or toasting a new project:\n\n\tcd existing-project\n\ttoaster -w\n\nOr:\n\n\ttoaster -w existing-project\n\nYour release file will be saved according your configuration.\n\n# Debug Mode\n\nIn debug mode (option -d) all files will be compiled individually inside a<BR>\nfolder called \"toaster\" in the same directory you've pointed your debug file,<BR>\n\taiming to ease the debugging process.\n\n\tcd existing-project\n\ttoaster -wd\n\nFor example, if you have \"release/app-debug.js\", a folder will be created in<BR>\n\"release/toaster\" and all your CoffeeScript files will be compiled to<BR>\nJavascript within.\n\nBellow is a representative directory structure:\n\n\tusage/\n\t├── vendors\n\t├── src\n\t│   ├── app\n\t│   │   └── app.coffee\n\t│   ├── artists\n\t│   │   ├── progressive\n\t│   │   │   ├── kingcrimson.coffee\n\t│   │   │   ├── themarsvolta.coffee\n\t│   │   │   └── tool.coffee\n\t│   │   └── triphop\n\t│   │       ├── lovage.coffee\n\t│   │       ├── massiveattack.coffee\n\t│   │       └── portishead.coffee\n\t│   └── genres\n\t│       ├── progressive.coffee\n\t│       └── triphop.coffee\n\t├── www\n\t│   ├── index.html\n\t│   └── js\n\t│       ├── app.js\n\t│       ├── app-debug.js\n\t│       └── toaster\n\t│           ├── app\n\t│           │   └── app.js\n\t│           ├── artists\n\t│           │   ├── progressive\n\t│           │   │   ├── kingcrimson.js\n\t│           │   │   ├── themarsvolta.js\n\t│           │   │   └── tool.js\n\t│           │   └── triphop\n\t│           │       ├── lovage.js\n\t│           │       ├── massiveattack.js\n\t│           │       └── portishead.js\n\t│           └── genres\n\t│               ├── progressive.js\n\t│               └── triphop.js\n\t└── toaster.coffee\n\nThe debug file you've chosen is the boot-loader responsible to load all your<BR>\nfiles into the right order.\n\nSo in your .html you'll have two options:\n\n**1)** Include your release file.\n\n````html\n\t<script src=\"js/app.js\"></script>\n````\n \n**2)** Include the toaster boot-loader (your debug mode).\n\n````html\n\t<script src=\"js/app-debug.js\"></script>\n````\n\n# How does everything work?\n\nCoffeeToaster will create a file called 'toaster.coffee' in your app main folder.\n\n## Config File (toaster.coffee)\n\nThis file contains information of your app, i.e:\n\n````ruby\n\n\t# => SRC FOLDER\n\ttoast 'src'\n\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\nYou can have a multi src folders as well, i.e:\n\n````ruby\n\n\ttoast\n\t\t# SRC FOLDERS\n\t\tfolders:\n\t\t\t\"src/app\": \"app\"\n\t\t\t\"src/theoricus\": \"theoricus\"\n\t\t\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\n### Folders\n\nAn array of objects containing setup information about the folders.\n\nWhen using multi-folders, you can specify this option to map everything as<BR>\nyou need. The hash-key is the path of your folder, and the hash-value is the<BR>\nalias you want to prepend to all files under that.\n\n### Exclude\n\nLet's you excplicity exclude some folders from Toaster search/process mechanism.\n\n### Vendors\n\nYou can define vendors such as:\n\n````ruby\n\n\tvendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely<BR>\njavascript, preferably minified ones -- Toaster will not compile or minify<BR>\nthem, only concatenate everything.\n\n### Bare\n\nIf true, compile your CS files without the top-level function safety wrapper:\n\n````javascript\n\n\t(function() {\n\t  # bunch of code\n\t}).call(this);\n````\n\nSo you will end up with just 'bunch of code':\n\n\n````javascript\n\n\t# bunch of code\n````\n\n### Packaging\n\nIf true, use all your folders as namespaces to your class definitions.\n\nIf you have class 'Lovage' declared inside the \"artists/triphop\" folder, you<BR>\ncan access it through 'artists.triphop.Lovage'.\n\n````javascript\n\n\t# usual way\n\tnew Lovage\n\t\n\t# with packaging=true\n\tnew artists.triphop.Lovage\n````\n\n### Expose\n\nIf informed, list all you packages of classes in the given scope. If you use<BR>\n'window' as your expose scope, your classes will be available also in the<BR>\nwindow object -- or whatever scope you inform.\n\n````javascript\n\t\n\tnew window.artists.triphop.Lovage\n````\n\n### Minify\n\nIf true, minify your release file -- debug files are never minified.\n\n### HTTP Folder\n\nThe folder path to reach your debug file through http, in case it is not<BR>\ninside your root directory. Imagine that the 'www' is your root folder, and<BR>\nyou have a 'js' folder inside of it with your 'debug.js' file inside of it.\n\nFollowing this case you'd just need to inform 'js' as your http folder.\n\nSo the declarations inside the debug boot loader will follow this location<BR>\nin order to import your scripts in debug mode, prepending your http folder<BR>\nto all file paths.\n\nYour release file will not be affected by this property.\n\n### Release\n\nThe file path to your release file.\n\n### Debug\n\nThe file path to your debug file.\n\n## Conlusion\n\nSo when you call 'toaster -w' in this directory, this config is loaded and<BR>\nevery file and folder inside 'src' folder will be watched.\n\nIf debug is enabled (option -d), files will be also compiled individually<BR>\nfor a sane debugging routine inside the browser, in the same directory you<BR>\nhave your debug file.\n\nEvery time something changes, CoffeeToaster re-compiles all of your<BR>\napplication by:\n\n* collecting all .coffee files and processing everything, adding package<BR>\ndeclarations to class definitions based on the folder they are located\n* re-ordering everything, always defining files and classes before<BR>\nthey're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\nHold it! How the hell does it know when my files or classes are needed?\n\n## Import directive\n\nThe import directive is known by:\n\n * #<< app/views/user_view\n * #<< app/utils/*\n\nBy putting '#<< app/views/user_view' in your CoffeeScript file, you're<BR>\ntelling CoffeeToaster that there's a dependency.\n\nWild cards '#<< app/utils/*' are also accepted as a handy option.\n\n# Advanced options\n\nYou can pass your own config file for toaster instead of the default one<BR>\n'toaster.coffee', with the '-f' or '--config-file' option:\n\n````javascript\n\n\ttoaster -wdf mycustomconfig.coffee\n````\n\nOr even pass even the whole configuration as a JSON string, with the '-j' or<BR>\n'--config' option:\n\n````javascript\n\n\ttoaster -wdj '{\"folders\":{\"src\":\"\"},\"expose\":\"window\",\"release\":\"app.js\",\"debug\":\"app-debug.js\"}'\n````\n\n\n\n\n\n# Examples\n\nYou'll certainly find some useful resources in the examples provided.<BR>\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config<BR>\noptions, always looking for the differences in your javascript release file.\n\n > [Single folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/single-folder)<BR>\n > [Multi folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/multi-folder)<BR>\n > [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n# API\n\nYou can use Toaster through API as well, in case you want to power up your<BR>\ncompiling tasks or even buid some framework on top of it.\n\nSee the API example for further information.\n > [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n````ruby\n\n\tToaster = require(\"coffee-toaster\").Toaster\n\t\n\ttoasting = new Toaster basedir, options, skip_initial_build\n\ttoasting.build header_code_injection, footer_code_injection\n````\n\n\n# Issues\n\nDo not hesitate to open a feature request or a bug report.<BR>\nhttps://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\n\nA place to talk about it, ask anything, get in touch. Luckily you'll<BR>\nbe answered sooner than later.<BR>\nhttps://groups.google.com/group/coffee-toaster\n\n# Changelog\n\n## 0.6.3 - 07/01/2012\n * Fixing example 'package.' again (the zombie bug)\n * Fixing line number evaluation [closing issue [#26](http://github.com/serpentem/coffee-toaster/issues/26)]\n * Fixing 'c' / '--compile' option [closing issue [#27](http://github.com/serpentem/coffee-toaster/issues/27)]\n * Adding first test (finally)\n\n## 0.6.2 - 06/25/2012\n * Fixing last upgrade in self-toasting system\n * Adjusting everything for self-toasting at version 0.6.2\n\n## 0.6.1 - 06/16/2012\n * Adjusting everything for self-toasting at version 0.6.0\n * Fixing example package.json file that was broken npm installation\n\n## 0.6.0 - 06/16/2012\n * Adding 'exclude' property to config file\n * Improving and fixing a bunch of things\n * Completely refactoring fs-util to improve it's usage and avoid memory-leak\n * Organizing single-folder and multi-folder examples\n * Standardizing API for javascript usage\n * Adding 'introspection' example with many javascript uses\n\n## 0.5.5 - 04/19/2012\n * Config file was re-written to be more practical\n * Build routines removed in favor of simplicity\n * Multi-modules option is default now, without configuring anything\n * HTTP Folder property added to 'toaster.coffee' config file\n * Scaffolding routines improved according the design changes\n\n## 0.5.0 - 04/12/2012\n * Packaging system completely revamped\n * Added some beauty to log messages\n * Growl integration implemented\n * Expose / Export aliases - export/expose your definitions to another scope\n * Minify support added\n * On/Off switches for:\n  * Bare option to compile CoffeeScript with the 'bare' option\n  * Packaging system\n  * Minify\n\n## 0.3.8 - 10/29/2011\n * Fixing bugs in generators\n * Fixing a bunch of small emergencial bugs\n\n## 0.3.7 - 10/29/2011\n * Simplify config file syntax [feature done [#8](https://github.com/serpentem/coffee-toaster/issues/8)]\n * Adding buid routines [feature done [#9](https://github.com/serpentem/coffee-toaster/issues/9)]\n * Adding support for vendors across modules and build configs [feature [#10](https://github.com/serpentem/coffee-toaster/issues/10)]\n\n## 0.3.6 - 10/25/2011\n * Critical bugfixes in the reorder routine\n * Optimizing architecture\n * Condensing src scructure\n\n## 0.3.5 - 10/24/2011\n * Avoiding tmp files from being watched [closing issue [#4](http://github.com/serpentem/coffee-toaster/issues/4)]\n * Adding support for ordinary files again (with no class definitions inside)\n * Now all requirements must to be done based on filepath with slash<BR>\nnotation \"foldera/folderb/filename\"\n * Adding extra base class validation\n * Lots of improvements and bugfixes\n\n## 0.3.0 - 10/16/2011\n * Refactoring entire Script class\n * Support for extends directive have been removed, now all dependencies<BR>\nmust be informed through '#<< package.name.ClassName'\n * Support for files without class declarations was (sadly) removed\n * Adding full package support automagically\n * Implementing wild-cards on requirements '#<< package.name.*'\n\n## 0.2.2 - 10/02/2011\n * Starting tests implementation (using Vows BDD)\n * Implementing debug mode (-d --debug). Files are compiled individually<BR>\nplus a boot file (toaster.js) file that will load everything in the right order.\n * Improving interactive processes to become good guessers\n * Adding support for file requirements based on 'a/b/c/filepath'<BR>\nsimultaneously with class requirements based in 'ClassName' notation (both<BR>\nare case sensitive)\n * Bumping 'build/coffee-toaster' submodule to use tag 0.2.2 (level up)\n\n## 0.2.1 - 09/22/2011\n * Implementing OptionParser (using Optimist)\n\n## 0.2.0 - 09/18/2011\n * Tag 0.1.2 is now used as submodule in order to self-toast (aka manage<BR>\ndependencies) of new versions of CoffeeToaster itself, starting from now\n * Refactoring everything, classes are now one per file, using dependency<BR>\ndirectives from CoffeeToaster itself. From now on, things should evolve<BR>\na little easier.\n * Individualizing CoffeeScript handling\n * Starting plans for CoffeeKup and CoffeeCss support\n\n## 0.1.2 - 09/17/2011\n * Fixing compilation method that was requiring coffee-script to be installed\n * Adding precise error handling\n * Checking circular dependency conflicts [closing issue [#2](http://github.com/serpentem/coffee-toaster/issues/2)]\n\n## 0.1.1 - 09/16/2011\n * Adding basic error handling [closing issue [#1](http://github.com/serpentem/coffee-toaster/issues/1)]\n\n## 0.1.0 - 09/11/2011\n * Scaffolding routine for new projects\n * Scaffolding routine for configuration file (toaster.coffee)\n * Dependency handlers:\n  * Extends directive (class A extends B)\n  * Include directive (#<< ClassNameA, ClassNameB..)\n","_id":"coffee-toaster@0.6.3","dist":{"shasum":"3622a64212e9e7f0bdf4fd5ecdc03df9569866f3","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.6.3.tgz","integrity":"sha512-JsLuaVdgw4vprQxkSGub9O3mJV5CRvoj/ZLzazw2L/pgycwRLYQ++P6Ph6DqLQuT/aDUoSwr27VsQFz0GSWKzw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCeEk45kSZtgyUbXtKIcsfFdxfyZkhDw5ID0AGWs68P4gIgbdx5xYhRZwtOUfwRTb7elsDdKrq31yvgUXSXZ8acDFA="}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"},{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.6.4":{"author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"name":"coffee-toaster","description":"Minimalist manager and build system for CoffeeScript, an alternative for AMD's or CJS's OOP patterns, but with similar results. Made for those who dare to use class definitions in CoffeeScript while being able to easily inherit from external files. Powered with imports directives that use wildcards facilities, exposed scopes and excluded files filter options. The system can even use folders-as-namespaces to help you avoid naming collisions in architecture.","version":"0.6.4","repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"scripts":{"test":"node ./build/coffee-toaster/bin/toaster . -c; vows spec/*.coffee --spec","start":"node ./build/coffee-toaster/bin/toaster . -w"},"engines":{"node":">= 0.8.14"},"dependencies":{"coffee-script":"1.3.x","colors":"0.5.x","uglify-js":"1.1.x","optimist":"0.2.x","growl":"1.2.x","vows":"0.6.x"},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nVersion 0.6.4\n\n[![Build Status](https://secure.travis-ci.org/serpentem/coffee-toaster.png)](http://travis-ci.org/serpentem/coffee-toaster)\n\nCoffeeToaster is a dependency manager and build system for CoffeeScript.\n\nThe main purpose is to provide a very comfortable environment to code large libraries using such things as class definitions and namespaces, in order to to help avoid naming collisions in your architecture.\n\nA smart 'require' powered by wild-cards is also provided, together with a powerful build system that concatenates everything and outputs a single javascript release file that can be even minified if you like.\n\nThe build system was developed to offer vendors support, with specific ordering options. If you are adept of the extends directive in CoffeeScript, Toaster will even check if you have required base classes for the classes that extends another.\n\nThe CLI program informs you about everything that is happening when a new file is created, deleted or modified. You can even drag'n'drop a folder with lots of CoffeeScript files inside your source folder and everything will be handled gracefully.\n\nIf you are building for the browser you can use the debug option to compile everything individually -- plus, node targeted support is on the way. In debug mode you'll be gifted with a boot-loader that will load every file in the proper order according your needs.\n\nI should also mention that it's not some kind of AMD or CJS implementation, as you may be thinking. It's much more like a new point of view based on my specific needs and personal taste, which I didn't come up with a fancy name yet.\n\nKeep on reading this README, and please do not hesitate to open a feature request or a bug report.\n> https://github.com/serpentem/coffee-toaster/issues\n\nIn case of any doubts, drop an email at the email group and luckily you'll be answered sooner than later.\n> https://groups.google.com/group/coffee-toaster\n\nThis package was created initially as a base for creating the [Theoricus](https://github.com/serpentem/theoricus) framework (which is in a very alpha stage) and will be evolved as needed.\n> https://github.com/serpentem/theoricus\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n * You can require any file whenever your need to\n* Vendors management\n* Packaging System & Namespaces\n * Automagic packaging system that uses folders as namespaces\n* Micro build routines to help you customize and release your peace of code\n* Exports aliases\n * Lets you set a top package to list all your modules\n* Broken and circular-loop dependencies validation\n * Helps you prevent some mistakes with circular dependencies loops and alerts you against dependencies not found\n* Live syntax-check\n * Precise live syntax-check with file path and line number information\n* Growl support\n * Warning/Error messages are shown even in growl\n* Debug Mode\n * In order to provide an easy debugging routine once inside the browser, all files will be compiled individually into its respectives '.js' versions and a smart boot-loader (your-debug-file.js) is provided to load every file orderly. Just include this boot-loader in your html file and voilà\n* Minify support\n * Aiming to be practical, the output can be even minified (using uglify-js)\n* Scaffolding routines\n * Interactive creation of a very simple skeleton for new projects and config (toaster.coffee) file for existent projects\n\n\n# Installation\n\n\tnpm install -g coffee-toaster\n\n# Usage\n\n## Creating a new App\n\nCoffeeToaster suggests a very simple structure for initial projects, you can customize it as you like.\n\n\ttoaster -n mynewapp\n\nYou will be asked for some things:\n\n1. **source folder** - Relative folderpath to your source folder.\n  * i.e.: src\n1. **release file** - Relative filepath to your release file.\n  * i.e.: www/js/app.js\n1. **http folder** - The folderpath to reach your debug file through http, in case it is  not inside your root directory. Imagine that the 'www' is your root folder, so you'd just need to inform 'js' as the http folder.\n  * i.e.: js\n\nYour release file will not be affected by the 'http folder' property.\n\nConsidering all the default values, you'll end up with a structure as such:\n\n\tmyawsomeapp/\n\t├── src\n\t├── vendors\n\t├── www\n\t    └── js\n\t└── toaster.coffee\n\n\t4 directories, 1 file\n\nThe toaster.coffee file will have this content:\n\n````ruby\n\n\t# => SRC FOLDER\n\ttoast 'src'\n\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\n## Toasting an existing project\n\nYou can also toast an existing project as such:\n\n\tcd existing-project\n\ttoaster -i\n\nOr:\n\n\ttoaster -i existing-project\n\nSome of the same information (src, release and http folder) will be required, answer everything according to your project's structure.\n\nA 'toaster.coffee' file will be created inside of it.\n\n## When the magic happens\n\nTo see all that CoffeeToaster can do for you, enter the project folder and type 'toaster -w' after creating or toasting a new project:\n\n\tcd existing-project\n\ttoaster -w\n\nOr:\n\n\ttoaster -w existing-project\n\nYour release file will be saved according your configuration and Toaster will start in watch'n'compile mode. Any changes you make to your src files will trigger the re-compile.\n\n# Debug Mode\n\nIn debug mode (option -d) all files will be compiled individually inside a folder called \"toaster\" in the same directory you've pointed your debug file, aiming to ease the debugging process.\n\n\tcd existing-project\n\ttoaster -wd\n\nFor example, if you have \"release/app-debug.js\", a folder will be created in \"release/toaster\" and all your CoffeeScript files will be compiled to Javascript within.\n\nBellow is a representative directory structure:\n\n\tusage/\n\t├── vendors\n\t├── src\n\t│   ├── app\n\t│   │   └── app.coffee\n\t│   ├── artists\n\t│   │   ├── progressive\n\t│   │   │   ├── kingcrimson.coffee\n\t│   │   │   ├── themarsvolta.coffee\n\t│   │   │   └── tool.coffee\n\t│   │   └── triphop\n\t│   │       ├── lovage.coffee\n\t│   │       ├── massiveattack.coffee\n\t│   │       └── portishead.coffee\n\t│   └── genres\n\t│       ├── progressive.coffee\n\t│       └── triphop.coffee\n\t├── www\n\t│   ├── index.html\n\t│   └── js\n\t│       ├── app.js\n\t│       ├── app-debug.js\n\t│       └── toaster\n\t│           ├── app\n\t│           │   └── app.js\n\t│           ├── artists\n\t│           │   ├── progressive\n\t│           │   │   ├── kingcrimson.js\n\t│           │   │   ├── themarsvolta.js\n\t│           │   │   └── tool.js\n\t│           │   └── triphop\n\t│           │       ├── lovage.js\n\t│           │       ├── massiveattack.js\n\t│           │       └── portishead.js\n\t│           └── genres\n\t│               ├── progressive.js\n\t│               └── triphop.js\n\t└── toaster.coffee\n\nThe debug file you've chosen is the boot-loader responsible to load all your files into the right order.\n\nSo in your .html you'll have two options:\n\n**1)** Include your release file.\n\n````html\n\t<script src=\"js/app.js\"></script>\n````\n \n**2)** Include the toaster boot-loader (your debug mode).\n\n````html\n\t<script src=\"js/app-debug.js\"></script>\n````\n\n# How does everything work?\n\nCoffeeToaster will create a file called 'toaster.coffee' in your app main folder.\n\n## Config File (toaster.coffee)\n\nThis file contains information of your app, i.e:\n\n````ruby\n\n\t# => SRC FOLDER\n\ttoast 'src'\n\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\nYou can have a multi-source-folders as well, i.e:\n\n````ruby\n\n\ttoast\n\t\t# SRC FOLDERS\n\t\tfolders:\n\t\t\t\"src/app\": \"app\"\n\t\t\t\"src/theoricus\": \"theoricus\"\n\t\t\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\n### Folders\n\nAn Object of objects containing setup information about the folders, in the format:\n\t\n\t'folderpath':'folderalias'\n\nWhen using multi-folders, you can specify this option to map everything as you need. The hash-key is the path of your folder, and the hash-value is the alias you want to prepend to all files under that.\n\nPay attention to this specially when using Toaster with the '-j' option.\n\n### Exclude\n\nLet's you excplicity exclude some folders from Toaster search/process mechanism.\n\n### Vendors\n\nYou can define vendors such as:\n\n````ruby\n\n\tvendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely javascript, preferably minified ones -- Toaster will not compile or minify them, only concatenate everything.\n\n### Bare\n\nIf true, compile your CS files without the top-level function safety wrapper:\n\n````javascript\n\n\t(function() {\n\t  # bunch of code\n\t}).call(this);\n````\n\nSo you will end up with just 'bunch of code':\n\n\n````javascript\n\n\t# bunch of code\n````\n\n### Packaging\n\nIf true, builds a hash with all your folders-as-namespaces.\n\nIf you have file 'lovage.coffee' declared inside the \"artists/triphop\" folder, you can declare it with 'class artists triphop.Lovage', the namespace 'artists.triphop' will be created automatically for holding it.\n\n### Expose\n\nIf informed, list all you packages of classes in the given scope. If you use 'window' as your expose scope, your classes will be available also in the window object -- or whatever scope you inform.\n\n````javascript\n\t\n\tnew window.artists.triphop.Lovage\n````\n\n### Minify\n\nIf true, minify your release file -- debug files are never minified.\n\n### HTTP Folder\n\nThe folder path to reach your debug file through http, in case it is not inside your root directory. Imagine that the 'www' is your root folder, and you have a 'js' folder inside of it with your 'debug.js' file inside of it.\n\nFollowing this case you'd just need to inform 'js' as your http folder.\n\nSo the declarations inside the debug boot loader will follow this location in order to import your scripts in debug mode, prepending your http folder to all file paths.\n\nYour release file will not be affected by this property.\n\n### Release\n\nThe file path to your release file.\n\n### Debug\n\nThe file path to your debug file.\n\n## Conlusion\n\nSo when you call 'toaster -w' in this directory, this config is loaded and every file and folder inside 'src' folder will be watched.\n\nIf debug is enabled (option -d), files will be also compiled individually for a sane debugging routine inside the browser, in the same directory you have your debug file.\n\nEvery time something changes, CoffeeToaster re-compiles all of your application by:\n\n* collecting all .coffee files and processing everything, adding package declarations to class definitions based on the folder they are located\n* re-ordering everything, always defining files and classes before they're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\nHold it! How the hell does it know when my files or classes are needed?\n\n## Import directive\n\nThe import directive is known by:\n\n * #<< app/views/user_view\n * #<< app/utils/*\n\nBy putting '#<< app/views/user_view' in your CoffeeScript file, you're telling CoffeeToaster that there's a dependency.\n\nWild cards '#<< app/utils/*' are also accepted as a handy option.\n\n# Advanced options\n\nYou can pass your own config file for toaster instead of the default one 'toaster.coffee', with the '-f' or '--config-file' option:\n\n````javascript\n\n\ttoaster -wdf mycustomconfig.coffee\n````\n\nOr even pass even the whole configuration as a JSON string, with the '-j' or<BR>\n'--config' option:\n\n````javascript\n\n\ttoaster -wdj '{\"folders\":{\"src\":\"\"},\"expose\":\"window\",\"release\":\"app.js\",\"debug\":\"app-debug.js\"}'\n````\n\n# Examples\n\nYou'll certainly find some useful resources in the examples provided.\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config options, always looking for the differences in your javascript release file.\n\n> [Single folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/single-folder)<BR>\n> [Multi folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/multi-folder)<BR>\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n# API\n\nYou can use Toaster through API as well, in case you want to power up your compiling tasks or even build some framework/lib on top of it.\n\nSee the API example for further information.\n > [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)\n\n````ruby\n\n\tToaster = require(\"coffee-toaster\").Toaster\n\t\n\ttoasting = new Toaster basedir, options, skip_initial_build\n\ttoasting.build header_code_injection, footer_code_injection\n````\n\n# Contributing\n\n## Setting everything up\n\n````bash\n\tgit clone git://github.com/serpentem/coffee-toaster.git && cd coffee-toaster\n\tgit submodule update --init\n\tnpm link\n````\n\n## Watch'n'compile mode\n\nStarts watching/compiling using a previuos version of the CoffeeToaster itself.\n\n````bash\n\tnpm start\n````\n\n# Issues\n\nDo not hesitate to open a feature request or a bug report.\n> https://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\n\nA place to talk about it, ask anything, get in touch. Luckily you'll be answered sooner than later.\n> https://groups.google.com/group/coffee-toaster\n\nNOTE: The list is active and maintained, though the low activity.\n\n# Changelog\n\n> [CHANGELOG.md](https://github.com/serpentem/coffee-toaster/tree/master/CHANGELOG.md)","readmeFilename":"README.md","_id":"coffee-toaster@0.6.4","dist":{"shasum":"18d7590c86bde647debfd0560dc75fa360497997","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.6.4.tgz","integrity":"sha512-n0PdGVGWUTQeZrybz58VNHM9Qj+SXyhnXj+MdQh4Z3qM3Ks4uJROaa538yCAw7mxG/IijPCH2K6fYtRSgIdMog==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCH07Kcy3/zc8LVzbZvC5UZ7Nrt+D2JuXt854HTkEXmgcCIH0qYaW3fhvoECLk1x2nMQv+FWdh07lAm9oIhWe8LUrI"}]},"_npmVersion":"1.1.65","_npmUser":{"name":"nybras","email":"anderson@arboleya.me"},"maintainers":[{"name":"nybras","email":"me@nybras.com"},{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.6.5":{"author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"name":"coffee-toaster","description":"Minimalist manager and build system for CoffeeScript, an alternative for AMD's or CJS's OOP patterns, but with similar results. Made for those who dare to use class definitions in CoffeeScript while being able to easily inherit from external files. Powered with imports directives that use wildcards facilities, exposed scopes and excluded files filter options. The system can even use folders-as-namespaces to help you avoid naming collisions in architecture.","version":"0.6.5","repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"},"main":"./lib/toaster","directories":{"lib":"./lib/"},"bin":{"toaster":"./bin/toaster"},"scripts":{"test":"node ./build/coffee-toaster/bin/toaster . -c; vows spec/*.coffee --spec","start":"node ./build/coffee-toaster/bin/toaster . -w"},"engines":{"node":">= 0.8.14"},"dependencies":{"coffee-script":"1.3.x","colors":"0.5.x","uglify-js":"1.1.x","optimist":"0.2.x","growl":"1.2.x","vows":"0.6.x"},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nVersion 0.6.5\n\n[![Build Status](https://secure.travis-ci.org/serpentem/coffee-toaster.png)](http://travis-ci.org/serpentem/coffee-toaster)\n\nCoffeeToaster is a dependency manager and build system for CoffeeScript.\n\nThe main purpose is to provide a very comfortable environment to code large libraries using such things as class definitions and namespaces, in order to to help avoid naming collisions in your architecture.\n\nA smart 'require' powered by wild-cards is also provided, together with a powerful build system that concatenates everything and outputs a single javascript release file that can be even minified if you like.\n\nThe build system was developed to offer vendors support, with specific ordering options. If you are adept of the extends directive in CoffeeScript, Toaster will even check if you have required base classes for the classes that extends another.\n\nThe CLI program informs you about everything that is happening when a new file is created, deleted or modified. You can even drag'n'drop a folder with lots of CoffeeScript files inside your source folder and everything will be handled gracefully.\n\nIf you are building for the browser you can use the debug option to compile everything individually -- plus, node targeted support is on the way. In debug mode you'll be gifted with a boot-loader that will load every file in the proper order according your needs.\n\nI should also mention that it's not some kind of AMD or CJS implementation, as you may be thinking. It's much more like a new point of view based on my specific needs and personal taste, which I didn't come up with a fancy name yet.\n\nKeep on reading this README, and please do not hesitate to open a feature request or a bug report.\n> https://github.com/serpentem/coffee-toaster/issues\n\nIn case of any doubts, drop an email at the email group and luckily you'll be answered sooner than later.\n> https://groups.google.com/group/coffee-toaster\n\nThis package was created initially as a base for creating the [Theoricus](https://github.com/serpentem/theoricus) framework (which is in a very alpha stage) and will be evolved as needed.\n> https://github.com/serpentem/theoricus\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n * You can require any file whenever your need to\n* Vendors management\n* Packaging System & Namespaces\n * Automagic packaging system that uses folders as namespaces\n* Micro build routines to help you customize and release your peace of code\n* Exports aliases\n * Lets you set a top package to list all your modules\n* Broken and circular-loop dependencies validation\n * Helps you prevent some mistakes with circular dependencies loops and alerts you against dependencies not found\n* Live syntax-check\n * Precise live syntax-check with file path and line number information\n* Growl support\n * Warning/Error messages are shown even in growl\n* Debug Mode\n * In order to provide an easy debugging routine once inside the browser, all files will be compiled individually into its respectives '.js' versions and a smart boot-loader (your-debug-file.js) is provided to load every file orderly. Just include this boot-loader in your html file and voilà\n* Minify support\n * Aiming to be practical, the output can be even minified (using uglify-js)\n* Scaffolding routines\n * Interactive creation of a very simple skeleton for new projects and config (toaster.coffee) file for existent projects\n\n\n# Installation\n\n\tnpm install -g coffee-toaster\n\n# Usage\n\n## Creating a new App\n\nCoffeeToaster suggests a very simple structure for initial projects, you can customize it as you like.\n\n\ttoaster -n mynewapp\n\nYou will be asked for some things:\n\n1. **source folder** - Relative folderpath to your source folder.\n  * i.e.: src\n1. **release file** - Relative filepath to your release file.\n  * i.e.: www/js/app.js\n1. **http folder** - The folderpath to reach your debug file through http, in case it is  not inside your root directory. Imagine that the 'www' is your root folder, so you'd just need to inform 'js' as the http folder.\n  * i.e.: js\n\nYour release file will not be affected by the 'http folder' property.\n\nConsidering all the default values, you'll end up with a structure as such:\n\n\tmyawsomeapp/\n\t├── src\n\t├── vendors\n\t├── www\n\t    └── js\n\t└── toaster.coffee\n\n\t4 directories, 1 file\n\nThe toaster.coffee file will have this content:\n\n````ruby\n\n\t# => SRC FOLDER\n\ttoast 'src'\n\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\n## Toasting an existing project\n\nYou can also toast an existing project as such:\n\n\tcd existing-project\n\ttoaster -i\n\nOr:\n\n\ttoaster -i existing-project\n\nSome of the same information (src, release and http folder) will be required, answer everything according to your project's structure.\n\nA 'toaster.coffee' file will be created inside of it.\n\n## When the magic happens\n\nTo see all that CoffeeToaster can do for you, enter the project folder and type 'toaster -w' after creating or toasting a new project:\n\n\tcd existing-project\n\ttoaster -w\n\nOr:\n\n\ttoaster -w existing-project\n\nYour release file will be saved according your configuration and Toaster will start in watch'n'compile mode. Any changes you make to your src files will trigger the re-compile.\n\n# Debug Mode\n\nIn debug mode (option -d) all files will be compiled individually inside a folder called \"toaster\" in the same directory you've pointed your debug file, aiming to ease the debugging process.\n\n\tcd existing-project\n\ttoaster -wd\n\nFor example, if you have \"release/app-debug.js\", a folder will be created in \"release/toaster\" and all your CoffeeScript files will be compiled to Javascript within.\n\nBellow is a representative directory structure:\n\n\tusage/\n\t├── vendors\n\t├── src\n\t│   ├── app\n\t│   │   └── app.coffee\n\t│   ├── artists\n\t│   │   ├── progressive\n\t│   │   │   ├── kingcrimson.coffee\n\t│   │   │   ├── themarsvolta.coffee\n\t│   │   │   └── tool.coffee\n\t│   │   └── triphop\n\t│   │       ├── lovage.coffee\n\t│   │       ├── massiveattack.coffee\n\t│   │       └── portishead.coffee\n\t│   └── genres\n\t│       ├── progressive.coffee\n\t│       └── triphop.coffee\n\t├── www\n\t│   ├── index.html\n\t│   └── js\n\t│       ├── app.js\n\t│       ├── app-debug.js\n\t│       └── toaster\n\t│           ├── app\n\t│           │   └── app.js\n\t│           ├── artists\n\t│           │   ├── progressive\n\t│           │   │   ├── kingcrimson.js\n\t│           │   │   ├── themarsvolta.js\n\t│           │   │   └── tool.js\n\t│           │   └── triphop\n\t│           │       ├── lovage.js\n\t│           │       ├── massiveattack.js\n\t│           │       └── portishead.js\n\t│           └── genres\n\t│               ├── progressive.js\n\t│               └── triphop.js\n\t└── toaster.coffee\n\nThe debug file you've chosen is the boot-loader responsible to load all your files into the right order.\n\nSo in your .html you'll have two options:\n\n**1)** Include your release file.\n\n````html\n\t<script src=\"js/app.js\"></script>\n````\n \n**2)** Include the toaster boot-loader (your debug mode).\n\n````html\n\t<script src=\"js/app-debug.js\"></script>\n````\n\n# How does everything work?\n\nCoffeeToaster will create a file called 'toaster.coffee' in your app main folder.\n\n## Config File (toaster.coffee)\n\nThis file contains information of your app, i.e:\n\n````ruby\n\n\t# => SRC FOLDER\n\ttoast 'src'\n\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\nYou can have a multi-source-folders as well, i.e:\n\n````ruby\n\n\ttoast\n\t\t# SRC FOLDERS\n\t\tfolders:\n\t\t\t\"src/app\": \"app\"\n\t\t\t\"src/theoricus\": \"theoricus\"\n\t\t\n\t\t# EXCLUDED FOLDERS\n\t\t# exclude: ['folder/to/exclude', 'another/folder/to/exclude', ... ]\n\n\t\t# => VENDORS and EXCLUDED FOLDERS (optional)\n\t\t# vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n\n\t\t# => OPTIONS (optional, default values listed)\n\t\t# bare: false\n\t\t# packaging: true\n\t\t# expose: ''\n\t\t# minify: false\n\n\t\t# => HTTPFOLDER (optional), RELEASE / DEBUG (required)\n\t\thttpfolder: 'js'\n\t\trelease: 'www/js/app.js'\n\t\tdebug: 'www/js/app-debug.js'\n````\n\n### Folders\n\nAn Object of objects containing setup information about the folders, in the format:\n\t\n\t'folderpath':'folderalias'\n\nWhen using multi-folders, you can specify this option to map everything as you need. The hash-key is the path of your folder, and the hash-value is the alias you want to prepend to all files under that.\n\nPay attention to this specially when using Toaster with the '-j' option.\n\n### Exclude\n\nLet's you excplicity exclude some folders from Toaster search/process mechanism.\n\n### Vendors\n\nYou can define vendors such as:\n\n````ruby\n\n\tvendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely javascript, preferably minified ones -- Toaster will not compile or minify them, only concatenate everything.\n\n### Bare\n\nIf true, compile your CS files without the top-level function safety wrapper:\n\n````javascript\n\n\t(function() {\n\t  # bunch of code\n\t}).call(this);\n````\n\nSo you will end up with just 'bunch of code':\n\n\n````javascript\n\n\t# bunch of code\n````\n\n### Packaging\n\nIf true, builds a hash with all your folders-as-namespaces.\n\nIf you have file 'lovage.coffee' declared inside the \"artists/triphop\" folder, you can declare it with 'class artists triphop.Lovage', the namespace 'artists.triphop' will be created automatically for holding it.\n\n### Expose\n\nIf informed, list all you packages of classes in the given scope. If you use 'window' as your expose scope, your classes will be available also in the window object -- or whatever scope you inform.\n\n````javascript\n\t\n\tnew window.artists.triphop.Lovage\n````\n\n### Minify\n\nIf true, minify your release file -- debug files are never minified.\n\n### HTTP Folder\n\nThe folder path to reach your debug file through http, in case it is not inside your root directory. Imagine that the 'www' is your root folder, and you have a 'js' folder inside of it with your 'debug.js' file inside of it.\n\nFollowing this case you'd just need to inform 'js' as your http folder.\n\nSo the declarations inside the debug boot loader will follow this location in order to import your scripts in debug mode, prepending your http folder to all file paths.\n\nYour release file will not be affected by this property.\n\n### Release\n\nThe file path to your release file.\n\n### Debug\n\nThe file path to your debug file.\n\n## Conlusion\n\nSo when you call 'toaster -w' in this directory, this config is loaded and every file and folder inside 'src' folder will be watched.\n\nIf debug is enabled (option -d), files will be also compiled individually for a sane debugging routine inside the browser, in the same directory you have your debug file.\n\nEvery time something changes, CoffeeToaster re-compiles all of your application by:\n\n* collecting all .coffee files and processing everything, adding package declarations to class definitions based on the folder they are located\n* re-ordering everything, always defining files and classes before they're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\nHold it! How the hell does it know when my files or classes are needed?\n\n## Import directive\n\nThe import directive is known by:\n\n * #<< app/views/user_view\n * #<< app/utils/*\n\nBy putting '#<< app/views/user_view' in your CoffeeScript file, you're telling CoffeeToaster that there's a dependency.\n\nWild cards '#<< app/utils/*' are also accepted as a handy option.\n\n# Advanced options\n\nYou can pass your own config file for toaster instead of the default one 'toaster.coffee', with the '-f' or '--config-file' option:\n\n````javascript\n\n\ttoaster -wdf mycustomconfig.coffee\n````\n\nOr even pass even the whole configuration as a JSON string, with the '-j' or<BR>\n'--config' option:\n\n````javascript\n\n\ttoaster -wdj '{\"folders\":{\"src\":\"\"},\"expose\":\"window\",\"release\":\"app.js\",\"debug\":\"app-debug.js\"}'\n````\n\n# Examples\n\nYou'll certainly find some useful resources in the examples provided.\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config options, always looking for the differences in your javascript release file.\n\n> [Single folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/single-folder)<BR>\n> [Multi folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/multi-folder)<BR>\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n# API\n\nYou can use Toaster through API as well, in case you want to power up your compiling tasks or even build some framework/lib on top of it.\n\nSee the API example for further information.\n > [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)\n\n````ruby\n\n\tToaster = require(\"coffee-toaster\").Toaster\n\t\n\ttoasting = new Toaster basedir, options, skip_initial_build\n\ttoasting.build header_code_injection, footer_code_injection\n````\n\n# Contributing\n\n## Setting everything up\n\n````bash\n\tgit clone git://github.com/serpentem/coffee-toaster.git && cd coffee-toaster\n\tgit submodule update --init\n\tnpm link\n````\n\n## Watch'n'compile mode\n\nStarts watching/compiling using a previuos version of the CoffeeToaster itself.\n\n````bash\n\tnpm start\n````\n\n# Issues\n\nDo not hesitate to open a feature request or a bug report.\n> https://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\n\nA place to talk about it, ask anything, get in touch. Luckily you'll be answered sooner than later.\n> https://groups.google.com/group/coffee-toaster\n\nNOTE: The list is active and maintained, though the low activity.\n\n# Changelog\n\n> [CHANGELOG.md](https://github.com/serpentem/coffee-toaster/tree/master/CHANGELOG.md)","_id":"coffee-toaster@0.6.5","dist":{"shasum":"f193293c070f00eb2a9096b81fffdb99189ba7d5","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.6.5.tgz","integrity":"sha512-FMqk7BU7v9Uwo+MRr6nKJwI0RB966UdV0Ffw3BLOqA7M2OjPeoGEafOskuGBJLWgtUUCuB1xBhIDOYdzDetIbA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHjLpqqmyKBvKzYPAMQolm5n3kkRYi5T7eoeiauSQoubAiEA/+V0Qoudj7SuVO7JbPtE0uU6llNxipl55OBwdeMtI9Y="}]},"maintainers":[{"name":"nybras","email":"me@nybras.com"},{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.6.6":{"name":"coffee-toaster","version":"0.6.6","author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"description":"Minimalist build system for CoffeeScript.","keywords":["coffeescript","build","namespace","tool"],"main":"./lib/toaster","directories":{"lib":"./lib/"},"scripts":{"test":"make test"},"repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"},"bin":{"toaster":"./bin/toaster"},"engines":{"node":">= 0.8.14"},"dependencies":{"fs-util":"0.3.4","coffee-script":"1.3.x","uglify-js":"1.1.x","optimist":"0.2.x","colors":"0.5.x","vows":"0.6.x","growl":"1.2.x"},"optionalDependencies":{"growl":"1.2.x"},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nMinimalist build system for CoffeeScript.\n> Version 0.6.6\n\n[![Build Status](https://secure.travis-ci.org/serpentem/coffee-toaster.png)](http://travis-ci.org/serpentem/coffee-toaster)\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n* Vendors management\n* Automagically packaging system with namespaces\n* Micro build routines\n* Exports aliases\n* Broken and circular-loop dependencies validation\n* Live syntax-check\n* Growl support\n* Debug Mode\n* Minify support\n* Scaffolding routines\n\n# Issues\nDo not hesitate to open a feature request or a bug report.\n> https://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\nA place to talk about it, ask anything, get in touch. Luckily you'll be answered\nsooner than later.\n\n> https://groups.google.com/group/coffee-toaster\n\n*NOTE: The list is `active` and `maintained`, though the low activity. So don't\nbe shy.*\n\n# About\n\nMinimalist build system for CoffeeScript, made for those who dare to use class\ndefinitions in CoffeeScript while being able to easily inherit from external\nfiles. The system is powered with import directives that uses wildcards\nfacilities, exposed scopes, excluded files filter options and a packaging system\nthat can inject your folders-as-namespaces to all your classes based on where\nthey are under your src folder.\n\nCoffeeToaster was created initially as a base for creating the\n[Theoricus Framework](https://github.com/serpentem/theoricus).\n\n\n# Docs\n\n - [Installing](#installing)\n - [Scaffolding](#scaffolding)\n   - [Initializing new app](#initializing-new-app)\n   - [Initializing config file](#initializing-config-file)\n - [Usage](#usage)\n   - [Import directive](#import-directive)\n   - [Compile](#compile) `-c`\n   - [Watch](#watch) `-w`\n   - [Debug](#debug) `-cd`, `-wd`\n     - [Representative structure](#representative-structure)\n   - [HTML inclusion](#html-inclusion)\n   - [Advanced options](#advanced-options)\n   - [Conclusion](#conclusion)\n     - [Note for VIM Users](#vim-users)\n - [Config file](#config-file)\n   - [Config options](#config-options)\n     - [`folders`](#config-options-folders)\n     - [`exclude`](#config-options-exclude)\n     - [`vendors`](#config-options-vendors)\n     - [`bare`](#config-options-bare)\n     - [`packaging`](#config-options-packaging)\n     - [`expose`](#config-options-expose)\n     - [`minify`](#config-options-minify)\n     - [`httpfolder`](#config-options-httpfolder)\n     - [`release`](#config-options-release)\n     - [`debug`](#config-options-debug)\n - [Examples](#examples)\n - [API](#api)\n - [Contributing](#contributing)\n   - [Setup](#setup)\n   - [Building](#building)\n   - [Watching](#watching)\n   - [Testing](#testing)\n - [CHANGELOG](#changelog)\n\n<a name=\"installing\" />\n# Installing\n----\n\n`npm install -g coffee-toaster`\n\n<a name=\"scaffolding\" />\n# Scaffolding\n----\n\nThere are two simple `scaffolding` routines bundled with CoffeeToaster for\ncreating new projects structure from the scratch and also for creating the\nconfig `toaster.coffee` file for existent projects.\n\n<a name=\"initializing-new-app\" />\n## Initializing new app\n\nCoffeeToaster suggests a very simple structure for initial projects, you can\ncustomize it as you like.\n\n`toaster -n mynewapp`\n\nYou will be asked for some things:\n\n> source folder\n\nRelative folderpath to your source folder, default is `src`.\n\n> release file\n\nRelative filepath to your release file, default is `www/js/app.js`\n\n> http folder\n\nThe folderpath to reach your debug file through http, default is an `empty\nstring`. Imagine that the `www` is your root web folder, and inside of it you\nhave a `js` dir where you put your debug file. In this case you'd just need to\ninform 'js' as the http folder. It tells toaster *how to reach your debug js\nfile* starting from the `/` on your server.\n\nThis property is only for **debug**, your *release* file will not be affected.\n\n### Result\n\nConsidering all the default values, you'll end up with a structure as such:\n\n````\nmyawsomeapp/\n├── src\n├── vendors\n├── www\n    └── js\n└── toaster.coffee\n\n4 directories, 1 file\n````\n\n<a name=\"initializing-config-file\" />\n## Initializing config file\n\nYou can also initialize an existing project with a config `toaster.coffee` file\nsuch as:\n\n````\ncd existing-project\ntoaster -i\n````\n\nSome of the same information (`src`, `release` and `httpfolder`) will be\nrequired, answer everything according to your project's structure and a config\n`toaster.coffee` file will be created inside of it.\n\n<a name=\"usage\" />\n# Usage\n----\n\nToaster help screen.\n\n````\nCoffeeToaster\n  Minimalist build system for CoffeeScript\n\nUsage:\n  toaster [options] [path]\n\nExamples:\n  toaster -n myawsomeapp   (required)\n  toaster -i [myawsomeapp] (optional)\n  toaster -w [myawsomeapp] (optional)\n  toaster -wd [myawsomeapp] (optional)\n\nOptions:\n  -n, --new          Scaffold a very basic new App                   \n  -i, --init         Create a config (toaster.coffee) file           \n  -w, --watch        Start watching/compiling your project           \n  -c, --compile      Compile the entire project, without watching it.\n  -d, --debug        Debug mode (compile js files individually)      \n  -j, --config       Config file formatted as a json-string.           [string]\n  -f, --config-file  Path to a different config file.                  [string]\n  -v, --version                                                      \n  -h, --help \n````\n\n<a name=\"import-directive\"/>\n## Import directive\n\nThe import directive is known by:\n\n````coffeescript\n#<< app/views/user_view\n#<< app/utils/*\n````\n\nBy putting `#<< app/views/user_view` in your CoffeeScript file, you're telling\nCoffeeToaster that there's a dependency. It's like a `require`, except that you\ncan't save a reference of the imported file to a variable. Instead, this\ndirectives shoud be put in the first lines of your files.\n\nThis is how you organically tells Toaster about the specific ordering\noptions to be considered when all of your files get merged. Files imported this\nway will only be gracefully sorted out in your final output javascript so\nevery file is always **defined** before it's **needed**.\n\nWild cards `#<< app/utils/*` are also accepted as a handy option.\n\nIf you're writing a `class B` that will extends the `class A`, you shoud first\nimport the `class A` so it will be available for being extended by `class B`.\n\n* src/app/a\n\n````coffeescript\nclass A\n  constructor:->\n    console.log 'Will be used as base class.'\n````\n\n* src/app/b\n\n````coffeescript\n#<< app/a\nclass B extends A\n  constructor:->\n    console.log 'Using class A as base class'\n````\n\nThink of it as a glue that you use to chain all of your files appropriately.\n\n<a name=\"compiling\"/>\n## Compile\n\nCompile your project according your [config file](#config-file).\n\n````bash\ncd existing-project\ntoaster -c\n````\n\n<a name=\"watching\"/>\n## Watch\n\nStarts Toaster in watching'n'compiling mode:\n\n````bash\ncd existing-project\ntoaster -w\n````\n\nAny changes you make to your `src` files will trigger the `compile` action.\n\n<a name=\"debugging\"/>\n## Debug\n\nIn debug mode option `-d` all files will be compiled individually inside a\nfolder called `toaster` in the same directory you've pointed your debug file,\naiming to ease the debugging process.\n\n````bash\ntoaster -wd\ntoaster -cd\n````\n\nFor example, if you have `release/app-debug.js`, a folder will be created at\n`release/toaster` and all your CoffeeScript files will be compiled to Javascript\nwithin.\n\n<a name=\"representative-structure\"/>\n### Representative Structure\n\nBellow is a representative directory structure after compiling in debug mode.\n\n````\n/usage\n|-- src\n|   `-- app\n|       |-- controllers\n|       |   `-- users_controller.coffee\n|       |-- models\n|       |   `-- user_model.coffee\n|       `-- views\n|           `-- user_view.coffee\n|-- www\n|   `-- js\n|       |-- app-debug.js\n|       |-- app.js\n|       `-- toaster\n|           `-- app\n|               |-- controllers\n|               |   `-- users_controller.js\n|               |-- models\n|               |   `-- user_model.js\n|               `-- views\n|                   `-- user_view.js\n`-- toaster.coffee\n````\n\nEvery CoffeeScript file is compiled individually inside the `www/js/toaster`\ndirectory, so you can debug it sanely.\n\nThe debug file `www/js/app-debug.js` is the boot-loader responsible for loading\nall these individual compiled JS files into the right order.\n\n<a name=\"html-inclusion\"/>\n## HTML inclusion\n\nSo in your `.html` you'll have two options:\n\n> 1) Include your release file.\n\n````html\n<script src=\"js/app.js\"></script>\n````\n \n> 2) Include the toaster boot-loader (your debug mode).\n\n````html\n<script src=\"js/app-debug.js\"></script>\n````\n\n<a name=\"advanced-options\"/>\n## Advanced options\n\nYou can pass your own config file for toaster instead of the default one\n`toaster.coffee`, with the `-f` or `--config-file` option:\n\n````bash\ntoaster -wdf config/mycustomconfig.coffee\n````\n\n*NOTE: It's important that you always call this from your project base folder,\notherwise the paths of your config can get messy. Remembers also that the paths\nin your config file shoud ideally be always relative to your project base\nfolder.*\n\nAlternativelly, you can even pass the whole configuration as a JSON string, with\nthe `-j` or `--config` option:\n\n````bash\ntoaster -wdj '{\"folders\":{\"src\":\"\"},\"expose\":\"window\",\"release\":\"app.js\",\"debug\":\"app-debug.js\"}'\n````\n\n*NOTE: The same above.*\n\n<a name=\"conclusion\"/>\n## Conlusion\n\nEvery time something changes, CoffeeToaster recompiles all of your application\nby:\n\n* collecting all .coffee files and processing everything, adding namespace's\ndeclarations to class definitions based on the folder they are located\n* reordering everything, always defining files and classes before they're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\n<a name=\"vim-users\"/>\n### VIM Users\n\nDue to the way VIM handles files, you'll need to disable the creation of `swap`\nand `backup` files.\n\nTo do it, just put these three lines in your `.vimrc`:\n\n``` vim\n\" for coffee-toaster\nset nobackup       \" no backup files\nset nowritebackup  \" only in case you don't want a backup file while editing\nset noswapfile     \" no swap files\n```\n\nThis will guarantee the expected behavior of Toaster and make it play nicely\nwith VIM without any conflicts. For more info about why it's really needed,\nplease check this [thread](https://github.com/serpentem/coffee-toaster/issues/47).\n\n<a name=\"config-file\" />\n# Config file\n----\n\nThe `toaster.coffee` is the config file from where Toaster seek all information\nabout your app, vendores, build options and so on. There are two main usages\nyou can make of this file:\n\n* **1) Single source folder:**\n\nWhen all your code is bellow one single source folder your set up the main\n`toast` call passing the folder path directly.\n\n````coffeescript\n# src folder\ntoast 'src'\n\n  # excluded items (will be used as a regex)\n  exclude: ['folder/to/exclude', 'another/folder', '.DS_Store' ]\n\n  # packaging vendors among the code\n  vendors: ['vendors/x.js', 'vendors/y.js' ]\n\n  # gereral options (all is optional, default values listed)\n  bare: false\n  packaging: true\n  expose: '' # can be 'window', 'exports' etc\n  minify: false\n\n  # httpfolder (optional), release and debug (both required)\n  httpfolder: 'js'\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\n* **2) Multi source folder:**\n\nWhen your code is splitted between two or more source folders you can set the\nmain `toast` call without any path, and inform your folders right bellow it.\n\n````coffeescript\ntoast\n  folders:\n    'src/my/app/folder': 'app'\n    'src/my/lib/folder': 'lib'\n    # ...\n````\n\n<a name=\"config-options\" />\n## Config options\n\nLet's take a closer look at all properties you can have in your `toaster.coffee`\nfile and what each one of these is responsible of.\n\n<a name=\"config-options-folders\" />\n### `folders`\n\n> Mandatory: `no` <BR/>\n> Type: `Object` <BR/>\n> Default: `null` <BR/>\n\nIn case you have more than one `src` folder, you can set an `object` of\n`objects` containing setup information about all your source folders, in the\nformat `'folderpath':'folderalias'`.\n\nThe **hash-key** is the `path` of your folder, and the **hash-value** is the\n`alias` you want to prepend to all files under that.\n\n*Pay attention to this specially when using Toaster with the '-j'\n[option](#advanced-options).*\n\nTo give an example, the equivalent use of this config:\n\n````coffeescript\ntoast 'src'\n  # ...\n````\n\nWould be:\n\n````coffeescript\ntoast\n  folders:\n    'src': ''\n````\n\n**NOTE: Aliases take effect only if the [`packaging`](#config-options-packaging)\nis set to `true`.**\n\nAliases lets you set a virtual top namespace to your source folder, if you have\n`src/app/app.coffee` which is a `class App`, you'll usually access it using\n`new app.App`.\n\nNow if you set an alias like `'src':'awesome'` the whole structure under your\nsource folder will be addressed under that `awesome` namespace and you need\nto prepend it when accessing your classes, i.e. `new awesome.app.App`.\n\n<a name=\"config-options-exclude\" />\n### `exclude`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nLet's you excplicity exclude some folder, file or file type from Toaster\nsearch/process mechanism. The string you use here will effectively turn into\na RegExp like that:\n\n````coffeescript\nnew RegExp '.DS_store'\nnew RegExp '.swp'\nnew RegExp 'my/folder/to/be/excluded'\n````\n\n<a name=\"config-options-vendors\" />\n### `vendors`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nYou can define vendors such as:\n\n````coffeescript\n  vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely\njavascript, preferably minified ones -- Toaster will not compile or minify them,\nonly concatenate everything.\n\n<a name=\"config-options-bare\" />\n### `bare`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nIf `true`, compile your CoffeeScript files without the top-level function safety\nwrapper:\n\n````javascript\n  (function() {\n    console.log('My peace of code!');\n  }).call(this);\n````\n\nSo you will end up with just `your peace of code`:\n\n````javascript\n  console.log('My peace of code!');\n````\n\n<a name=\"config-options-packaging\" />\n### `packaging`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nWhen packaging is `true`, Toaster will rewrite **all** your `class`\ndeclarations.\n\nIf you have a file in `src/app/models/user.coffee` with this contents:\n\n````coffeescript\nclass User\n````\n\nToaster will rewrite your declaration prepending a `namespace` to it, based on\nthe folder the class is located, resulting -- in this example -- into this:\n\n````coffeescript\nclass app.models.User\n````\n\nThis rewriting process is **saved** directly into your `file`. In case you move\nthis class to another folder, the prepended `namespace` will be rewrited again,\nalways following your folder structure.\n\nIn other words, your don't need to worry about hardcoded namespaces in your\nfiles, because Toaster will handle all the dirty for you.\n\n<a name=\"config-options-expose\" />\n### `expose`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nIf informed, list all you packages of classes in the given scope. If you use\n`window` as your expose scope, your classes will be available also in the window\nobject -- or whatever scope you inform, suck as `exports` if you're building\nfor NodeJS.\n\nIn the end you'll be able to access your files throught this scope where your\nclasses was exposed.\n\n````coffeescript\nnew window.app.models.User\nnew exports.app.models.User\n````\n\n<a name=\"config-options-minify\" />\n### `minify`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `true` <BR/>\n\nIf `true`, minify your release file using UglifyJS.\n\nDebug files are **never** minified.\n\n<a name=\"config-options-httpfolder\" />\n### `httpfolder`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `''` <BR/>\n\nThe folder path to reach your debug file through http, in case it is not inside\nyour root directory. Imagine that the `www` is your root folder and when you\naccess your webiste the `/` referes to this folder.\n\nInside this `www` folder you have another folder called `js` where you put all\nyour compiled js, resulting from a config like this:\n\n````coffeescript\ntoast 'src'\n  # ...\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\nFollowing this case you'd just need to inform `js` as your http folder. Toaster\nwill use it to reach your **debug** files. For that, it will writes the\ndeclarations inside the `debug boot loader` following this location in order to\nimport your scripts properly when in debug mode, prepending your `httpfolder` to\nall file paths:\n\n````javascript\n// app-debug.js\ndocument.write('<scri'+'pt src=\"js/toaster/app.js\"></scr'+'ipt>')\n````\n\nWithout knowing that your JS files is under the `js` folder this path would be\nbroken.\n\n**NOTE: Your release file will not be affected by this property.**\n\n<a name=\"config-options-release\" />\n### `release`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **release** file.\n\n<a name=\"config-options-debug\" />\n### `debug`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **debug** file.\n\n<a name=\"examples\"/>\n# Examples\n----\n\nYou'll certainly find some useful resources in the examples provided.\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config\noptions, always looking for the differences in your javascript release file.\n\n> [Single folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/single-folder)<BR>\n> [Multi folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/multi-folder)<BR>\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n<a name=\"api\"/>\n# API\n----\n\nYou can use Toaster through API as well, in case you want to power up your\ncompiling tasks or even build some framework/lib on top of it.\n\nSee the API example for further information.\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)\n\n````coffeescript\n  Toaster = (require 'coffee-toaster').Toaster\n  toasting = new Toaster [basedir], [options], [skip_initial_build]\n  toasting.build [header_code_injection], [footer_code_injection]\n````\n\n<a name=\"contributing\"/>\n# Contributing\n----\n\n<a name=\"setup\"/>\n## Setting everything up\n\nEnvironment setup is simple achieved by:\n\n````bash\n  git clone git://github.com/serpentem/coffee-toaster.git\n  cd coffee-toaster && git submodule update --init\n  npm link\n````\n\n<a name=\"building\"/>\n## Building\n\nBuilds the release file inside the `lib` folder.\n\n````bash\n  make build\n````\n\n<a name=\"watching\"/>\n## Watching'n'Compiling\n\nStarts watching/compiling using a previuos version of the CoffeeToaster itself.\n\n````bash\n  make watch\n````\n\n<a name=\"testing\"/>\n## Testing\n\nRun all tests.\n\n````bash\n  make test\n````\n\n<a name=\"changelog\"/>\n# Changelog\n----\n\n> [CHANGELOG.md](https://github.com/serpentem/coffee-toaster/tree/master/CHANGELOG.md)","readmeFilename":"README.md","_id":"coffee-toaster@0.6.6","dist":{"shasum":"3cd44e76f14f5494208c51513d48158c6475a53c","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.6.6.tgz","integrity":"sha512-s2KBy95ebhuImx2zqthSEYWJqnG/YrdDlOMkLgSj4g4FA5QqgrymapMdpPoEmQapKHkCTGCPntcSYQKe4WYlfQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnzKu2XRnP6/Iz8LPEWKA3Kyx7w6/ZaGrZjjSnCQTMjQIhAITrWbcxvFpp2KLoh5ziD4sNTNzDX1buhjmSo/CjoCoH"}]},"_npmVersion":"1.1.65","_npmUser":{"name":"arboleya","email":"anderson@arboleya.me"},"maintainers":[{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.6.7":{"name":"coffee-toaster","version":"0.6.7","author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"description":"Minimalist build system for CoffeeScript.","keywords":["coffeescript","build","namespace","tool"],"main":"./lib/toaster","directories":{"lib":"./lib/"},"scripts":{"test":"make test"},"repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"},"bin":{"toaster":"./bin/toaster"},"engines":{"node":">= 0.8.14"},"dependencies":{"fs-util":"0.3.4","coffee-script":"1.3.x","uglify-js":"1.1.x","optimist":"0.2.x","colors":"0.5.x","vows":"0.6.x","growl":"1.2.x"},"optionalDependencies":{"growl":"1.2.x"},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nMinimalist build system for CoffeeScript.\n> Version 0.6.7\n\n[![Build Status](https://secure.travis-ci.org/serpentem/coffee-toaster.png)](http://travis-ci.org/serpentem/coffee-toaster)\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n* Vendors management\n* Automagically packaging system with namespaces\n* Micro build routines\n* Exports aliases\n* Broken and circular-loop dependencies validation\n* Live syntax-check\n* Growl support\n* Debug Mode\n* Minify support\n* Scaffolding routines\n\n# Issues\nDo not hesitate to open a feature request or a bug report.\n> https://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\nA place to talk about it, ask anything, get in touch. Luckily you'll be answered\nsooner than later.\n\n> https://groups.google.com/group/coffee-toaster\n\n*NOTE: The list is `active` and `maintained`, though the low activity. So don't\nbe shy.*\n\n# About\n\nMinimalist build system for CoffeeScript, made for those who dare to use class\ndefinitions in CoffeeScript while being able to easily inherit from external\nfiles. The system is powered with import directives that uses wildcards\nfacilities, exposed scopes, excluded files filter options and a packaging system\nthat can inject your folders-as-namespaces to all your classes based on where\nthey are under your src folder.\n\nCoffeeToaster was created initially as a base for creating the\n[Theoricus Framework](https://github.com/serpentem/theoricus).\n\n\n# Docs\n\n - [Installing](#installing)\n - [Scaffolding](#scaffolding)\n   - [Initializing new app](#initializing-new-app)\n   - [Initializing config file](#initializing-config-file)\n - [Usage](#usage)\n   - [Import directive](#import-directive)\n   - [Compile](#compile) `-c`\n   - [Watch](#watch) `-w`\n   - [Debug](#debug) `-cd`, `-wd`\n     - [Representative structure](#representative-structure)\n   - [HTML inclusion](#html-inclusion)\n   - [Advanced options](#advanced-options)\n   - [Conclusion](#conclusion)\n     - [Note for VIM Users](#vim-users)\n - [Config file](#config-file)\n   - [Config options](#config-options)\n     - [`folders`](#config-options-folders)\n     - [`exclude`](#config-options-exclude)\n     - [`vendors`](#config-options-vendors)\n     - [`bare`](#config-options-bare)\n     - [`packaging`](#config-options-packaging)\n     - [`expose`](#config-options-expose)\n     - [`minify`](#config-options-minify)\n     - [`httpfolder`](#config-options-httpfolder)\n     - [`release`](#config-options-release)\n     - [`debug`](#config-options-debug)\n - [Examples](#examples)\n - [API](#api)\n - [Contributing](#contributing)\n   - [Setup](#setup)\n   - [Building](#building)\n   - [Watching](#watching)\n   - [Testing](#testing)\n - [CHANGELOG](#changelog)\n\n<a name=\"installing\" />\n# Installing\n----\n\n`npm install -g coffee-toaster`\n\n<a name=\"scaffolding\" />\n# Scaffolding\n----\n\nThere are two simple `scaffolding` routines bundled with CoffeeToaster for\ncreating new projects structure from the scratch and also for creating the\nconfig `toaster.coffee` file for existent projects.\n\n<a name=\"initializing-new-app\" />\n## Initializing new app\n\nCoffeeToaster suggests a very simple structure for initial projects, you can\ncustomize it as you like.\n\n`toaster -n mynewapp`\n\nYou will be asked for some things:\n\n> source folder\n\nRelative folderpath to your source folder, default is `src`.\n\n> release file\n\nRelative filepath to your release file, default is `www/js/app.js`\n\n> http folder\n\nThe folderpath to reach your debug file through http, default is an `empty\nstring`. Imagine that the `www` is your root web folder, and inside of it you\nhave a `js` dir where you put your debug file. In this case you'd just need to\ninform 'js' as the http folder. It tells toaster *how to reach your debug js\nfile* starting from the `/` on your server.\n\nThis property is only for **debug**, your *release* file will not be affected.\n\n### Result\n\nConsidering all the default values, you'll end up with a structure as such:\n\n````\nmyawsomeapp/\n├── src\n├── vendors\n├── www\n    └── js\n└── toaster.coffee\n\n4 directories, 1 file\n````\n\n<a name=\"initializing-config-file\" />\n## Initializing config file\n\nYou can also initialize an existing project with a config `toaster.coffee` file\nsuch as:\n\n````\ncd existing-project\ntoaster -i\n````\n\nSome of the same information (`src`, `release` and `httpfolder`) will be\nrequired, answer everything according to your project's structure and a config\n`toaster.coffee` file will be created inside of it.\n\n<a name=\"usage\" />\n# Usage\n----\n\nToaster help screen.\n\n````\nCoffeeToaster\n  Minimalist build system for CoffeeScript\n\nUsage:\n  toaster [options] [path]\n\nExamples:\n  toaster -n myawsomeapp   (required)\n  toaster -i [myawsomeapp] (optional)\n  toaster -w [myawsomeapp] (optional)\n  toaster -wd [myawsomeapp] (optional)\n\nOptions:\n  -n, --new          Scaffold a very basic new App                   \n  -i, --init         Create a config (toaster.coffee) file           \n  -w, --watch        Start watching/compiling your project           \n  -c, --compile      Compile the entire project, without watching it.\n  -d, --debug        Debug mode (compile js files individually)      \n  -j, --config       Config file formatted as a json-string.           [string]\n  -f, --config-file  Path to a different config file.                  [string]\n  -v, --version                                                      \n  -h, --help \n````\n\n<a name=\"import-directive\"/>\n## Import directive\n\nThe import directive is known by:\n\n````coffeescript\n#<< app/views/user_view\n#<< app/utils/*\n````\n\nBy putting `#<< app/views/user_view` in your CoffeeScript file, you're telling\nCoffeeToaster that there's a dependency. It's like a `require`, except that you\ncan't save a reference of the imported file to a variable. Instead, this\ndirectives shoud be put in the first lines of your files.\n\nThis is how you organically tells Toaster about the specific ordering\noptions to be considered when all of your files get merged. Files imported this\nway will only be gracefully sorted out in your final output javascript so\nevery file is always **defined** before it's **needed**.\n\nWild cards `#<< app/utils/*` are also accepted as a handy option.\n\nIf you're writing a `class B` that will extends the `class A`, you shoud first\nimport the `class A` so it will be available for being extended by `class B`.\n\n* src/app/a\n\n````coffeescript\nclass A\n  constructor:->\n    console.log 'Will be used as base class.'\n````\n\n* src/app/b\n\n````coffeescript\n#<< app/a\nclass B extends A\n  constructor:->\n    console.log 'Using class A as base class'\n````\n\nThink of it as a glue that you use to chain all of your files appropriately.\n\n<a name=\"compiling\"/>\n## Compile\n\nCompile your project according your [config file](#config-file).\n\n````bash\ncd existing-project\ntoaster -c\n````\n\n<a name=\"watching\"/>\n## Watch\n\nStarts Toaster in watching'n'compiling mode:\n\n````bash\ncd existing-project\ntoaster -w\n````\n\nAny changes you make to your `src` files will trigger the `compile` action.\n\n<a name=\"debugging\"/>\n## Debug\n\nIn debug mode option `-d` all files will be compiled individually inside a\nfolder called `toaster` in the same directory you've pointed your debug file,\naiming to ease the debugging process.\n\n````bash\ntoaster -wd\ntoaster -cd\n````\n\nFor example, if you have `release/app-debug.js`, a folder will be created at\n`release/toaster` and all your CoffeeScript files will be compiled to Javascript\nwithin.\n\n<a name=\"representative-structure\"/>\n### Representative Structure\n\nBellow is a representative directory structure after compiling in debug mode.\n\n````\n/usage\n|-- src\n|   `-- app\n|       |-- controllers\n|       |   `-- users_controller.coffee\n|       |-- models\n|       |   `-- user_model.coffee\n|       `-- views\n|           `-- user_view.coffee\n|-- www\n|   `-- js\n|       |-- app-debug.js\n|       |-- app.js\n|       `-- toaster\n|           `-- app\n|               |-- controllers\n|               |   `-- users_controller.js\n|               |-- models\n|               |   `-- user_model.js\n|               `-- views\n|                   `-- user_view.js\n`-- toaster.coffee\n````\n\nEvery CoffeeScript file is compiled individually inside the `www/js/toaster`\ndirectory, so you can debug it sanely.\n\nThe debug file `www/js/app-debug.js` is the boot-loader responsible for loading\nall these individual compiled JS files into the right order.\n\n<a name=\"html-inclusion\"/>\n## HTML inclusion\n\nSo in your `.html` you'll have two options:\n\n> 1) Include your release file.\n\n````html\n<script src=\"js/app.js\"></script>\n````\n \n> 2) Include the toaster boot-loader (your debug mode).\n\n````html\n<script src=\"js/app-debug.js\"></script>\n````\n\n<a name=\"advanced-options\"/>\n## Advanced options\n\nYou can pass your own config file for toaster instead of the default one\n`toaster.coffee`, with the `-f` or `--config-file` option:\n\n````bash\ntoaster -wdf config/mycustomconfig.coffee\n````\n\n*NOTE: It's important that you always call this from your project base folder,\notherwise the paths of your config can get messy. Remembers also that the paths\nin your config file shoud ideally be always relative to your project base\nfolder.*\n\nAlternativelly, you can even pass the whole configuration as a JSON string, with\nthe `-j` or `--config` option:\n\n````bash\ntoaster -wdj '{\"folders\":{\"src\":\"\"},\"expose\":\"window\",\"release\":\"app.js\",\"debug\":\"app-debug.js\"}'\n````\n\n*NOTE: The same above.*\n\n<a name=\"conclusion\"/>\n## Conlusion\n\nEvery time something changes, CoffeeToaster recompiles all of your application\nby:\n\n* collecting all .coffee files and processing everything, adding namespace's\ndeclarations to class definitions based on the folder they are located\n* reordering everything, always defining files and classes before they're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\n<a name=\"vim-users\"/>\n### VIM Users\n\nDue to the way VIM handles files, you'll need to disable the creation of `swap`\nand `backup` files.\n\nTo do it, just put these three lines in your `.vimrc`:\n\n``` vim\n\" for coffee-toaster\nset nobackup       \" no backup files\nset nowritebackup  \" only in case you don't want a backup file while editing\nset noswapfile     \" no swap files\n```\n\nThis will guarantee the expected behavior of Toaster and make it play nicely\nwith VIM without any conflicts. For more info about why it's really needed,\nplease check this [thread](https://github.com/serpentem/coffee-toaster/issues/47).\n\n<a name=\"config-file\" />\n# Config file\n----\n\nThe `toaster.coffee` is the config file from where Toaster seek all information\nabout your app, vendores, build options and so on. There are two main usages\nyou can make of this file:\n\n* **1) Single source folder:**\n\nWhen all your code is bellow one single source folder your set up the main\n`toast` call passing the folder path directly.\n\n````coffeescript\n# src folder\ntoast 'src'\n\n  # excluded items (will be used as a regex)\n  exclude: ['folder/to/exclude', 'another/folder', '.DS_Store' ]\n\n  # packaging vendors among the code\n  vendors: ['vendors/x.js', 'vendors/y.js' ]\n\n  # gereral options (all is optional, default values listed)\n  bare: false\n  packaging: true\n  expose: '' # can be 'window', 'exports' etc\n  minify: false\n\n  # httpfolder (optional), release and debug (both required)\n  httpfolder: 'js'\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\n* **2) Multi source folder:**\n\nWhen your code is splitted between two or more source folders you can set the\nmain `toast` call without any path, and inform your folders right bellow it.\n\n````coffeescript\ntoast\n  folders:\n    'src/my/app/folder': 'app'\n    'src/my/lib/folder': 'lib'\n    # ...\n````\n\n<a name=\"config-options\" />\n## Config options\n\nLet's take a closer look at all properties you can have in your `toaster.coffee`\nfile and what each one of these is responsible of.\n\n<a name=\"config-options-folders\" />\n### `folders`\n\n> Mandatory: `no` <BR/>\n> Type: `Object` <BR/>\n> Default: `null` <BR/>\n\nIn case you have more than one `src` folder, you can set an `object` of\n`objects` containing setup information about all your source folders, in the\nformat `'folderpath':'folderalias'`.\n\nThe **hash-key** is the `path` of your folder, and the **hash-value** is the\n`alias` you want to prepend to all files under that.\n\n*Pay attention to this specially when using Toaster with the '-j'\n[option](#advanced-options).*\n\nTo give an example, the equivalent use of this config:\n\n````coffeescript\ntoast 'src'\n  # ...\n````\n\nWould be:\n\n````coffeescript\ntoast\n  folders:\n    'src': ''\n````\n\n**NOTE: Aliases take effect only if the [`packaging`](#config-options-packaging)\nis set to `true`.**\n\nAliases lets you set a virtual top namespace to your source folder, if you have\n`src/app/app.coffee` which is a `class App`, you'll usually access it using\n`new app.App`.\n\nNow if you set an alias like `'src':'awesome'` the whole structure under your\nsource folder will be addressed under that `awesome` namespace and you need\nto prepend it when accessing your classes, i.e. `new awesome.app.App`.\n\n<a name=\"config-options-exclude\" />\n### `exclude`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nLet's you excplicity exclude some folder, file or file type from Toaster\nsearch/process mechanism. The string you use here will effectively turn into\na RegExp like that:\n\n````coffeescript\nnew RegExp '.DS_store'\nnew RegExp '.swp'\nnew RegExp 'my/folder/to/be/excluded'\n````\n\n<a name=\"config-options-vendors\" />\n### `vendors`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nYou can define vendors such as:\n\n````coffeescript\n  vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely\njavascript, preferably minified ones -- Toaster will not compile or minify them,\nonly concatenate everything.\n\n<a name=\"config-options-bare\" />\n### `bare`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nIf `true`, compile your CoffeeScript files without the top-level function safety\nwrapper:\n\n````javascript\n  (function() {\n    console.log('My peace of code!');\n  }).call(this);\n````\n\nSo you will end up with just `your peace of code`:\n\n````javascript\n  console.log('My peace of code!');\n````\n\n<a name=\"config-options-packaging\" />\n### `packaging`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nWhen packaging is `true`, Toaster will rewrite **all** your `class`\ndeclarations.\n\nIf you have a file in `src/app/models/user.coffee` with this contents:\n\n````coffeescript\nclass User\n````\n\nToaster will rewrite your declaration prepending a `namespace` to it, based on\nthe folder the class is located, resulting -- in this example -- into this:\n\n````coffeescript\nclass app.models.User\n````\n\nThis rewriting process is **saved** directly into your `file`. In case you move\nthis class to another folder, the prepended `namespace` will be rewrited again,\nalways following your folder structure.\n\nIn other words, your don't need to worry about hardcoded namespaces in your\nfiles, because Toaster will handle all the dirty for you.\n\n<a name=\"config-options-expose\" />\n### `expose`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nIf informed, list all you packages of classes in the given scope. If you use\n`window` as your expose scope, your classes will be available also in the window\nobject -- or whatever scope you inform, suck as `exports` if you're building\nfor NodeJS.\n\nIn the end you'll be able to access your files throught this scope where your\nclasses was exposed.\n\n````coffeescript\nnew window.app.models.User\nnew exports.app.models.User\n````\n\n<a name=\"config-options-minify\" />\n### `minify`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `true` <BR/>\n\nIf `true`, minify your release file using UglifyJS.\n\nDebug files are **never** minified.\n\n<a name=\"config-options-httpfolder\" />\n### `httpfolder`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `''` <BR/>\n\nThe folder path to reach your debug file through http, in case it is not inside\nyour root directory. Imagine that the `www` is your root folder and when you\naccess your webiste the `/` referes to this folder.\n\nInside this `www` folder you have another folder called `js` where you put all\nyour compiled js, resulting from a config like this:\n\n````coffeescript\ntoast 'src'\n  # ...\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\nFollowing this case you'd just need to inform `js` as your http folder. Toaster\nwill use it to reach your **debug** files. For that, it will writes the\ndeclarations inside the `debug boot loader` following this location in order to\nimport your scripts properly when in debug mode, prepending your `httpfolder` to\nall file paths:\n\n````javascript\n// app-debug.js\ndocument.write('<scri'+'pt src=\"js/toaster/app.js\"></scr'+'ipt>')\n````\n\nWithout knowing that your JS files is under the `js` folder this path would be\nbroken.\n\n**NOTE: Your release file will not be affected by this property.**\n\n<a name=\"config-options-release\" />\n### `release`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **release** file.\n\n<a name=\"config-options-debug\" />\n### `debug`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **debug** file.\n\n<a name=\"examples\"/>\n# Examples\n----\n\nYou'll certainly find some useful resources in the examples provided.\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config\noptions, always looking for the differences in your javascript release file.\n\n> [Single folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/single-folder)<BR>\n> [Multi folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/multi-folder)<BR>\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n<a name=\"api\"/>\n# API\n----\n\nYou can use Toaster through API as well, in case you want to power up your\ncompiling tasks or even build some framework/lib on top of it.\n\nSee the API example for further information.\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)\n\n````coffeescript\n  Toaster = (require 'coffee-toaster').Toaster\n  toasting = new Toaster [basedir], [options], [skip_initial_build]\n  toasting.build [header_code_injection], [footer_code_injection]\n````\n\n<a name=\"contributing\"/>\n# Contributing\n----\n\n<a name=\"setup\"/>\n## Setting everything up\n\nEnvironment setup is simple achieved by:\n\n````bash\n  git clone git://github.com/serpentem/coffee-toaster.git\n  cd coffee-toaster && git submodule update --init\n  npm link\n````\n\n<a name=\"building\"/>\n## Building\n\nBuilds the release file inside the `lib` folder.\n\n````bash\n  make build\n````\n\n<a name=\"watching\"/>\n## Watching'n'Compiling\n\nStarts watching/compiling using a previuos version of the CoffeeToaster itself.\n\n````bash\n  make watch\n````\n\n<a name=\"testing\"/>\n## Testing\n\nRun all tests.\n\n````bash\n  make test\n````\n\n<a name=\"changelog\"/>\n# Changelog\n----\n\n> [CHANGELOG.md](https://github.com/serpentem/coffee-toaster/tree/master/build/CHANGELOG.md)","_id":"coffee-toaster@0.6.7","dist":{"shasum":"7574e8acd2b0ec26a3e6c54cf91523a8b80fd010","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.6.7.tgz","integrity":"sha512-k0g8SKItOuUaXyaGzH+1ndms5TvfYXSp66OdaFjuOTsxqd+2TUPVh5r5dBaUUcli7DrUC3hSXWAFpVCypKwdxg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAsLMkfZR76znOhAR9lkRrA0wycFb71igLOAgz5NPiQSAiAC8YA1oGb9fFDtkIFkrW79LOXzhUYSjw2l3g5LKR5FGg=="}]},"maintainers":[{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.6.8":{"name":"coffee-toaster","version":"0.6.8","author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"description":"Minimalist build system for CoffeeScript.","keywords":["coffeescript","build","namespace","tool"],"main":"./lib/toaster","directories":{"lib":"./lib/"},"scripts":{"test":"make test"},"repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"},"bin":{"toaster":"./bin/toaster"},"engines":{"node":">= 0.8.14"},"dependencies":{"fs-util":"0.3.4","coffee-script":"1.3.x","uglify-js":"1.1.x","optimist":"0.2.x","colors":"0.5.x","vows":"0.6.x","growl":"1.2.x"},"optionalDependencies":{"growl":"1.2.x"},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nMinimalist build system for CoffeeScript.\n> Version 0.6.8\n\n[![Build Status](https://secure.travis-ci.org/serpentem/coffee-toaster.png)](http://travis-ci.org/serpentem/coffee-toaster)\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n* Vendors management\n* Automagically packaging system with namespaces\n* Micro build routines\n* Exports aliases\n* Broken and circular-loop dependencies validation\n* Live syntax-check\n* Growl support\n* Debug Mode\n* Minify support\n* Scaffolding routines\n\n# Issues\nDo not hesitate to open a feature request or a bug report.\n> https://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\nA place to talk about it, ask anything, get in touch. Luckily you'll be answered\nsooner than later.\n\n> https://groups.google.com/group/coffee-toaster\n\n*NOTE: The list is `active` and `maintained`, though the low activity. So don't\nbe shy.*\n\n# About\n\nMinimalist build system for CoffeeScript, made for those who dare to use class\ndefinitions in CoffeeScript while being able to easily inherit from external\nfiles. The system is powered with import directives that uses wildcards\nfacilities, exposed scopes, excluded files filter options and a packaging system\nthat can inject your folders-as-namespaces to all your classes based on where\nthey are under your src folder.\n\nCoffeeToaster was created initially as a base for creating the\n[Theoricus Framework](https://github.com/serpentem/theoricus).\n\n\n# Docs\n\n - [Installing](#installing)\n - [Scaffolding](#scaffolding)\n   - [Initializing new app](#initializing-new-app)\n   - [Initializing config file](#initializing-config-file)\n - [Usage](#usage)\n   - [Import directive](#import-directive)\n   - [Compile](#compile) `-c`\n   - [Watch](#watch) `-w`\n   - [Debug](#debug) `-cd`, `-wd`\n     - [Representative structure](#representative-structure)\n   - [HTML inclusion](#html-inclusion)\n   - [Advanced options](#advanced-options)\n   - [Conclusion](#conclusion)\n     - [Note for VIM Users](#vim-users)\n - [Config file](#config-file)\n   - [Config options](#config-options)\n     - [`folders`](#config-options-folders)\n     - [`exclude`](#config-options-exclude)\n     - [`vendors`](#config-options-vendors)\n     - [`bare`](#config-options-bare)\n     - [`packaging`](#config-options-packaging)\n     - [`expose`](#config-options-expose)\n     - [`minify`](#config-options-minify)\n     - [`httpfolder`](#config-options-httpfolder)\n     - [`release`](#config-options-release)\n     - [`debug`](#config-options-debug)\n - [Examples](#examples)\n - [API](#api)\n - [Contributing](#contributing)\n   - [Setup](#setup)\n   - [Building](#building)\n   - [Watching](#watching)\n   - [Testing](#testing)\n - [CHANGELOG](#changelog)\n\n<a name=\"installing\" />\n# Installing\n----\n\n`npm install -g coffee-toaster`\n\n<a name=\"scaffolding\" />\n# Scaffolding\n----\n\nThere are two simple `scaffolding` routines bundled with CoffeeToaster for\ncreating new projects structure from the scratch and also for creating the\nconfig `toaster.coffee` file for existent projects.\n\n<a name=\"initializing-new-app\" />\n## Initializing new app\n\nCoffeeToaster suggests a very simple structure for initial projects, you can\ncustomize it as you like.\n\n`toaster -n mynewapp`\n\nYou will be asked for some things:\n\n> source folder\n\nRelative folderpath to your source folder, default is `src`.\n\n> release file\n\nRelative filepath to your release file, default is `www/js/app.js`\n\n> http folder\n\nThe folderpath to reach your debug file through http, default is an `empty\nstring`. Imagine that the `www` is your root web folder, and inside of it you\nhave a `js` dir where you put your debug file. In this case you'd just need to\ninform 'js' as the http folder. It tells toaster *how to reach your debug js\nfile* starting from the `/` on your server.\n\nThis property is only for **debug**, your *release* file will not be affected.\n\n### Result\n\nConsidering all the default values, you'll end up with a structure as such:\n\n````\nmyawsomeapp/\n├── src\n├── vendors\n├── www\n    └── js\n└── toaster.coffee\n\n4 directories, 1 file\n````\n\n<a name=\"initializing-config-file\" />\n## Initializing config file\n\nYou can also initialize an existing project with a config `toaster.coffee` file\nsuch as:\n\n````\ncd existing-project\ntoaster -i\n````\n\nSome of the same information (`src`, `release` and `httpfolder`) will be\nrequired, answer everything according to your project's structure and a config\n`toaster.coffee` file will be created inside of it.\n\n<a name=\"usage\" />\n# Usage\n----\n\nToaster help screen.\n\n````\nCoffeeToaster\n  Minimalist build system for CoffeeScript\n\nUsage:\n  toaster [options] [path]\n\nExamples:\n  toaster -n myawsomeapp   (required)\n  toaster -i [myawsomeapp] (optional)\n  toaster -w [myawsomeapp] (optional)\n  toaster -wd [myawsomeapp] (optional)\n\nOptions:\n  -n, --new          Scaffold a very basic new App                   \n  -i, --init         Create a config (toaster.coffee) file           \n  -w, --watch        Start watching/compiling your project           \n  -c, --compile      Compile the entire project, without watching it.\n  -d, --debug        Debug mode (compile js files individually)      \n  -j, --config       Config file formatted as a json-string.           [string]\n  -f, --config-file  Path to a different config file.                  [string]\n  -v, --version                                                      \n  -h, --help \n````\n\n<a name=\"import-directive\"/>\n## Import directive\n\nThe import directive is known by:\n\n````coffeescript\n#<< app/views/user_view\n#<< app/utils/*\n````\n\nBy putting `#<< app/views/user_view` in your CoffeeScript file, you're telling\nCoffeeToaster that there's a dependency. It's like a `require`, except that you\ncan't save a reference of the imported file to a variable. Instead, this\ndirectives shoud be put in the first lines of your files.\n\nThis is how you organically tells Toaster about the specific ordering\noptions to be considered when all of your files get merged. Files imported this\nway will only be gracefully sorted out in your final output javascript so\nevery file is always **defined** before it's **needed**.\n\nWild cards `#<< app/utils/*` are also accepted as a handy option.\n\nIf you're writing a `class B` that will extends the `class A`, you shoud first\nimport the `class A` so it will be available for being extended by `class B`.\n\n* src/app/a\n\n````coffeescript\nclass A\n  constructor:->\n    console.log 'Will be used as base class.'\n````\n\n* src/app/b\n\n````coffeescript\n#<< app/a\nclass B extends A\n  constructor:->\n    console.log 'Using class A as base class'\n````\n\nThink of it as a glue that you use to chain all of your files appropriately.\n\n<a name=\"compiling\"/>\n## Compile\n\nCompile your project according your [config file](#config-file).\n\n````bash\ncd existing-project\ntoaster -c\n````\n\n<a name=\"watching\"/>\n## Watch\n\nStarts Toaster in watching'n'compiling mode:\n\n````bash\ncd existing-project\ntoaster -w\n````\n\nAny changes you make to your `src` files will trigger the `compile` action.\n\n<a name=\"debugging\"/>\n## Debug\n\nIn debug mode option `-d` all files will be compiled individually inside a\nfolder called `toaster` in the same directory you've pointed your debug file,\naiming to ease the debugging process.\n\n````bash\ntoaster -wd\ntoaster -cd\n````\n\nFor example, if you have `release/app-debug.js`, a folder will be created at\n`release/toaster` and all your CoffeeScript files will be compiled to Javascript\nwithin.\n\n<a name=\"representative-structure\"/>\n### Representative Structure\n\nBellow is a representative directory structure after compiling in debug mode.\n\n````\n/usage\n|-- src\n|   `-- app\n|       |-- controllers\n|       |   `-- users_controller.coffee\n|       |-- models\n|       |   `-- user_model.coffee\n|       `-- views\n|           `-- user_view.coffee\n|-- www\n|   `-- js\n|       |-- app-debug.js\n|       |-- app.js\n|       `-- toaster\n|           `-- app\n|               |-- controllers\n|               |   `-- users_controller.js\n|               |-- models\n|               |   `-- user_model.js\n|               `-- views\n|                   `-- user_view.js\n`-- toaster.coffee\n````\n\nEvery CoffeeScript file is compiled individually inside the `www/js/toaster`\ndirectory, so you can debug it sanely.\n\nThe debug file `www/js/app-debug.js` is the boot-loader responsible for loading\nall these individual compiled JS files into the right order.\n\n<a name=\"html-inclusion\"/>\n## HTML inclusion\n\nSo in your `.html` you'll have two options:\n\n> 1) Include your release file.\n\n````html\n<script src=\"js/app.js\"></script>\n````\n \n> 2) Include the toaster boot-loader (your debug mode).\n\n````html\n<script src=\"js/app-debug.js\"></script>\n````\n\n<a name=\"advanced-options\"/>\n## Advanced options\n\nYou can pass your own config file for toaster instead of the default one\n`toaster.coffee`, with the `-f` or `--config-file` option:\n\n````bash\ntoaster -wdf config/mycustomconfig.coffee\n````\n\n*NOTE: It's important that you always call this from your project base folder,\notherwise the paths of your config can get messy. Remembers also that the paths\nin your config file shoud ideally be always relative to your project base\nfolder.*\n\nAlternativelly, you can even pass the whole configuration as a JSON string, with\nthe `-j` or `--config` option:\n\n````bash\ntoaster -wdj '{\"folders\":{\"src\":\"\"},\"expose\":\"window\",\"release\":\"app.js\",\"debug\":\"app-debug.js\"}'\n````\n\n*NOTE: The same above.*\n\n<a name=\"conclusion\"/>\n## Conlusion\n\nEvery time something changes, CoffeeToaster recompiles all of your application\nby:\n\n* collecting all .coffee files and processing everything, adding namespace's\ndeclarations to class definitions based on the folder they are located\n* reordering everything, always defining files and classes before they're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\n<a name=\"vim-users\"/>\n### VIM Users\n\nDue to the way VIM handles files, you'll need to disable the creation of `swap`\nand `backup` files.\n\nTo do it, just put these three lines in your `.vimrc`:\n\n``` vim\n\" for coffee-toaster\nset nobackup       \" no backup files\nset nowritebackup  \" only in case you don't want a backup file while editing\nset noswapfile     \" no swap files\n```\n\nThis will guarantee the expected behavior of Toaster and make it play nicely\nwith VIM without any conflicts. For more info about why it's really needed,\nplease check this [thread](https://github.com/serpentem/coffee-toaster/issues/47).\n\n<a name=\"config-file\" />\n# Config file\n----\n\nThe `toaster.coffee` is the config file from where Toaster seek all information\nabout your app, vendores, build options and so on. There are two main usages\nyou can make of this file:\n\n* **1) Single source folder:**\n\nWhen all your code is bellow one single source folder your set up the main\n`toast` call passing the folder path directly.\n\n````coffeescript\n# src folder\ntoast 'src'\n\n  # excluded items (will be used as a regex)\n  exclude: ['folder/to/exclude', 'another/folder', '.DS_Store' ]\n\n  # packaging vendors among the code\n  vendors: ['vendors/x.js', 'vendors/y.js' ]\n\n  # gereral options (all is optional, default values listed)\n  bare: false\n  packaging: true\n  expose: '' # can be 'window', 'exports' etc\n  minify: false\n\n  # httpfolder (optional), release and debug (both required)\n  httpfolder: 'js'\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\n* **2) Multi source folder:**\n\nWhen your code is splitted between two or more source folders you can set the\nmain `toast` call without any path, and inform your folders right bellow it.\n\n````coffeescript\ntoast\n  folders:\n    'src/my/app/folder': 'app'\n    'src/my/lib/folder': 'lib'\n    # ...\n````\n\n<a name=\"config-options\" />\n## Config options\n\nLet's take a closer look at all properties you can have in your `toaster.coffee`\nfile and what each one of these is responsible of.\n\n<a name=\"config-options-folders\" />\n### `folders`\n\n> Mandatory: `no` <BR/>\n> Type: `Object` <BR/>\n> Default: `null` <BR/>\n\nIn case you have more than one `src` folder, you can set an `object` of\n`objects` containing setup information about all your source folders, in the\nformat `'folderpath':'folderalias'`.\n\nThe **hash-key** is the `path` of your folder, and the **hash-value** is the\n`alias` you want to prepend to all files under that.\n\n*Pay attention to this specially when using Toaster with the '-j'\n[option](#advanced-options).*\n\nTo give an example, the equivalent use of this config:\n\n````coffeescript\ntoast 'src'\n  # ...\n````\n\nWould be:\n\n````coffeescript\ntoast\n  folders:\n    'src': ''\n````\n\n**NOTE: Aliases take effect only if the [`packaging`](#config-options-packaging)\nis set to `true`.**\n\nAliases lets you set a virtual top namespace to your source folder, if you have\n`src/app/app.coffee` which is a `class App`, you'll usually access it using\n`new app.App`.\n\nNow if you set an alias like `'src':'awesome'` the whole structure under your\nsource folder will be addressed under that `awesome` namespace and you need\nto prepend it when accessing your classes, i.e. `new awesome.app.App`.\n\n<a name=\"config-options-exclude\" />\n### `exclude`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nLet's you excplicity exclude some folder, file or file type from Toaster\nsearch/process mechanism. The string you use here will effectively turn into\na RegExp like that:\n\n````coffeescript\nnew RegExp '.DS_store'\nnew RegExp '.swp'\nnew RegExp 'my/folder/to/be/excluded'\n````\n\n<a name=\"config-options-vendors\" />\n### `vendors`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nYou can define vendors such as:\n\n````coffeescript\n  vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely\njavascript, preferably minified ones -- Toaster will not compile or minify them,\nonly concatenate everything.\n\n<a name=\"config-options-bare\" />\n### `bare`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nIf `true`, compile your CoffeeScript files without the top-level function safety\nwrapper:\n\n````javascript\n  (function() {\n    console.log('My peace of code!');\n  }).call(this);\n````\n\nSo you will end up with just `your peace of code`:\n\n````javascript\n  console.log('My peace of code!');\n````\n\n<a name=\"config-options-packaging\" />\n### `packaging`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nWhen packaging is `true`, Toaster will rewrite **all** your `class`\ndeclarations.\n\nIf you have a file in `src/app/models/user.coffee` with this contents:\n\n````coffeescript\nclass User\n````\n\nToaster will rewrite your declaration prepending a `namespace` to it, based on\nthe folder the class is located, resulting -- in this example -- into this:\n\n````coffeescript\nclass app.models.User\n````\n\nThis rewriting process is **saved** directly into your `file`. In case you move\nthis class to another folder, the prepended `namespace` will be rewrited again,\nalways following your folder structure.\n\nIn other words, your don't need to worry about hardcoded namespaces in your\nfiles, because Toaster will handle all the dirty for you.\n\n<a name=\"config-options-expose\" />\n### `expose`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nIf informed, list all you packages of classes in the given scope. If you use\n`window` as your expose scope, your classes will be available also in the window\nobject -- or whatever scope you inform, suck as `exports` if you're building\nfor NodeJS.\n\nIn the end you'll be able to access your files throught this scope where your\nclasses was exposed.\n\n````coffeescript\nnew window.app.models.User\nnew exports.app.models.User\n````\n\n<a name=\"config-options-minify\" />\n### `minify`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `true` <BR/>\n\nIf `true`, minify your release file using UglifyJS.\n\nDebug files are **never** minified.\n\n<a name=\"config-options-httpfolder\" />\n### `httpfolder`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `''` <BR/>\n\nThe folder path to reach your debug file through http, in case it is not inside\nyour root directory. Imagine that the `www` is your root folder and when you\naccess your webiste the `/` referes to this folder.\n\nInside this `www` folder you have another folder called `js` where you put all\nyour compiled js, resulting from a config like this:\n\n````coffeescript\ntoast 'src'\n  # ...\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\nFollowing this case you'd just need to inform `js` as your http folder. Toaster\nwill use it to reach your **debug** files. For that, it will writes the\ndeclarations inside the `debug boot loader` following this location in order to\nimport your scripts properly when in debug mode, prepending your `httpfolder` to\nall file paths:\n\n````javascript\n// app-debug.js\ndocument.write('<scri'+'pt src=\"js/toaster/app.js\"></scr'+'ipt>')\n````\n\nWithout knowing that your JS files is under the `js` folder this path would be\nbroken.\n\n**NOTE: Your release file will not be affected by this property.**\n\n<a name=\"config-options-release\" />\n### `release`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **release** file.\n\n<a name=\"config-options-debug\" />\n### `debug`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **debug** file.\n\n<a name=\"examples\"/>\n# Examples\n----\n\nYou'll certainly find some useful resources in the examples provided.\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config\noptions, always looking for the differences in your javascript release file.\n\n> [Single folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/single-folder)<BR>\n> [Multi folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/multi-folder)<BR>\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n<a name=\"api\"/>\n# API\n----\n\nYou can use Toaster through API as well, in case you want to power up your\ncompiling tasks or even build some framework/lib on top of it.\n\nSee the API example for further information.\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)\n\n````coffeescript\n  Toaster = (require 'coffee-toaster').Toaster\n  toasting = new Toaster [basedir], [options], [skip_initial_build]\n  toasting.build [header_code_injection], [footer_code_injection]\n````\n\n<a name=\"contributing\"/>\n# Contributing\n----\n\n<a name=\"setup\"/>\n## Setting everything up\n\nEnvironment setup is simple achieved by:\n\n````bash\n  git clone git://github.com/serpentem/coffee-toaster.git\n  cd coffee-toaster && git submodule update --init\n  npm link\n````\n\n<a name=\"building\"/>\n## Building\n\nBuilds the release file inside the `lib` folder.\n\n````bash\n  make build\n````\n\n<a name=\"watching\"/>\n## Watching'n'Compiling\n\nStarts watching/compiling using a previuos version of the CoffeeToaster itself.\n\n````bash\n  make watch\n````\n\n<a name=\"testing\"/>\n## Testing\n\nRun all tests.\n\n````bash\n  make test\n````\n\n<a name=\"changelog\"/>\n# Changelog\n----\n\n> [CHANGELOG.md](https://github.com/serpentem/coffee-toaster/tree/master/build/CHANGELOG.md)","readmeFilename":"README.md","_id":"coffee-toaster@0.6.8","dist":{"shasum":"136b794a9112a0389a97d4e47d8e2ea23f3fa89a","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.6.8.tgz","integrity":"sha512-E92RZA8KFSmrJCGhbzMjE0lM6xYi+blR8YSoqqMkWAlkC7ZAxk1xZpNoRDxX0Nmi3rM5I/QOThPSdSeNneETSg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGhKorhdSiNhnLoOkClrETdURo6Te86QbmAMdV32Y1NkAiAZsrPF4htLr3W7E0P9woRKj07BZDzyjNbvG3rv8jopRw=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"arboleya","email":"anderson@arboleya.me"},"maintainers":[{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.6.9":{"name":"coffee-toaster","version":"0.6.9","author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"description":"Minimalist build system for CoffeeScript.","keywords":["coffeescript","build","namespace","tool"],"main":"./lib/toaster","directories":{"lib":"./lib/"},"scripts":{"test":"make test"},"repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"},"bin":{"toaster":"./bin/toaster"},"engines":{"node":">= 0.8.14"},"dependencies":{"fs-util":"0.3.4","coffee-script":"1.3.x","uglify-js":"1.1.x","optimist":"0.2.x","colors":"0.5.x","vows":"0.6.x","growl":"1.2.x"},"optionalDependencies":{"growl":"1.2.x"},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nMinimalist build system for CoffeeScript.\n> Version 0.6.9\n\n[![Build Status](https://secure.travis-ci.org/serpentem/coffee-toaster.png)](http://travis-ci.org/serpentem/coffee-toaster)\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n* Vendors management\n* Automagically packaging system with namespaces\n* Micro build routines\n* Exports aliases\n* Broken and circular-loop dependencies validation\n* Live syntax-check\n* Growl support\n* Debug Mode\n* Minify support\n* Scaffolding routines\n\n# Issues\nDo not hesitate to open a feature request or a bug report.\n> https://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\nA place to talk about it, ask anything, get in touch. Luckily you'll be answered\nsooner than later.\n\n> https://groups.google.com/group/coffee-toaster\n\n*NOTE: The list is `active` and `maintained`, though the low activity. So don't\nbe shy.*\n\n# About\n\nMinimalist build system for CoffeeScript, made for those who dare to use class\ndefinitions in CoffeeScript while being able to easily inherit from external\nfiles. The system is powered with import directives that uses wildcards\nfacilities, exposed scopes, excluded files filter options and a packaging system\nthat can inject your folders-as-namespaces to all your classes based on where\nthey are under your src folder.\n\nCoffeeToaster was created initially as a base for creating the\n[Theoricus Framework](https://github.com/serpentem/theoricus).\n\n\n# Docs\n\n - [Installing](#installing)\n - [Scaffolding](#scaffolding)\n   - [Initializing new app](#initializing-new-app)\n   - [Initializing config file](#initializing-config-file)\n - [Usage](#usage)\n   - [Import directive](#import-directive)\n   - [Compile](#compile) `-c`\n   - [Watch](#watch) `-w`\n   - [Debug](#debug) `-cd`, `-wd`\n     - [Representative structure](#representative-structure)\n   - [HTML inclusion](#html-inclusion)\n   - [Advanced options](#advanced-options)\n   - [Conclusion](#conclusion)\n     - [Note for VIM Users](#vim-users)\n - [Config file](#config-file)\n   - [Config options](#config-options)\n     - [`folders`](#config-options-folders)\n     - [`exclude`](#config-options-exclude)\n     - [`vendors`](#config-options-vendors)\n     - [`bare`](#config-options-bare)\n     - [`packaging`](#config-options-packaging)\n     - [`expose`](#config-options-expose)\n     - [`minify`](#config-options-minify)\n     - [`httpfolder`](#config-options-httpfolder)\n     - [`release`](#config-options-release)\n     - [`debug`](#config-options-debug)\n - [Examples](#examples)\n - [API](#api)\n - [Contributing](#contributing)\n   - [Setup](#setup)\n   - [Building](#building)\n   - [Watching](#watching)\n   - [Testing](#testing)\n - [CHANGELOG](#changelog)\n\n<a name=\"installing\" />\n# Installing\n----\n\n`npm install -g coffee-toaster`\n\n<a name=\"scaffolding\" />\n# Scaffolding\n----\n\nThere are two simple `scaffolding` routines bundled with CoffeeToaster for\ncreating new projects structure from the scratch and also for creating the\nconfig `toaster.coffee` file for existent projects.\n\n<a name=\"initializing-new-app\" />\n## Initializing new app\n\nCoffeeToaster suggests a very simple structure for initial projects, you can\ncustomize it as you like.\n\n`toaster -n mynewapp`\n\nYou will be asked for some things:\n\n> source folder\n\nRelative folderpath to your source folder, default is `src`.\n\n> release file\n\nRelative filepath to your release file, default is `www/js/app.js`\n\n> http folder\n\nThe folderpath to reach your debug file through http, default is an `empty\nstring`. Imagine that the `www` is your root web folder, and inside of it you\nhave a `js` dir where you put your debug file. In this case you'd just need to\ninform 'js' as the http folder. It tells toaster *how to reach your debug js\nfile* starting from the `/` on your server.\n\nThis property is only for **debug**, your *release* file will not be affected.\n\n### Result\n\nConsidering all the default values, you'll end up with a structure as such:\n\n````\nmyawsomeapp/\n├── src\n├── vendors\n├── www\n    └── js\n└── toaster.coffee\n\n4 directories, 1 file\n````\n\n<a name=\"initializing-config-file\" />\n## Initializing config file\n\nYou can also initialize an existing project with a config `toaster.coffee` file\nsuch as:\n\n````\ncd existing-project\ntoaster -i\n````\n\nSome of the same information (`src`, `release` and `httpfolder`) will be\nrequired, answer everything according to your project's structure and a config\n`toaster.coffee` file will be created inside of it.\n\n<a name=\"usage\" />\n# Usage\n----\n\nToaster help screen.\n\n````\nCoffeeToaster\n  Minimalist build system for CoffeeScript\n\nUsage:\n  toaster [options] [path]\n\nExamples:\n  toaster -n myawsomeapp   (required)\n  toaster -i [myawsomeapp] (optional)\n  toaster -w [myawsomeapp] (optional)\n  toaster -wd [myawsomeapp] (optional)\n\nOptions:\n  -n, --new          Scaffold a very basic new App                   \n  -i, --init         Create a config (toaster.coffee) file           \n  -w, --watch        Start watching/compiling your project           \n  -c, --compile      Compile the entire project, without watching it.\n  -d, --debug        Debug mode (compile js files individually)      \n  -j, --config       Config file formatted as a json-string.           [string]\n  -f, --config-file  Path to a different config file.                  [string]\n  -v, --version                                                      \n  -h, --help \n````\n\n<a name=\"import-directive\"/>\n## Import directive\n\nThe import directive is known by:\n\n````coffeescript\n#<< app/views/user_view\n#<< app/utils/*\n````\n\nBy putting `#<< app/views/user_view` in your CoffeeScript file, you're telling\nCoffeeToaster that there's a dependency. It's like a `require`, except that you\ncan't save a reference of the imported file to a variable. Instead, this\ndirectives shoud be put in the first lines of your files.\n\nThis is how you organically tells Toaster about the specific ordering\noptions to be considered when all of your files get merged. Files imported this\nway will only be gracefully sorted out in your final output javascript so\nevery file is always **defined** before it's **needed**.\n\nWild cards `#<< app/utils/*` are also accepted as a handy option.\n\nIf you're writing a `class B` that will extends the `class A`, you shoud first\nimport the `class A` so it will be available for being extended by `class B`.\n\n* src/app/a\n\n````coffeescript\nclass A\n  constructor:->\n    console.log 'Will be used as base class.'\n````\n\n* src/app/b\n\n````coffeescript\n#<< app/a\nclass B extends A\n  constructor:->\n    console.log 'Using class A as base class'\n````\n\nThink of it as a glue that you use to chain all of your files appropriately.\n\n<a name=\"compiling\"/>\n## Compile\n\nCompile your project according your [config file](#config-file).\n\n````bash\ncd existing-project\ntoaster -c\n````\n\n<a name=\"watching\"/>\n## Watch\n\nStarts Toaster in watching'n'compiling mode:\n\n````bash\ncd existing-project\ntoaster -w\n````\n\nAny changes you make to your `src` files will trigger the `compile` action.\n\n<a name=\"debugging\"/>\n## Debug\n\nIn debug mode option `-d` all files will be compiled individually inside a\nfolder called `toaster` in the same directory you've pointed your debug file,\naiming to ease the debugging process.\n\n````bash\ntoaster -wd\ntoaster -cd\n````\n\nFor example, if you have `release/app-debug.js`, a folder will be created at\n`release/toaster` and all your CoffeeScript files will be compiled to Javascript\nwithin.\n\n<a name=\"representative-structure\"/>\n### Representative Structure\n\nBellow is a representative directory structure after compiling in debug mode.\n\n````\n/usage\n|-- src\n|   `-- app\n|       |-- controllers\n|       |   `-- users_controller.coffee\n|       |-- models\n|       |   `-- user_model.coffee\n|       `-- views\n|           `-- user_view.coffee\n|-- www\n|   `-- js\n|       |-- app-debug.js\n|       |-- app.js\n|       `-- toaster\n|           `-- app\n|               |-- controllers\n|               |   `-- users_controller.js\n|               |-- models\n|               |   `-- user_model.js\n|               `-- views\n|                   `-- user_view.js\n`-- toaster.coffee\n````\n\nEvery CoffeeScript file is compiled individually inside the `www/js/toaster`\ndirectory, so you can debug it sanely.\n\nThe debug file `www/js/app-debug.js` is the boot-loader responsible for loading\nall these individual compiled JS files into the right order.\n\n<a name=\"html-inclusion\"/>\n## HTML inclusion\n\nSo in your `.html` you'll have two options:\n\n> 1) Include your release file.\n\n````html\n<script src=\"js/app.js\"></script>\n````\n \n> 2) Include the toaster boot-loader (your debug mode).\n\n````html\n<script src=\"js/app-debug.js\"></script>\n````\n\n<a name=\"advanced-options\"/>\n## Advanced options\n\nYou can pass your own config file for toaster instead of the default one\n`toaster.coffee`, with the `-f` or `--config-file` option:\n\n````bash\ntoaster -wdf config/mycustomconfig.coffee\n````\n\n*NOTE: It's important that you always call this from your project base folder,\notherwise the paths of your config can get messy. Remembers also that the paths\nin your config file shoud ideally be always relative to your project base\nfolder.*\n\nAlternativelly, you can even pass the whole configuration as a JSON string, with\nthe `-j` or `--config` option:\n\n````bash\ntoaster -wdj '{\"folders\":{\"src\":\"\"},\"expose\":\"window\",\"release\":\"app.js\",\"debug\":\"app-debug.js\"}'\n````\n\n*NOTE: The same above.*\n\n<a name=\"conclusion\"/>\n## Conlusion\n\nEvery time something changes, CoffeeToaster recompiles all of your application\nby:\n\n* collecting all .coffee files and processing everything, adding namespace's\ndeclarations to class definitions based on the folder they are located\n* reordering everything, always defining files and classes before they're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\n<a name=\"vim-users\"/>\n### VIM Users\n\nDue to the way VIM handles files, you'll need to disable the creation of `swap`\nand `backup` files.\n\nTo do it, just put these three lines in your `.vimrc`:\n\n``` vim\n\" for coffee-toaster\nset nobackup       \" no backup files\nset nowritebackup  \" only in case you don't want a backup file while editing\nset noswapfile     \" no swap files\n```\n\nThis will guarantee the expected behavior of Toaster and make it play nicely\nwith VIM without any conflicts. For more info about why it's really needed,\nplease check this [thread](https://github.com/serpentem/coffee-toaster/issues/47).\n\n<a name=\"config-file\" />\n# Config file\n----\n\nThe `toaster.coffee` is the config file from where Toaster seek all information\nabout your app, vendores, build options and so on. There are two main usages\nyou can make of this file:\n\n* **1) Single source folder:**\n\nWhen all your code is bellow one single source folder your set up the main\n`toast` call passing the folder path directly.\n\n````coffeescript\n# src folder\ntoast 'src'\n\n  # excluded items (will be used as a regex)\n  exclude: ['folder/to/exclude', 'another/folder', '.DS_Store' ]\n\n  # packaging vendors among the code\n  vendors: ['vendors/x.js', 'vendors/y.js' ]\n\n  # gereral options (all is optional, default values listed)\n  bare: false\n  packaging: true\n  expose: '' # can be 'window', 'exports' etc\n  minify: false\n\n  # httpfolder (optional), release and debug (both required)\n  httpfolder: 'js'\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\n* **2) Multi source folder:**\n\nWhen your code is splitted between two or more source folders you can set the\nmain `toast` call without any path, and inform your folders right bellow it.\n\n````coffeescript\ntoast\n  folders:\n    'src/my/app/folder': 'app'\n    'src/my/lib/folder': 'lib'\n    # ...\n````\n\n<a name=\"config-options\" />\n## Config options\n\nLet's take a closer look at all properties you can have in your `toaster.coffee`\nfile and what each one of these is responsible of.\n\n<a name=\"config-options-folders\" />\n### `folders`\n\n> Mandatory: `no` <BR/>\n> Type: `Object` <BR/>\n> Default: `null` <BR/>\n\nIn case you have more than one `src` folder, you can set an `object` of\n`objects` containing setup information about all your source folders, in the\nformat `'folderpath':'folderalias'`.\n\nThe **hash-key** is the `path` of your folder, and the **hash-value** is the\n`alias` you want to prepend to all files under that.\n\n*Pay attention to this specially when using Toaster with the '-j'\n[option](#advanced-options).*\n\nTo give an example, the equivalent use of this config:\n\n````coffeescript\ntoast 'src'\n  # ...\n````\n\nWould be:\n\n````coffeescript\ntoast\n  folders:\n    'src': ''\n````\n\n**NOTE: Aliases take effect only if the [`packaging`](#config-options-packaging)\nis set to `true`.**\n\nAliases lets you set a virtual top namespace to your source folder, if you have\n`src/app/app.coffee` which is a `class App`, you'll usually access it using\n`new app.App`.\n\nNow if you set an alias like `'src':'awesome'` the whole structure under your\nsource folder will be addressed under that `awesome` namespace and you need\nto prepend it when accessing your classes, i.e. `new awesome.app.App`.\n\n<a name=\"config-options-exclude\" />\n### `exclude`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nLet's you excplicity exclude some folder, file or file type from Toaster\nsearch/process mechanism. The string you use here will effectively turn into\na RegExp like that:\n\n````coffeescript\nnew RegExp '.DS_store'\nnew RegExp '.swp'\nnew RegExp 'my/folder/to/be/excluded'\n````\n\n<a name=\"config-options-vendors\" />\n### `vendors`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nYou can define vendors such as:\n\n````coffeescript\n  vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely\njavascript, preferably minified ones -- Toaster will not compile or minify them,\nonly concatenate everything.\n\n<a name=\"config-options-bare\" />\n### `bare`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nIf `true`, compile your CoffeeScript files without the top-level function safety\nwrapper:\n\n````javascript\n  (function() {\n    console.log('My peace of code!');\n  }).call(this);\n````\n\nSo you will end up with just `your peace of code`:\n\n````javascript\n  console.log('My peace of code!');\n````\n\n<a name=\"config-options-packaging\" />\n### `packaging`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nWhen packaging is `true`, Toaster will rewrite **all** your `class`\ndeclarations.\n\nIf you have a file in `src/app/models/user.coffee` with this contents:\n\n````coffeescript\nclass User\n````\n\nToaster will rewrite your declaration prepending a `namespace` to it, based on\nthe folder the class is located, resulting -- in this example -- into this:\n\n````coffeescript\nclass app.models.User\n````\n\nThis rewriting process is **saved** directly into your `file`. In case you move\nthis class to another folder, the prepended `namespace` will be rewrited again,\nalways following your folder structure.\n\nIn other words, your don't need to worry about hardcoded namespaces in your\nfiles, because Toaster will handle all the dirty for you.\n\n<a name=\"config-options-expose\" />\n### `expose`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nIf informed, list all you packages of classes in the given scope. If you use\n`window` as your expose scope, your classes will be available also in the window\nobject -- or whatever scope you inform, suck as `exports` if you're building\nfor NodeJS.\n\nIn the end you'll be able to access your files throught this scope where your\nclasses was exposed.\n\n````coffeescript\nnew window.app.models.User\nnew exports.app.models.User\n````\n\n<a name=\"config-options-minify\" />\n### `minify`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `true` <BR/>\n\nIf `true`, minify your release file using UglifyJS.\n\nDebug files are **never** minified.\n\n<a name=\"config-options-httpfolder\" />\n### `httpfolder`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `''` <BR/>\n\nThe folder path to reach your debug file through http, in case it is not inside\nyour root directory. Imagine that the `www` is your root folder and when you\naccess your webiste the `/` referes to this folder.\n\nInside this `www` folder you have another folder called `js` where you put all\nyour compiled js, resulting from a config like this:\n\n````coffeescript\ntoast 'src'\n  # ...\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\nFollowing this case you'd just need to inform `js` as your http folder. Toaster\nwill use it to reach your **debug** files. For that, it will writes the\ndeclarations inside the `debug boot loader` following this location in order to\nimport your scripts properly when in debug mode, prepending your `httpfolder` to\nall file paths:\n\n````javascript\n// app-debug.js\ndocument.write('<scri'+'pt src=\"js/toaster/app.js\"></scr'+'ipt>')\n````\n\nWithout knowing that your JS files is under the `js` folder this path would be\nbroken.\n\n**NOTE: Your release file will not be affected by this property.**\n\n<a name=\"config-options-release\" />\n### `release`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **release** file.\n\n<a name=\"config-options-debug\" />\n### `debug`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **debug** file.\n\n<a name=\"examples\"/>\n# Examples\n----\n\nYou'll certainly find some useful resources in the examples provided.\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config\noptions, always looking for the differences in your javascript release file.\n\n> [Single folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/single-folder)<BR>\n> [Multi folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/multi-folder)<BR>\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n<a name=\"api\"/>\n# API\n----\n\nYou can use Toaster through API as well, in case you want to power up your\ncompiling tasks or even build some framework/lib on top of it.\n\nSee the API example for further information.\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)\n\n````coffeescript\n  Toaster = (require 'coffee-toaster').Toaster\n  toasting = new Toaster [basedir], [options], [skip_initial_build]\n  toasting.build [header_code_injection], [footer_code_injection]\n````\n\n<a name=\"contributing\"/>\n# Contributing\n----\n\n<a name=\"setup\"/>\n## Setting everything up\n\nEnvironment setup is simple achieved by:\n\n````bash\n  git clone git://github.com/serpentem/coffee-toaster.git\n  cd coffee-toaster && git submodule update --init\n  npm link\n````\n\n<a name=\"building\"/>\n## Building\n\nBuilds the release file inside the `lib` folder.\n\n````bash\n  make build\n````\n\n<a name=\"watching\"/>\n## Watching'n'Compiling\n\nStarts watching/compiling using a previuos version of the CoffeeToaster itself.\n\n````bash\n  make watch\n````\n\n<a name=\"testing\"/>\n## Testing\n\nRun all tests.\n\n````bash\n  make test\n````\n\n<a name=\"changelog\"/>\n# Changelog\n----\n\n> [CHANGELOG.md](https://github.com/serpentem/coffee-toaster/tree/master/build/CHANGELOG.md)","readmeFilename":"README.md","_id":"coffee-toaster@0.6.9","dist":{"shasum":"b301a40c81d2ec9bde8b49035c748360b23474ac","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.6.9.tgz","integrity":"sha512-0w2BFwSecUWUtjMWzITuI7dOgAIwCUEFdCxhCqb/UXD2lqU+GuFrUnkzGDaMUpwZtZ+7UqscdQHOEZkgYlT5rA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3IOjmQnO1KZUZdYJeQb4zZJdSPscY+53A/tmxMQ4+5wIgQ+z8Cph/EvCLZ+LJFqc7FCzbOW+FjN0lPK0rpY9MdyU="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"arboleya","email":"anderson@arboleya.me"},"maintainers":[{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.6.10":{"name":"coffee-toaster","version":"0.6.10","author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"description":"Minimalist build system for CoffeeScript.","keywords":["coffeescript","build","namespace","tool"],"main":"./lib/toaster","directories":{"lib":"./lib/"},"scripts":{"test":"make test"},"repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"},"bin":{"toaster":"./bin/toaster"},"engines":{"node":">= 0.8.14"},"dependencies":{"fs-util":"0.3.4","coffee-script":"1.3.x","uglify-js":"1.1.x","optimist":"0.2.x","colors":"0.5.x","vows":"0.6.x","growl":"1.2.x"},"optionalDependencies":{"growl":"1.2.x"},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nMinimalist build system for CoffeeScript.\n> Version 0.6.10\n\n[![Build Status](https://secure.travis-ci.org/serpentem/coffee-toaster.png)](http://travis-ci.org/serpentem/coffee-toaster)\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n* Vendors management\n* Automagically packaging system with namespaces\n* Micro build routines\n* Exports aliases\n* Broken and circular-loop dependencies validation\n* Live syntax-check\n* Growl support\n* Debug Mode\n* Minify support\n* Scaffolding routines\n\n# Issues\nDo not hesitate to open a feature request or a bug report.\n> https://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\nA place to talk about it, ask anything, get in touch. Luckily you'll be answered\nsooner than later.\n\n> https://groups.google.com/group/coffee-toaster\n\n*NOTE: The list is `active` and `maintained`, though the low activity. So don't\nbe shy.*\n\n# About\n\nMinimalist build system for CoffeeScript, made for those who dare to use class\ndefinitions in CoffeeScript while being able to easily inherit from external\nfiles. The system is powered with import directives that uses wildcards\nfacilities, exposed scopes, excluded files filter options and a packaging system\nthat can inject your folders-as-namespaces to all your classes based on where\nthey are under your src folder.\n\nCoffeeToaster was created initially as a base for creating the\n[Theoricus Framework](https://github.com/serpentem/theoricus).\n\n\n# Docs\n\n - [Installing](#installing)\n - [Scaffolding](#scaffolding)\n   - [Initializing new app](#initializing-new-app)\n   - [Initializing config file](#initializing-config-file)\n - [Usage](#usage)\n   - [Import directive](#import-directive)\n   - [Compile](#compile) `-c`\n   - [Watch](#watch) `-w`\n   - [Debug](#debug) `-cd`, `-wd`\n     - [Representative structure](#representative-structure)\n   - [HTML inclusion](#html-inclusion)\n   - [Advanced options](#advanced-options)\n   - [Conclusion](#conclusion)\n     - [Note for VIM Users](#vim-users)\n - [Config file](#config-file)\n   - [Config options](#config-options)\n     - [`folders`](#config-options-folders)\n     - [`exclude`](#config-options-exclude)\n     - [`vendors`](#config-options-vendors)\n     - [`bare`](#config-options-bare)\n     - [`packaging`](#config-options-packaging)\n     - [`expose`](#config-options-expose)\n     - [`minify`](#config-options-minify)\n     - [`httpfolder`](#config-options-httpfolder)\n     - [`release`](#config-options-release)\n     - [`debug`](#config-options-debug)\n - [Examples](#examples)\n - [API](#api)\n - [Contributing](#contributing)\n   - [Setup](#setup)\n   - [Building](#building)\n   - [Watching](#watching)\n   - [Testing](#testing)\n - [CHANGELOG](#changelog)\n\n<a name=\"installing\" />\n# Installing\n----\n\n`npm install -g coffee-toaster`\n\n<a name=\"scaffolding\" />\n# Scaffolding\n----\n\nThere are two simple `scaffolding` routines bundled with CoffeeToaster for\ncreating new projects structure from the scratch and also for creating the\nconfig `toaster.coffee` file for existent projects.\n\n<a name=\"initializing-new-app\" />\n## Initializing new app\n\nCoffeeToaster suggests a very simple structure for initial projects, you can\ncustomize it as you like.\n\n`toaster -n mynewapp`\n\nYou will be asked for some things:\n\n> source folder\n\nRelative folderpath to your source folder, default is `src`.\n\n> release file\n\nRelative filepath to your release file, default is `www/js/app.js`\n\n> http folder\n\nThe folderpath to reach your debug file through http, default is an `empty\nstring`. Imagine that the `www` is your root web folder, and inside of it you\nhave a `js` dir where you put your debug file. In this case you'd just need to\ninform 'js' as the http folder. It tells toaster *how to reach your debug js\nfile* starting from the `/` on your server.\n\nThis property is only for **debug**, your *release* file will not be affected.\n\n### Result\n\nConsidering all the default values, you'll end up with a structure as such:\n\n````\nmyawsomeapp/\n├── src\n├── vendors\n├── www\n    └── js\n└── toaster.coffee\n\n4 directories, 1 file\n````\n\n<a name=\"initializing-config-file\" />\n## Initializing config file\n\nYou can also initialize an existing project with a config `toaster.coffee` file\nsuch as:\n\n````\ncd existing-project\ntoaster -i\n````\n\nSome of the same information (`src`, `release` and `httpfolder`) will be\nrequired, answer everything according to your project's structure and a config\n`toaster.coffee` file will be created inside of it.\n\n<a name=\"usage\" />\n# Usage\n----\n\nToaster help screen.\n\n````\nCoffeeToaster\n  Minimalist build system for CoffeeScript\n\nUsage:\n  toaster [options] [path]\n\nExamples:\n  toaster -n myawsomeapp   (required)\n  toaster -i [myawsomeapp] (optional)\n  toaster -w [myawsomeapp] (optional)\n  toaster -wd [myawsomeapp] (optional)\n\nOptions:\n  -n, --new          Scaffold a very basic new App                   \n  -i, --init         Create a config (toaster.coffee) file           \n  -w, --watch        Start watching/compiling your project           \n  -c, --compile      Compile the entire project, without watching it.\n  -d, --debug        Debug mode (compile js files individually)      \n  -j, --config       Config file formatted as a json-string.           [string]\n  -f, --config-file  Path to a different config file.                  [string]\n  -v, --version                                                      \n  -h, --help \n````\n\n<a name=\"import-directive\"/>\n## Import directive\n\nThe import directive is known by:\n\n````coffeescript\n#<< app/views/user_view\n#<< app/utils/*\n````\n\nBy putting `#<< app/views/user_view` in your CoffeeScript file, you're telling\nCoffeeToaster that there's a dependency. It's like a `require`, except that you\ncan't save a reference of the imported file to a variable. Instead, this\ndirectives shoud be put in the first lines of your files.\n\nThis is how you organically tells Toaster about the specific ordering\noptions to be considered when all of your files get merged. Files imported this\nway will only be gracefully sorted out in your final output javascript so\nevery file is always **defined** before it's **needed**.\n\nWild cards `#<< app/utils/*` are also accepted as a handy option.\n\nIf you're writing a `class B` that will extends the `class A`, you shoud first\nimport the `class A` so it will be available for being extended by `class B`.\n\n* src/app/a\n\n````coffeescript\nclass A\n  constructor:->\n    console.log 'Will be used as base class.'\n````\n\n* src/app/b\n\n````coffeescript\n#<< app/a\nclass B extends A\n  constructor:->\n    console.log 'Using class A as base class'\n````\n\nThink of it as a glue that you use to chain all of your files appropriately.\n\n<a name=\"compiling\"/>\n## Compile\n\nCompile your project according your [config file](#config-file).\n\n````bash\ncd existing-project\ntoaster -c\n````\n\n<a name=\"watching\"/>\n## Watch\n\nStarts Toaster in watching'n'compiling mode:\n\n````bash\ncd existing-project\ntoaster -w\n````\n\nAny changes you make to your `src` files will trigger the `compile` action.\n\n<a name=\"debugging\"/>\n## Debug\n\nIn debug mode option `-d` all files will be compiled individually inside a\nfolder called `toaster` in the same directory you've pointed your debug file,\naiming to ease the debugging process.\n\n````bash\ntoaster -wd\ntoaster -cd\n````\n\nFor example, if you have `release/app-debug.js`, a folder will be created at\n`release/toaster` and all your CoffeeScript files will be compiled to Javascript\nwithin.\n\n<a name=\"representative-structure\"/>\n### Representative Structure\n\nBellow is a representative directory structure after compiling in debug mode.\n\n````\n/usage\n|-- src\n|   `-- app\n|       |-- controllers\n|       |   `-- users_controller.coffee\n|       |-- models\n|       |   `-- user_model.coffee\n|       `-- views\n|           `-- user_view.coffee\n|-- www\n|   `-- js\n|       |-- app-debug.js\n|       |-- app.js\n|       `-- toaster\n|           `-- app\n|               |-- controllers\n|               |   `-- users_controller.js\n|               |-- models\n|               |   `-- user_model.js\n|               `-- views\n|                   `-- user_view.js\n`-- toaster.coffee\n````\n\nEvery CoffeeScript file is compiled individually inside the `www/js/toaster`\ndirectory, so you can debug it sanely.\n\nThe debug file `www/js/app-debug.js` is the boot-loader responsible for loading\nall these individual compiled JS files into the right order.\n\n<a name=\"html-inclusion\"/>\n## HTML inclusion\n\nSo in your `.html` you'll have two options:\n\n> 1) Include your release file.\n\n````html\n<script src=\"js/app.js\"></script>\n````\n \n> 2) Include the toaster boot-loader (your debug mode).\n\n````html\n<script src=\"js/app-debug.js\"></script>\n````\n\n<a name=\"advanced-options\"/>\n## Advanced options\n\nYou can pass your own config file for toaster instead of the default one\n`toaster.coffee`, with the `-f` or `--config-file` option:\n\n````bash\ntoaster -wdf config/mycustomconfig.coffee\n````\n\n*NOTE: It's important that you always call this from your project base folder,\notherwise the paths of your config can get messy. Remembers also that the paths\nin your config file shoud ideally be always relative to your project base\nfolder.*\n\nAlternativelly, you can even pass the whole configuration as a JSON string, with\nthe `-j` or `--config` option:\n\n````bash\ntoaster -wdj '{\"folders\":{\"src\":\"\"},\"expose\":\"window\",\"release\":\"app.js\",\"debug\":\"app-debug.js\"}'\n````\n\n*NOTE: The same above.*\n\n<a name=\"conclusion\"/>\n## Conlusion\n\nEvery time something changes, CoffeeToaster recompiles all of your application\nby:\n\n* collecting all .coffee files and processing everything, adding namespace's\ndeclarations to class definitions based on the folder they are located\n* reordering everything, always defining files and classes before they're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\n<a name=\"vim-users\"/>\n### VIM Users\n\nDue to the way VIM handles files, you'll need to disable the creation of `swap`\nand `backup` files.\n\nTo do it, just put these three lines in your `.vimrc`:\n\n``` vim\n\" for coffee-toaster\nset nobackup       \" no backup files\nset nowritebackup  \" only in case you don't want a backup file while editing\nset noswapfile     \" no swap files\n```\n\nThis will guarantee the expected behavior of Toaster and make it play nicely\nwith VIM without any conflicts. For more info about why it's really needed,\nplease check this [thread](https://github.com/serpentem/coffee-toaster/issues/47).\n\n<a name=\"config-file\" />\n# Config file\n----\n\nThe `toaster.coffee` is the config file from where Toaster seek all information\nabout your app, vendores, build options and so on. There are two main usages\nyou can make of this file:\n\n* **1) Single source folder:**\n\nWhen all your code is bellow one single source folder your set up the main\n`toast` call passing the folder path directly.\n\n````coffeescript\n# src folder\ntoast 'src'\n\n  # excluded items (will be used as a regex)\n  exclude: ['folder/to/exclude', 'another/folder', '.DS_Store' ]\n\n  # packaging vendors among the code\n  vendors: ['vendors/x.js', 'vendors/y.js' ]\n\n  # gereral options (all is optional, default values listed)\n  bare: false\n  packaging: true\n  expose: '' # can be 'window', 'exports' etc\n  minify: false\n\n  # httpfolder (optional), release and debug (both required)\n  httpfolder: 'js'\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\n* **2) Multi source folder:**\n\nWhen your code is splitted between two or more source folders you can set the\nmain `toast` call without any path, and inform your folders right bellow it.\n\n````coffeescript\ntoast\n  folders:\n    'src/my/app/folder': 'app'\n    'src/my/lib/folder': 'lib'\n    # ...\n````\n\n<a name=\"config-options\" />\n## Config options\n\nLet's take a closer look at all properties you can have in your `toaster.coffee`\nfile and what each one of these is responsible of.\n\n<a name=\"config-options-folders\" />\n### `folders`\n\n> Mandatory: `no` <BR/>\n> Type: `Object` <BR/>\n> Default: `null` <BR/>\n\nIn case you have more than one `src` folder, you can set an `object` of\n`objects` containing setup information about all your source folders, in the\nformat `'folderpath':'folderalias'`.\n\nThe **hash-key** is the `path` of your folder, and the **hash-value** is the\n`alias` you want to prepend to all files under that.\n\n*Pay attention to this specially when using Toaster with the '-j'\n[option](#advanced-options).*\n\nTo give an example, the equivalent use of this config:\n\n````coffeescript\ntoast 'src'\n  # ...\n````\n\nWould be:\n\n````coffeescript\ntoast\n  folders:\n    'src': ''\n````\n\n**NOTE: Aliases take effect only if the [`packaging`](#config-options-packaging)\nis set to `true`.**\n\nAliases lets you set a virtual top namespace to your source folder, if you have\n`src/app/app.coffee` which is a `class App`, you'll usually access it using\n`new app.App`.\n\nNow if you set an alias like `'src':'awesome'` the whole structure under your\nsource folder will be addressed under that `awesome` namespace and you need\nto prepend it when accessing your classes, i.e. `new awesome.app.App`.\n\n<a name=\"config-options-exclude\" />\n### `exclude`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nLet's you excplicity exclude some folder, file or file type from Toaster\nsearch/process mechanism. The string you use here will effectively turn into\na RegExp like that:\n\n````coffeescript\nnew RegExp '.DS_store'\nnew RegExp '.swp'\nnew RegExp 'my/folder/to/be/excluded'\n````\n\n<a name=\"config-options-vendors\" />\n### `vendors`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nYou can define vendors such as:\n\n````coffeescript\n  vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely\njavascript, preferably minified ones -- Toaster will not compile or minify them,\nonly concatenate everything.\n\n<a name=\"config-options-bare\" />\n### `bare`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nIf `true`, compile your CoffeeScript files without the top-level function safety\nwrapper:\n\n````javascript\n  (function() {\n    console.log('My peace of code!');\n  }).call(this);\n````\n\nSo you will end up with just `your peace of code`:\n\n````javascript\n  console.log('My peace of code!');\n````\n\n<a name=\"config-options-packaging\" />\n### `packaging`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nWhen packaging is `true`, Toaster will rewrite **all** your `class`\ndeclarations.\n\nIf you have a file in `src/app/models/user.coffee` with this contents:\n\n````coffeescript\nclass User\n````\n\nToaster will rewrite your declaration prepending a `namespace` to it, based on\nthe folder the class is located, resulting -- in this example -- into this:\n\n````coffeescript\nclass app.models.User\n````\n\nThis rewriting process is **saved** directly into your `file`. In case you move\nthis class to another folder, the prepended `namespace` will be rewrited again,\nalways following your folder structure.\n\nIn other words, your don't need to worry about hardcoded namespaces in your\nfiles, because Toaster will handle all the dirty for you.\n\n<a name=\"config-options-expose\" />\n### `expose`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nIf informed, list all you packages of classes in the given scope. If you use\n`window` as your expose scope, your classes will be available also in the window\nobject -- or whatever scope you inform, suck as `exports` if you're building\nfor NodeJS.\n\nIn the end you'll be able to access your files throught this scope where your\nclasses was exposed.\n\n````coffeescript\nnew window.app.models.User\nnew exports.app.models.User\n````\n\n<a name=\"config-options-minify\" />\n### `minify`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `true` <BR/>\n\nIf `true`, minify your release file using UglifyJS.\n\nDebug files are **never** minified.\n\n<a name=\"config-options-httpfolder\" />\n### `httpfolder`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `''` <BR/>\n\nThe folder path to reach your debug file through http, in case it is not inside\nyour root directory. Imagine that the `www` is your root folder and when you\naccess your webiste the `/` referes to this folder.\n\nInside this `www` folder you have another folder called `js` where you put all\nyour compiled js, resulting from a config like this:\n\n````coffeescript\ntoast 'src'\n  # ...\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\nFollowing this case you'd just need to inform `js` as your http folder. Toaster\nwill use it to reach your **debug** files. For that, it will writes the\ndeclarations inside the `debug boot loader` following this location in order to\nimport your scripts properly when in debug mode, prepending your `httpfolder` to\nall file paths:\n\n````javascript\n// app-debug.js\ndocument.write('<scri'+'pt src=\"js/toaster/app.js\"></scr'+'ipt>')\n````\n\nWithout knowing that your JS files is under the `js` folder this path would be\nbroken.\n\n**NOTE: Your release file will not be affected by this property.**\n\n<a name=\"config-options-release\" />\n### `release`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **release** file.\n\n<a name=\"config-options-debug\" />\n### `debug`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **debug** file.\n\n<a name=\"examples\"/>\n# Examples\n----\n\nYou'll certainly find some useful resources in the examples provided.\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config\noptions, always looking for the differences in your javascript release file.\n\n> [Single folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/single-folder)<BR>\n> [Multi folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/multi-folder)<BR>\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n<a name=\"api\"/>\n# API\n----\n\nYou can use Toaster through API as well, in case you want to power up your\ncompiling tasks or even build some framework/lib on top of it.\n\nSee the API example for further information.\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)\n\n````coffeescript\n  Toaster = (require 'coffee-toaster').Toaster\n  toasting = new Toaster [basedir], [options], [skip_initial_build]\n  toasting.build [header_code_injection], [footer_code_injection]\n````\n\n<a name=\"contributing\"/>\n# Contributing\n----\n\n<a name=\"setup\"/>\n## Setting everything up\n\nEnvironment setup is simple achieved by:\n\n````bash\n  git clone git://github.com/serpentem/coffee-toaster.git\n  cd coffee-toaster && git submodule update --init\n  npm link\n````\n\n<a name=\"building\"/>\n## Building\n\nBuilds the release file inside the `lib` folder.\n\n````bash\n  make build\n````\n\n<a name=\"watching\"/>\n## Watching'n'Compiling\n\nStarts watching/compiling using a previuos version of the CoffeeToaster itself.\n\n````bash\n  make watch\n````\n\n<a name=\"testing\"/>\n## Testing\n\nRun all tests.\n\n````bash\n  make test\n````\n\n<a name=\"changelog\"/>\n# Changelog\n----\n\n> [CHANGELOG.md](https://github.com/serpentem/coffee-toaster/tree/master/build/CHANGELOG.md)","readmeFilename":"README.md","_id":"coffee-toaster@0.6.10","dist":{"shasum":"7b0e4fec1b717d52dd73af88cf7fafadfd070a36","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.6.10.tgz","integrity":"sha512-T94RdxE5Vlu3Rk+K5x4aiRxLW9H4w+Mj/ICTx9doPrBbb2bDdBJvt1zNB24cAUCmYvvZFtZrKpR+AKoQA15Bvw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfbgU4wNW6/lQxyIBrlcxcGcx4Doc033vwW1qQ+V05CQIgSDNX/FJSJ+3QBxe8HsJufChTed1qYwpxa01cmGhmDuk="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"arboleya","email":"anderson@arboleya.me"},"maintainers":[{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.6.11":{"name":"coffee-toaster","version":"0.6.11","author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"description":"Minimalist build system for CoffeeScript.","keywords":["coffeescript","build","namespace","tool"],"main":"./lib/toaster","directories":{"lib":"./lib/"},"scripts":{"test":"make test"},"repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"},"bin":{"toaster":"./bin/toaster"},"engines":{"node":">= 0.8.14"},"dependencies":{"fs-util":"0.3.4","coffee-script":"1.3.x","uglify-js":"1.1.x","optimist":"0.2.x","colors":"0.5.x","vows":"0.6.x","growl":"1.2.x"},"optionalDependencies":{"growl":"1.2.x"},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nMinimalist build system for CoffeeScript.\n> Version 0.6.11\n\n[![Build Status](https://secure.travis-ci.org/serpentem/coffee-toaster.png)](http://travis-ci.org/serpentem/coffee-toaster)\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n* Vendors management\n* Automagically packaging system with namespaces\n* Micro build routines\n* Exports aliases\n* Broken and circular-loop dependencies validation\n* Live syntax-check\n* Growl support\n* Debug Mode\n* Minify support\n* Scaffolding routines\n\n# Issues\nDo not hesitate to open a feature request or a bug report.\n> https://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\nA place to talk about it, ask anything, get in touch. Luckily you'll be answered\nsooner than later.\n\n> https://groups.google.com/group/coffee-toaster\n\n*NOTE: The list is `active` and `maintained`, though the low activity. So don't\nbe shy.*\n\n# About\n\nMinimalist build system for CoffeeScript, made for those who dare to use class\ndefinitions in CoffeeScript while being able to easily inherit from external\nfiles. The system is powered with import directives that uses wildcards\nfacilities, exposed scopes, excluded files filter options and a packaging system\nthat can inject your folders-as-namespaces to all your classes based on where\nthey are under your src folder.\n\nCoffeeToaster was created initially as a base for creating the\n[Theoricus Framework](https://github.com/serpentem/theoricus).\n\n\n# Docs\n\n - [Installing](#installing)\n - [Scaffolding](#scaffolding)\n   - [Initializing new app](#initializing-new-app)\n   - [Initializing config file](#initializing-config-file)\n - [Usage](#usage)\n   - [Import directive](#import-directive)\n   - [Compile](#compile) `-c`\n   - [Watch](#watch) `-w`\n   - [Debug](#debug) `-cd`, `-wd`\n   - [Autorun](#autorun) `-a`, `-ad`\n     - [Representative structure](#representative-structure)\n   - [HTML inclusion](#html-inclusion)\n   - [Advanced options](#advanced-options)\n   - [Conclusion](#conclusion)\n     - [Note for VIM Users](#vim-users)\n - [Config file](#config-file)\n   - [Config options](#config-options)\n     - [`folders`](#config-options-folders)\n     - [`exclude`](#config-options-exclude)\n     - [`vendors`](#config-options-vendors)\n     - [`bare`](#config-options-bare)\n     - [`packaging`](#config-options-packaging)\n     - [`expose`](#config-options-expose)\n     - [`minify`](#config-options-minify)\n     - [`httpfolder`](#config-options-httpfolder)\n     - [`release`](#config-options-release)\n     - [`debug`](#config-options-debug)\n - [Examples](#examples)\n - [API](#api)\n - [Contributing](#contributing)\n   - [Setup](#setup)\n   - [Building](#building)\n   - [Watching](#watching)\n   - [Testing](#testing)\n - [CHANGELOG](#changelog)\n\n<a name=\"installing\" />\n# Installing\n----\n\n`npm install -g coffee-toaster`\n\n<a name=\"scaffolding\" />\n# Scaffolding\n----\n\nThere are two simple `scaffolding` routines bundled with CoffeeToaster for\ncreating new projects structure from the scratch and also for creating the\nconfig `toaster.coffee` file for existent projects.\n\n<a name=\"initializing-new-app\" />\n## Initializing new app\n\nCoffeeToaster suggests a very simple structure for initial projects, you can\ncustomize it as you like.\n\n`toaster -n mynewapp`\n\nYou will be asked for some things:\n\n> source folder\n\nRelative folderpath to your source folder, default is `src`.\n\n> release file\n\nRelative filepath to your release file, default is `www/js/app.js`\n\n> http folder\n\nThe folderpath to reach your debug file through http, default is an `empty\nstring`. Imagine that the `www` is your root web folder, and inside of it you\nhave a `js` dir where you put your debug file. In this case you'd just need to\ninform 'js' as the http folder. It tells toaster *how to reach your debug js\nfile* starting from the `/` on your server.\n\nThis property is only for **debug**, your *release* file will not be affected.\n\n### Result\n\nConsidering all the default values, you'll end up with a structure as such:\n\n````\nmyawsomeapp/\n├── src\n├── vendors\n├── www\n    └── js\n└── toaster.coffee\n\n4 directories, 1 file\n````\n\n<a name=\"initializing-config-file\" />\n## Initializing config file\n\nYou can also initialize an existing project with a config `toaster.coffee` file\nsuch as:\n\n````\ncd existing-project\ntoaster -i\n````\n\nSome of the same information (`src`, `release` and `httpfolder`) will be\nrequired, answer everything according to your project's structure and a config\n`toaster.coffee` file will be created inside of it.\n\n<a name=\"usage\" />\n# Usage\n----\n\nToaster help screen.\n\n````\nCoffeeToaster\n  Minimalist build system for CoffeeScript\n\nUsage:\n  toaster [options] [path]\n\nExamples:\n  toaster -n myawsomeapp   (required)\n  toaster -i [myawsomeapp] (optional)\n  toaster -w [myawsomeapp] (optional)\n  toaster -wd [myawsomeapp] (optional)\n\nOptions:\n  -n, --new          Scaffold a very basic new App                   \n  -i, --init         Create a config (toaster.coffee) file           \n  -w, --watch        Start watching/compiling your project           \n  -c, --compile      Compile the entire project, without watching it.\n  -d, --debug        Debug mode (compile js files individually)      \n  -a, --autorun      Execute the script in node.js after compilation\n  -j, --config       Config file formatted as a json-string.           [string]\n  -f, --config-file  Path to a different config file.                  [string]\n  -v, --version                                                      \n  -h, --help \n````\n\n<a name=\"import-directive\"/>\n## Import directive\n\nThe import directive is known by:\n\n````coffeescript\n#<< app/views/user_view\n#<< app/utils/*\n````\n\nBy putting `#<< app/views/user_view` in your CoffeeScript file, you're telling\nCoffeeToaster that there's a dependency. It's like a `require`, except that you\ncan't save a reference of the imported file to a variable. Instead, this\ndirectives shoud be put in the first lines of your files.\n\nThis is how you organically tells Toaster about the specific ordering\noptions to be considered when all of your files get merged. Files imported this\nway will only be gracefully sorted out in your final output javascript so\nevery file is always **defined** before it's **needed**.\n\nWild cards `#<< app/utils/*` are also accepted as a handy option.\n\nIf you're writing a `class B` that will extends the `class A`, you shoud first\nimport the `class A` so it will be available for being extended by `class B`.\n\n* src/app/a\n\n````coffeescript\nclass A\n  constructor:->\n    console.log 'Will be used as base class.'\n````\n\n* src/app/b\n\n````coffeescript\n#<< app/a\nclass B extends A\n  constructor:->\n    console.log 'Using class A as base class'\n````\n\nThink of it as a glue that you use to chain all of your files appropriately.\n\n<a name=\"compiling\"/>\n## Compile\n\nCompile your project according your [config file](#config-file).\n\n````bash\ncd existing-project\ntoaster -c\n````\n\n<a name=\"watching\"/>\n## Watch\n\nStarts Toaster in watching'n'compiling mode:\n\n````bash\ncd existing-project\ntoaster -w\n````\n\nAny changes you make to your `src` files will trigger the `compile` action.\n\n<a name=\"debugging\"/>\n## Debug\n\nIn debug mode option `-d` all files will be compiled individually inside a\nfolder called `toaster` in the same directory you've pointed your debug file,\naiming to ease the debugging process.\n\n````bash\ntoaster -wd\ntoaster -cd\n````\n\nFor example, if you have `release/app-debug.js`, a folder will be created at\n`release/toaster` and all your CoffeeScript files will be compiled to Javascript\nwithin.\n\n<a name=\"representative-structure\"/>\n### Representative Structure\n\nBellow is a representative directory structure after compiling in debug mode.\n\n````\n/usage\n|-- src\n|   `-- app\n|       |-- controllers\n|       |   `-- users_controller.coffee\n|       |-- models\n|       |   `-- user_model.coffee\n|       `-- views\n|           `-- user_view.coffee\n|-- www\n|   `-- js\n|       |-- app-debug.js\n|       |-- app.js\n|       `-- toaster\n|           `-- app\n|               |-- controllers\n|               |   `-- users_controller.js\n|               |-- models\n|               |   `-- user_model.js\n|               `-- views\n|                   `-- user_view.js\n`-- toaster.coffee\n````\n\nEvery CoffeeScript file is compiled individually inside the `www/js/toaster`\ndirectory, so you can debug it sanely.\n\nThe debug file `www/js/app-debug.js` is the boot-loader responsible for loading\nall these individual compiled JS files into the right order.\n\n<a name=\"autorun\"/>\n## Autorun\n\nIn autorun mode option `-a` the script is recompiled after each file change and \nit is executed in a node.js child process. It is possible to use autorun in \ncombination with debug option `-d` to set the script breakpoint on the first line\n\n````bash\ntoaster -a\ntoaster -da\n````\nof if you like the `watch` option\n\n````bash\ntoaster -wa\ntoaster -wda\n````\n\nto better debug your application via node.js you can use some tools like \n[node-inspector](https://github.com/dannycoates/node-inspector)\n\nIt is also possible to pass arguments to the compiled script\n\n````bash\ntoaster -wa argument argument2 argument3\ntoaster -wda argument argument2 argument3\n````\n\nPlease note that the `-a` arguments has to be the last of the group in order to \nmake it work: `toaster -ad argument` will not behave as expected and\n`toaster -da argument` should be used instead\n\n<a name=\"html-inclusion\"/>\n## HTML inclusion\n\nSo in your `.html` you'll have two options:\n\n> 1) Include your release file.\n\n````html\n<script src=\"js/app.js\"></script>\n````\n \n> 2) Include the toaster boot-loader (your debug mode).\n\n````html\n<script src=\"js/app-debug.js\"></script>\n````\n\n<a name=\"advanced-options\"/>\n## Advanced options\n\nYou can pass your own config file for toaster instead of the default one\n`toaster.coffee`, with the `-f` or `--config-file` option:\n\n````bash\ntoaster -wdf config/mycustomconfig.coffee\n````\n\n*NOTE: It's important that you always call this from your project base folder,\notherwise the paths of your config can get messy. Remembers also that the paths\nin your config file shoud ideally be always relative to your project base\nfolder.*\n\nAlternativelly, you can even pass the whole configuration as a JSON string, with\nthe `-j` or `--config` option:\n\n````bash\ntoaster -wdj '{\"folders\":{\"src\":\"\"},\"expose\":\"window\",\"release\":\"app.js\",\"debug\":\"app-debug.js\"}'\n````\n\n*NOTE: The same above.*\n\n<a name=\"conclusion\"/>\n## Conlusion\n\nEvery time something changes, CoffeeToaster recompiles all of your application\nby:\n\n* collecting all .coffee files and processing everything, adding namespace's\ndeclarations to class definitions based on the folder they are located\n* reordering everything, always defining files and classes before they're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\n<a name=\"vim-users\"/>\n### VIM Users\n\nDue to the way VIM handles files, you'll need to disable the creation of `swap`\nand `backup` files.\n\nTo do it, just put these three lines in your `.vimrc`:\n\n``` vim\n\" for coffee-toaster\nset nobackup       \" no backup files\nset nowritebackup  \" only in case you don't want a backup file while editing\nset noswapfile     \" no swap files\n```\n\nThis will guarantee the expected behavior of Toaster and make it play nicely\nwith VIM without any conflicts. For more info about why it's really needed,\nplease check this [thread](https://github.com/serpentem/coffee-toaster/issues/47).\n\n<a name=\"config-file\" />\n# Config file\n----\n\nThe `toaster.coffee` is the config file from where Toaster seek all information\nabout your app, vendores, build options and so on. There are two main usages\nyou can make of this file:\n\n* **1) Single source folder:**\n\nWhen all your code is bellow one single source folder your set up the main\n`toast` call passing the folder path directly.\n\n````coffeescript\n# src folder\ntoast 'src'\n\n  # excluded items (will be used as a regex)\n  exclude: ['folder/to/exclude', 'another/folder', '.DS_Store' ]\n\n  # packaging vendors among the code\n  vendors: ['vendors/x.js', 'vendors/y.js' ]\n\n  # gereral options (all is optional, default values listed)\n  bare: false\n  packaging: true\n  expose: '' # can be 'window', 'exports' etc\n  minify: false\n\n  # httpfolder (optional), release and debug (both required)\n  httpfolder: 'js'\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\n* **2) Multi source folder:**\n\nWhen your code is splitted between two or more source folders you can set the\nmain `toast` call without any path, and inform your folders right bellow it.\n\n````coffeescript\ntoast\n  folders:\n    'src/my/app/folder': 'app'\n    'src/my/lib/folder': 'lib'\n    # ...\n````\n\n<a name=\"config-options\" />\n## Config options\n\nLet's take a closer look at all properties you can have in your `toaster.coffee`\nfile and what each one of these is responsible of.\n\n<a name=\"config-options-folders\" />\n### `folders`\n\n> Mandatory: `no` <BR/>\n> Type: `Object` <BR/>\n> Default: `null` <BR/>\n\nIn case you have more than one `src` folder, you can set an `object` of\n`objects` containing setup information about all your source folders, in the\nformat `'folderpath':'folderalias'`.\n\nThe **hash-key** is the `path` of your folder, and the **hash-value** is the\n`alias` you want to prepend to all files under that.\n\n*Pay attention to this specially when using Toaster with the '-j'\n[option](#advanced-options).*\n\nTo give an example, the equivalent use of this config:\n\n````coffeescript\ntoast 'src'\n  # ...\n````\n\nWould be:\n\n````coffeescript\ntoast\n  folders:\n    'src': ''\n````\n\n**NOTE: Aliases take effect only if the [`packaging`](#config-options-packaging)\nis set to `true`.**\n\nAliases lets you set a virtual top namespace to your source folder, if you have\n`src/app/app.coffee` which is a `class App`, you'll usually access it using\n`new app.App`.\n\nNow if you set an alias like `'src':'awesome'` the whole structure under your\nsource folder will be addressed under that `awesome` namespace and you need\nto prepend it when accessing your classes, i.e. `new awesome.app.App`.\n\n<a name=\"config-options-exclude\" />\n### `exclude`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nLet's you excplicity exclude some folder, file or file type from Toaster\nsearch/process mechanism. The string you use here will effectively turn into\na RegExp like that:\n\n````coffeescript\nnew RegExp '.DS_store'\nnew RegExp '.swp'\nnew RegExp 'my/folder/to/be/excluded'\n````\n\n<a name=\"config-options-vendors\" />\n### `vendors`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nYou can define vendors such as:\n\n````coffeescript\n  vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely\njavascript, preferably minified ones -- Toaster will not compile or minify them,\nonly concatenate everything.\n\n<a name=\"config-options-bare\" />\n### `bare`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nIf `true`, compile your CoffeeScript files without the top-level function safety\nwrapper:\n\n````javascript\n  (function() {\n    console.log('My peace of code!');\n  }).call(this);\n````\n\nSo you will end up with just `your peace of code`:\n\n````javascript\n  console.log('My peace of code!');\n````\n\n<a name=\"config-options-packaging\" />\n### `packaging`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nWhen packaging is `true`, Toaster will rewrite **all** your `class`\ndeclarations.\n\nIf you have a file in `src/app/models/user.coffee` with this contents:\n\n````coffeescript\nclass User\n````\n\nToaster will rewrite your declaration prepending a `namespace` to it, based on\nthe folder the class is located, resulting -- in this example -- into this:\n\n````coffeescript\nclass app.models.User\n````\n\nThis rewriting process is **saved** directly into your `file`. In case you move\nthis class to another folder, the prepended `namespace` will be rewrited again,\nalways following your folder structure.\n\nIn other words, your don't need to worry about hardcoded namespaces in your\nfiles, because Toaster will handle all the dirty for you.\n\n<a name=\"config-options-expose\" />\n### `expose`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nIf informed, list all you packages of classes in the given scope. If you use\n`window` as your expose scope, your classes will be available also in the window\nobject -- or whatever scope you inform, suck as `exports` if you're building\nfor NodeJS.\n\nIn the end you'll be able to access your files throught this scope where your\nclasses was exposed.\n\n````coffeescript\nnew window.app.models.User\nnew exports.app.models.User\n````\n\n<a name=\"config-options-minify\" />\n### `minify`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `true` <BR/>\n\nIf `true`, minify your release file using UglifyJS.\n\nDebug files are **never** minified.\n\n<a name=\"config-options-httpfolder\" />\n### `httpfolder`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `''` <BR/>\n\nThe folder path to reach your debug file through http, in case it is not inside\nyour root directory. Imagine that the `www` is your root folder and when you\naccess your webiste the `/` referes to this folder.\n\nInside this `www` folder you have another folder called `js` where you put all\nyour compiled js, resulting from a config like this:\n\n````coffeescript\ntoast 'src'\n  # ...\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\nFollowing this case you'd just need to inform `js` as your http folder. Toaster\nwill use it to reach your **debug** files. For that, it will writes the\ndeclarations inside the `debug boot loader` following this location in order to\nimport your scripts properly when in debug mode, prepending your `httpfolder` to\nall file paths:\n\n````javascript\n// app-debug.js\ndocument.write('<scri'+'pt src=\"js/toaster/app.js\"></scr'+'ipt>')\n````\n\nWithout knowing that your JS files is under the `js` folder this path would be\nbroken.\n\n**NOTE: Your release file will not be affected by this property.**\n\n<a name=\"config-options-release\" />\n### `release`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **release** file.\n\n<a name=\"config-options-debug\" />\n### `debug`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **debug** file.\n\n<a name=\"examples\"/>\n# Examples\n----\n\nYou'll certainly find some useful resources in the examples provided.\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config\noptions, always looking for the differences in your javascript release file.\n\n> [Single folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/single-folder)<BR>\n> [Multi folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/multi-folder)<BR>\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n<a name=\"api\"/>\n# API\n----\n\nYou can use Toaster through API as well, in case you want to power up your\ncompiling tasks or even build some framework/lib on top of it.\n\nSee the API example for further information.\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)\n\n````coffeescript\n  Toaster = (require 'coffee-toaster').Toaster\n  toasting = new Toaster [basedir], [options], [skip_initial_build]\n  toasting.build [header_code_injection], [footer_code_injection]\n````\n\n<a name=\"contributing\"/>\n# Contributing\n----\n\n<a name=\"setup\"/>\n## Setting everything up\n\nEnvironment setup is simple achieved by:\n\n````bash\n  git clone git://github.com/serpentem/coffee-toaster.git\n  cd coffee-toaster && git submodule update --init\n  npm link\n````\n\n<a name=\"building\"/>\n## Building\n\nBuilds the release file inside the `lib` folder.\n\n````bash\n  make build\n````\n\n<a name=\"watching\"/>\n## Watching'n'Compiling\n\nStarts watching/compiling using a previuos version of the CoffeeToaster itself.\n\n````bash\n  make watch\n````\n\n<a name=\"testing\"/>\n## Testing\n\nRun all tests.\n\n````bash\n  make test\n````\n\n<a name=\"changelog\"/>\n# Changelog\n----\n\n> [CHANGELOG.md](https://github.com/serpentem/coffee-toaster/tree/master/build/CHANGELOG.md)","readmeFilename":"README.md","_id":"coffee-toaster@0.6.11","dist":{"shasum":"f008a3b7f3a73d14ebc3c937954551f40b0fad0e","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.6.11.tgz","integrity":"sha512-yYhQNA9yO8tgYgqmJxRRYEQE4e81fcCjBxlRp0JfMCErLXucLOjbm63Z2DKGXRhmRT8TE8fTXjQ4cSWEkMvnyQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF60PFjCLSGOeUZLXvGeKzlcOhdXiR909J4G9/DNaHULAiADhiaQxMjFHFg4onoS3o9WQebXvInvckGgj4dfJtE19A=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"arboleya","email":"anderson@arboleya.me"},"maintainers":[{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.6.12":{"name":"coffee-toaster","version":"0.6.12","author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"description":"Minimalist build system for CoffeeScript.","keywords":["coffeescript","build","namespace","tool"],"main":"./lib/toaster","directories":{"lib":"./lib/"},"scripts":{"test":"make test"},"repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"},"bin":{"toaster":"./bin/toaster"},"engines":{"node":"0.10.x"},"dependencies":{"fs-util":"0.3.4","coffee-script":"1.3.x","uglify-js":"1.1.x","optimist":"0.2.x","colors":"0.5.x","vows":"0.7.x","growl":"1.2.x"},"optionalDependencies":{"growl":"1.2.x"},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nMinimalist build system for CoffeeScript.\n> Version 0.6.12\n\n[![Build Status](https://secure.travis-ci.org/serpentem/coffee-toaster.png)](http://travis-ci.org/serpentem/coffee-toaster)\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n* Vendors management\n* Automagically packaging system with namespaces\n* Micro build routines\n* Exports aliases\n* Broken and circular-loop dependencies validation\n* Live syntax-check\n* Growl support\n* Debug Mode\n* Minify support\n* Scaffolding routines\n\n# Issues\nDo not hesitate to open a feature request or a bug report.\n> https://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\nA place to talk about it, ask anything, get in touch. Luckily you'll be answered\nsooner than later.\n\n> https://groups.google.com/group/coffee-toaster\n\n*NOTE: The list is `active` and `maintained`, though the low activity. So don't\nbe shy.*\n\n# About\n\nMinimalist build system for CoffeeScript, made for those who dare to use class\ndefinitions in CoffeeScript while being able to easily inherit from external\nfiles. The system is powered with import directives that uses wildcards\nfacilities, exposed scopes, excluded files filter options and a packaging system\nthat can inject your folders-as-namespaces to all your classes based on where\nthey are under your src folder.\n\nCoffeeToaster was created initially as a base for creating the\n[Theoricus Framework](https://github.com/serpentem/theoricus).\n\n\n# Docs\n\n - [Installing](#installing)\n - [Scaffolding](#scaffolding)\n   - [Initializing new app](#initializing-new-app)\n   - [Initializing config file](#initializing-config-file)\n - [Usage](#usage)\n   - [Import directive](#import-directive)\n   - [Compile](#compile) `-c`\n   - [Watch](#watch) `-w`\n   - [Debug](#debug) `-cd`, `-wd`\n   - [Autorun](#autorun) `-a`, `-ad`\n     - [Representative structure](#representative-structure)\n   - [HTML inclusion](#html-inclusion)\n   - [Advanced options](#advanced-options)\n   - [Conclusion](#conclusion)\n     - [Note for VIM Users](#vim-users)\n - [Config file](#config-file)\n   - [Config options](#config-options)\n     - [`folders`](#config-options-folders)\n     - [`exclude`](#config-options-exclude)\n     - [`vendors`](#config-options-vendors)\n     - [`bare`](#config-options-bare)\n     - [`packaging`](#config-options-packaging)\n     - [`expose`](#config-options-expose)\n     - [`minify`](#config-options-minify)\n     - [`httpfolder`](#config-options-httpfolder)\n     - [`release`](#config-options-release)\n     - [`debug`](#config-options-debug)\n - [Examples](#examples)\n - [API](#api)\n - [Contributing](#contributing)\n   - [Setup](#setup)\n   - [Building](#building)\n   - [Watching](#watching)\n   - [Testing](#testing)\n - [CHANGELOG](#changelog)\n\n<a name=\"installing\" />\n# Installing\n----\n\n`npm install -g coffee-toaster`\n\n<a name=\"scaffolding\" />\n# Scaffolding\n----\n\nThere are two simple `scaffolding` routines bundled with CoffeeToaster for\ncreating new projects structure from the scratch and also for creating the\nconfig `toaster.coffee` file for existent projects.\n\n<a name=\"initializing-new-app\" />\n## Initializing new app\n\nCoffeeToaster suggests a very simple structure for initial projects, you can\ncustomize it as you like.\n\n`toaster -n mynewapp`\n\nYou will be asked for some things:\n\n> source folder\n\nRelative folderpath to your source folder, default is `src`.\n\n> release file\n\nRelative filepath to your release file, default is `www/js/app.js`\n\n> http folder\n\nThe folderpath to reach your debug file through http, default is an `empty\nstring`. Imagine that the `www` is your root web folder, and inside of it you\nhave a `js` dir where you put your debug file. In this case you'd just need to\ninform 'js' as the http folder. It tells toaster *how to reach your debug js\nfile* starting from the `/` on your server.\n\nThis property is only for **debug**, your *release* file will not be affected.\n\n### Result\n\nConsidering all the default values, you'll end up with a structure as such:\n\n````\nmyawsomeapp/\n├── src\n├── vendors\n├── www\n    └── js\n└── toaster.coffee\n\n4 directories, 1 file\n````\n\n<a name=\"initializing-config-file\" />\n## Initializing config file\n\nYou can also initialize an existing project with a config `toaster.coffee` file\nsuch as:\n\n````\ncd existing-project\ntoaster -i\n````\n\nSome of the same information (`src`, `release` and `httpfolder`) will be\nrequired, answer everything according to your project's structure and a config\n`toaster.coffee` file will be created inside of it.\n\n<a name=\"usage\" />\n# Usage\n----\n\nToaster help screen.\n\n````\nCoffeeToaster\n  Minimalist build system for CoffeeScript\n\nUsage:\n  toaster [options] [path]\n\nExamples:\n  toaster -n myawsomeapp   (required)\n  toaster -i [myawsomeapp] (optional)\n  toaster -w [myawsomeapp] (optional)\n  toaster -wd [myawsomeapp] (optional)\n\nOptions:\n  -n, --new          Scaffold a very basic new App                   \n  -i, --init         Create a config (toaster.coffee) file           \n  -w, --watch        Start watching/compiling your project           \n  -c, --compile      Compile the entire project, without watching it.\n  -d, --debug        Debug mode (compile js files individually)      \n  -a, --autorun      Execute the script in node.js after compilation\n  -j, --config       Config file formatted as a json-string.           [string]\n  -f, --config-file  Path to a different config file.                  [string]\n  -v, --version                                                      \n  -h, --help \n````\n\n<a name=\"import-directive\"/>\n## Import directive\n\nThe import directive is known by:\n\n````coffeescript\n#<< app/views/user_view\n#<< app/utils/*\n````\n\nBy putting `#<< app/views/user_view` in your CoffeeScript file, you're telling\nCoffeeToaster that there's a dependency. It's like a `require`, except that you\ncan't save a reference of the imported file to a variable. Instead, this\ndirectives shoud be put in the first lines of your files.\n\nThis is how you organically tells Toaster about the specific ordering\noptions to be considered when all of your files get merged. Files imported this\nway will only be gracefully sorted out in your final output javascript so\nevery file is always **defined** before it's **needed**.\n\nWild cards `#<< app/utils/*` are also accepted as a handy option.\n\nIf you're writing a `class B` that will extends the `class A`, you shoud first\nimport the `class A` so it will be available for being extended by `class B`.\n\n* src/app/a\n\n````coffeescript\nclass A\n  constructor:->\n    console.log 'Will be used as base class.'\n````\n\n* src/app/b\n\n````coffeescript\n#<< app/a\nclass B extends A\n  constructor:->\n    console.log 'Using class A as base class'\n````\n\nThink of it as a glue that you use to chain all of your files appropriately.\n\n<a name=\"compiling\"/>\n## Compile\n\nCompile your project according your [config file](#config-file).\n\n````bash\ncd existing-project\ntoaster -c\n````\n\n<a name=\"watching\"/>\n## Watch\n\nStarts Toaster in watching'n'compiling mode:\n\n````bash\ncd existing-project\ntoaster -w\n````\n\nAny changes you make to your `src` files will trigger the `compile` action.\n\n<a name=\"debugging\"/>\n## Debug\n\nIn debug mode option `-d` all files will be compiled individually inside a\nfolder called `toaster` in the same directory you've pointed your debug file,\naiming to ease the debugging process.\n\n````bash\ntoaster -wd\ntoaster -cd\n````\n\nFor example, if you have `release/app-debug.js`, a folder will be created at\n`release/toaster` and all your CoffeeScript files will be compiled to Javascript\nwithin.\n\n<a name=\"representative-structure\"/>\n### Representative Structure\n\nBellow is a representative directory structure after compiling in debug mode.\n\n````\n/usage\n|-- src\n|   `-- app\n|       |-- controllers\n|       |   `-- users_controller.coffee\n|       |-- models\n|       |   `-- user_model.coffee\n|       `-- views\n|           `-- user_view.coffee\n|-- www\n|   `-- js\n|       |-- app-debug.js\n|       |-- app.js\n|       `-- toaster\n|           `-- app\n|               |-- controllers\n|               |   `-- users_controller.js\n|               |-- models\n|               |   `-- user_model.js\n|               `-- views\n|                   `-- user_view.js\n`-- toaster.coffee\n````\n\nEvery CoffeeScript file is compiled individually inside the `www/js/toaster`\ndirectory, so you can debug it sanely.\n\nThe debug file `www/js/app-debug.js` is the boot-loader responsible for loading\nall these individual compiled JS files into the right order.\n\n<a name=\"autorun\"/>\n## Autorun\n\nIn autorun mode option `-a` the script is recompiled after each file change and \nit is executed in a node.js child process. It is possible to use autorun in \ncombination with debug option `-d` to set the script breakpoint on the first line\n\n````bash\ntoaster -a\ntoaster -da\n````\nof if you like the `watch` option\n\n````bash\ntoaster -wa\ntoaster -wda\n````\n\nto better debug your application via node.js you can use some tools like \n[node-inspector](https://github.com/dannycoates/node-inspector)\n\nIt is also possible to pass arguments to the compiled script\n\n````bash\ntoaster -wa argument argument2 argument3\ntoaster -wda argument argument2 argument3\n````\n\nPlease note that the `-a` arguments has to be the last of the group in order to \nmake it work: `toaster -ad argument` will not behave as expected and\n`toaster -da argument` should be used instead\n\n<a name=\"html-inclusion\"/>\n## HTML inclusion\n\nSo in your `.html` you'll have two options:\n\n> 1) Include your release file.\n\n````html\n<script src=\"js/app.js\"></script>\n````\n \n> 2) Include the toaster boot-loader (your debug mode).\n\n````html\n<script src=\"js/app-debug.js\"></script>\n````\n\n<a name=\"advanced-options\"/>\n## Advanced options\n\nYou can pass your own config file for toaster instead of the default one\n`toaster.coffee`, with the `-f` or `--config-file` option:\n\n````bash\ntoaster -wdf config/mycustomconfig.coffee\n````\n\n*NOTE: It's important that you always call this from your project base folder,\notherwise the paths of your config can get messy. Remembers also that the paths\nin your config file shoud ideally be always relative to your project base\nfolder.*\n\nAlternativelly, you can even pass the whole configuration as a JSON string, with\nthe `-j` or `--config` option:\n\n````bash\ntoaster -wdj '{\"folders\":{\"src\":\"\"},\"expose\":\"window\",\"release\":\"app.js\",\"debug\":\"app-debug.js\"}'\n````\n\n*NOTE: The same above.*\n\n<a name=\"conclusion\"/>\n## Conlusion\n\nEvery time something changes, CoffeeToaster recompiles all of your application\nby:\n\n* collecting all .coffee files and processing everything, adding namespace's\ndeclarations to class definitions based on the folder they are located\n* reordering everything, always defining files and classes before they're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\n<a name=\"vim-users\"/>\n### VIM Users\n\nDue to the way VIM handles files, you'll need to disable the creation of `swap`\nand `backup` files.\n\nTo do it, just put these three lines in your `.vimrc`:\n\n``` vim\n\" for coffee-toaster\nset nobackup       \" no backup files\nset nowritebackup  \" only in case you don't want a backup file while editing\nset noswapfile     \" no swap files\n```\n\nThis will guarantee the expected behavior of Toaster and make it play nicely\nwith VIM without any conflicts. For more info about why it's really needed,\nplease check this [thread](https://github.com/serpentem/coffee-toaster/issues/47).\n\n<a name=\"config-file\" />\n# Config file\n----\n\nThe `toaster.coffee` is the config file from where Toaster seek all information\nabout your app, vendores, build options and so on. There are two main usages\nyou can make of this file:\n\n* **1) Single source folder:**\n\nWhen all your code is bellow one single source folder your set up the main\n`toast` call passing the folder path directly.\n\n````coffeescript\n# src folder\ntoast 'src'\n\n  # excluded items (will be used as a regex)\n  exclude: ['folder/to/exclude', 'another/folder', '.DS_Store' ]\n\n  # packaging vendors among the code\n  vendors: ['vendors/x.js', 'vendors/y.js' ]\n\n  # gereral options (all is optional, default values listed)\n  bare: false\n  packaging: true\n  expose: '' # can be 'window', 'exports' etc\n  minify: false\n\n  # httpfolder (optional), release and debug (both required)\n  httpfolder: 'js'\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\n* **2) Multi source folder:**\n\nWhen your code is splitted between two or more source folders you can set the\nmain `toast` call without any path, and inform your folders right bellow it.\n\n````coffeescript\ntoast\n  folders:\n    'src/my/app/folder': 'app'\n    'src/my/lib/folder': 'lib'\n    # ...\n````\n\n<a name=\"config-options\" />\n## Config options\n\nLet's take a closer look at all properties you can have in your `toaster.coffee`\nfile and what each one of these is responsible of.\n\n<a name=\"config-options-folders\" />\n### `folders`\n\n> Mandatory: `no` <BR/>\n> Type: `Object` <BR/>\n> Default: `null` <BR/>\n\nIn case you have more than one `src` folder, you can set an `object` of\n`objects` containing setup information about all your source folders, in the\nformat `'folderpath':'folderalias'`.\n\nThe **hash-key** is the `path` of your folder, and the **hash-value** is the\n`alias` you want to prepend to all files under that.\n\n*Pay attention to this specially when using Toaster with the '-j'\n[option](#advanced-options).*\n\nTo give an example, the equivalent use of this config:\n\n````coffeescript\ntoast 'src'\n  # ...\n````\n\nWould be:\n\n````coffeescript\ntoast\n  folders:\n    'src': ''\n````\n\n**NOTE: Aliases take effect only if the [`packaging`](#config-options-packaging)\nis set to `true`.**\n\nAliases lets you set a virtual top namespace to your source folder, if you have\n`src/app/app.coffee` which is a `class App`, you'll usually access it using\n`new app.App`.\n\nNow if you set an alias like `'src':'awesome'` the whole structure under your\nsource folder will be addressed under that `awesome` namespace and you need\nto prepend it when accessing your classes, i.e. `new awesome.app.App`.\n\n<a name=\"config-options-exclude\" />\n### `exclude`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nLet's you excplicity exclude some folder, file or file type from Toaster\nsearch/process mechanism. The string you use here will effectively turn into\na RegExp like that:\n\n````coffeescript\nnew RegExp '.DS_store'\nnew RegExp '.swp'\nnew RegExp 'my/folder/to/be/excluded'\n````\n\n<a name=\"config-options-vendors\" />\n### `vendors`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nYou can define vendors such as:\n\n````coffeescript\n  vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely\njavascript, preferably minified ones -- Toaster will not compile or minify them,\nonly concatenate everything.\n\n<a name=\"config-options-bare\" />\n### `bare`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nIf `true`, compile your CoffeeScript files without the top-level function safety\nwrapper:\n\n````javascript\n  (function() {\n    console.log('My peace of code!');\n  }).call(this);\n````\n\nSo you will end up with just `your peace of code`:\n\n````javascript\n  console.log('My peace of code!');\n````\n\n<a name=\"config-options-packaging\" />\n### `packaging`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nWhen packaging is `true`, Toaster will rewrite **all** your `class`\ndeclarations.\n\nIf you have a file in `src/app/models/user.coffee` with this contents:\n\n````coffeescript\nclass User\n````\n\nToaster will rewrite your declaration prepending a `namespace` to it, based on\nthe folder the class is located, resulting -- in this example -- into this:\n\n````coffeescript\nclass app.models.User\n````\n\nThis rewriting process is **saved** directly into your `file`. In case you move\nthis class to another folder, the prepended `namespace` will be rewrited again,\nalways following your folder structure.\n\nIn other words, your don't need to worry about hardcoded namespaces in your\nfiles, because Toaster will handle all the dirty for you.\n\n<a name=\"config-options-expose\" />\n### `expose`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nIf informed, list all you packages of classes in the given scope. If you use\n`window` as your expose scope, your classes will be available also in the window\nobject -- or whatever scope you inform, suck as `exports` if you're building\nfor NodeJS.\n\nIn the end you'll be able to access your files throught this scope where your\nclasses was exposed.\n\n````coffeescript\nnew window.app.models.User\nnew exports.app.models.User\n````\n\n<a name=\"config-options-minify\" />\n### `minify`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `true` <BR/>\n\nIf `true`, minify your release file using UglifyJS.\n\nDebug files are **never** minified.\n\n<a name=\"config-options-httpfolder\" />\n### `httpfolder`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `''` <BR/>\n\nThe folder path to reach your debug file through http, in case it is not inside\nyour root directory. Imagine that the `www` is your root folder and when you\naccess your webiste the `/` referes to this folder.\n\nInside this `www` folder you have another folder called `js` where you put all\nyour compiled js, resulting from a config like this:\n\n````coffeescript\ntoast 'src'\n  # ...\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\nFollowing this case you'd just need to inform `js` as your http folder. Toaster\nwill use it to reach your **debug** files. For that, it will writes the\ndeclarations inside the `debug boot loader` following this location in order to\nimport your scripts properly when in debug mode, prepending your `httpfolder` to\nall file paths:\n\n````javascript\n// app-debug.js\ndocument.write('<scri'+'pt src=\"js/toaster/app.js\"></scr'+'ipt>')\n````\n\nWithout knowing that your JS files is under the `js` folder this path would be\nbroken.\n\n**NOTE: Your release file will not be affected by this property.**\n\n<a name=\"config-options-release\" />\n### `release`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **release** file.\n\n<a name=\"config-options-debug\" />\n### `debug`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **debug** file.\n\n<a name=\"examples\"/>\n# Examples\n----\n\nYou'll certainly find some useful resources in the examples provided.\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config\noptions, always looking for the differences in your javascript release file.\n\n> [Single folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/single-folder)<BR>\n> [Multi folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/multi-folder)<BR>\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n<a name=\"api\"/>\n# API\n----\n\nYou can use Toaster through API as well, in case you want to power up your\ncompiling tasks or even build some framework/lib on top of it.\n\nSee the API example for further information.\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)\n\n````coffeescript\n  Toaster = (require 'coffee-toaster').Toaster\n  toasting = new Toaster [basedir], [options], [skip_initial_build]\n  toasting.build [header_code_injection], [footer_code_injection]\n````\n\n<a name=\"contributing\"/>\n# Contributing\n----\n\n<a name=\"setup\"/>\n## Setting everything up\n\nEnvironment setup is simple achieved by:\n\n````bash\n  git clone git://github.com/serpentem/coffee-toaster.git\n  cd coffee-toaster && git submodule update --init\n  npm link\n````\n\n<a name=\"building\"/>\n## Building\n\nBuilds the release file inside the `lib` folder.\n\n````bash\n  make build\n````\n\n<a name=\"watching\"/>\n## Watching'n'Compiling\n\nStarts watching/compiling using a previuos version of the CoffeeToaster itself.\n\n````bash\n  make watch\n````\n\n<a name=\"testing\"/>\n## Testing\n\nRun all tests.\n\n````bash\n  make test\n````\n\n<a name=\"changelog\"/>\n# Changelog\n----\n\n> [CHANGELOG.md](https://github.com/serpentem/coffee-toaster/tree/master/build/CHANGELOG.md)","readmeFilename":"README.md","_id":"coffee-toaster@0.6.12","dist":{"shasum":"a48792596612f2a311221cdfa499dde4d174cc93","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.6.12.tgz","integrity":"sha512-bjZaWgr10cwvlNjKxRAOPVn0QA1LvwTzQcWvBw9EVrlv4X/PBewofFi3A5LBp95JBREDDGBLpDvHdKkhAuDqvw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDxcQoQkGtiUFdFoQS/fa2hoHSDBtxfbzHrqEfnF5fTgIgV9R0qdMbUWRZbkAA8grCS2RXfjoVVYLiXZZaKR0LPdk="}]},"_from":".","_npmVersion":"1.2.15","_npmUser":{"name":"arboleya","email":"anderson@arboleya.me"},"maintainers":[{"name":"arboleya","email":"anderson@arboleya.me"}]},"0.6.13":{"name":"coffee-toaster","version":"0.6.13","author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"description":"Minimalist build system for CoffeeScript.","keywords":["coffeescript","build","namespace","tool"],"main":"./lib/toaster","directories":{"lib":"./lib/"},"scripts":{"test":"make test"},"repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"},"bin":{"toaster":"./bin/toaster"},"engines":{"node":"0.10.x"},"dependencies":{"fs-util":"0.3.7","coffee-script":"1.3.x","uglify-js":"1.1.x","optimist":"0.2.x","colors":"0.5.x","vows":"0.7.x","growl":"1.2.x"},"optionalDependencies":{"growl":"1.2.x"},"readme":"![Coffee Toaster](http://github.com/serpentem/coffee-toaster/blob/0.5.0/images/toaster.png?raw=true)\n\nMinimalist build system for CoffeeScript.\n> Version 0.6.13\n\n[![Build Status](https://secure.travis-ci.org/serpentem/coffee-toaster.png)](http://travis-ci.org/serpentem/coffee-toaster)\n\n# Features\n\n* Inheritance support across multiples files for the lazy\n* Vendors management\n* Automagically packaging system with namespaces\n* Micro build routines\n* Exports aliases\n* Broken and circular-loop dependencies validation\n* Live syntax-check\n* Growl support\n* Debug Mode\n* Minify support\n* Scaffolding routines\n\n# Issues\nDo not hesitate to open a feature request or a bug report.\n> https://github.com/serpentem/coffee-toaster/issues\n\n# Mailing List\nA place to talk about it, ask anything, get in touch. Luckily you'll be answered\nsooner than later.\n\n> https://groups.google.com/group/coffee-toaster\n\n*NOTE: The list is `active` and `maintained`, though the low activity. So don't\nbe shy.*\n\n# About\n\nMinimalist build system for CoffeeScript, made for those who dare to use class\ndefinitions in CoffeeScript while being able to easily inherit from external\nfiles. The system is powered with import directives that uses wildcards\nfacilities, exposed scopes, excluded files filter options and a packaging system\nthat can inject your folders-as-namespaces to all your classes based on where\nthey are under your src folder.\n\nCoffeeToaster was created initially as a base for creating the\n[Theoricus Framework](https://github.com/serpentem/theoricus).\n\n\n# Docs\n\n - [Installing](#installing)\n - [Scaffolding](#scaffolding)\n   - [Initializing new app](#initializing-new-app)\n   - [Initializing config file](#initializing-config-file)\n - [Usage](#usage)\n   - [Import directive](#import-directive)\n   - [Compile](#compile) `-c`\n   - [Watch](#watch) `-w`\n   - [Debug](#debug) `-cd`, `-wd`\n   - [Autorun](#autorun) `-a`, `-ad`\n     - [Representative structure](#representative-structure)\n   - [HTML inclusion](#html-inclusion)\n   - [Advanced options](#advanced-options)\n   - [Conclusion](#conclusion)\n     - [Note for VIM Users](#vim-users)\n - [Config file](#config-file)\n   - [Config options](#config-options)\n     - [`folders`](#config-options-folders)\n     - [`exclude`](#config-options-exclude)\n     - [`vendors`](#config-options-vendors)\n     - [`bare`](#config-options-bare)\n     - [`packaging`](#config-options-packaging)\n     - [`expose`](#config-options-expose)\n     - [`minify`](#config-options-minify)\n     - [`httpfolder`](#config-options-httpfolder)\n     - [`release`](#config-options-release)\n     - [`debug`](#config-options-debug)\n - [Examples](#examples)\n - [API](#api)\n - [Contributing](#contributing)\n   - [Setup](#setup)\n   - [Building](#building)\n   - [Watching](#watching)\n   - [Testing](#testing)\n - [CHANGELOG](#changelog)\n\n<a name=\"installing\" />\n# Installing\n----\n\n`npm install -g coffee-toaster`\n\n<a name=\"scaffolding\" />\n# Scaffolding\n----\n\nThere are two simple `scaffolding` routines bundled with CoffeeToaster for\ncreating new projects structure from the scratch and also for creating the\nconfig `toaster.coffee` file for existent projects.\n\n<a name=\"initializing-new-app\" />\n## Initializing new app\n\nCoffeeToaster suggests a very simple structure for initial projects, you can\ncustomize it as you like.\n\n`toaster -n mynewapp`\n\nYou will be asked for some things:\n\n> source folder\n\nRelative folderpath to your source folder, default is `src`.\n\n> release file\n\nRelative filepath to your release file, default is `www/js/app.js`\n\n> http folder\n\nThe folderpath to reach your debug file through http, default is an `empty\nstring`. Imagine that the `www` is your root web folder, and inside of it you\nhave a `js` dir where you put your debug file. In this case you'd just need to\ninform 'js' as the http folder. It tells toaster *how to reach your debug js\nfile* starting from the `/` on your server.\n\nThis property is only for **debug**, your *release* file will not be affected.\n\n### Result\n\nConsidering all the default values, you'll end up with a structure as such:\n\n````\nmyawsomeapp/\n├── src\n├── vendors\n├── www\n    └── js\n└── toaster.coffee\n\n4 directories, 1 file\n````\n\n<a name=\"initializing-config-file\" />\n## Initializing config file\n\nYou can also initialize an existing project with a config `toaster.coffee` file\nsuch as:\n\n````\ncd existing-project\ntoaster -i\n````\n\nSome of the same information (`src`, `release` and `httpfolder`) will be\nrequired, answer everything according to your project's structure and a config\n`toaster.coffee` file will be created inside of it.\n\n<a name=\"usage\" />\n# Usage\n----\n\nToaster help screen.\n\n````\nCoffeeToaster\n  Minimalist build system for CoffeeScript\n\nUsage:\n  toaster [options] [path]\n\nExamples:\n  toaster -n myawsomeapp   (required)\n  toaster -i [myawsomeapp] (optional)\n  toaster -w [myawsomeapp] (optional)\n  toaster -wd [myawsomeapp] (optional)\n\nOptions:\n  -n, --new          Scaffold a very basic new App                   \n  -i, --init         Create a config (toaster.coffee) file           \n  -w, --watch        Start watching/compiling your project           \n  -c, --compile      Compile the entire project, without watching it.\n  -d, --debug        Debug mode (compile js files individually)      \n  -a, --autorun      Execute the script in node.js after compilation\n  -j, --config       Config file formatted as a json-string.           [string]\n  -f, --config-file  Path to a different config file.                  [string]\n  -v, --version                                                      \n  -h, --help \n````\n\n<a name=\"import-directive\"/>\n## Import directive\n\nThe import directive is known by:\n\n````coffeescript\n#<< app/views/user_view\n#<< app/utils/*\n````\n\nBy putting `#<< app/views/user_view` in your CoffeeScript file, you're telling\nCoffeeToaster that there's a dependency. It's like a `require`, except that you\ncan't save a reference of the imported file to a variable. Instead, this\ndirectives shoud be put in the first lines of your files.\n\nThis is how you organically tells Toaster about the specific ordering\noptions to be considered when all of your files get merged. Files imported this\nway will only be gracefully sorted out in your final output javascript so\nevery file is always **defined** before it's **needed**.\n\nWild cards `#<< app/utils/*` are also accepted as a handy option.\n\nIf you're writing a `class B` that will extends the `class A`, you shoud first\nimport the `class A` so it will be available for being extended by `class B`.\n\n* src/app/a\n\n````coffeescript\nclass A\n  constructor:->\n    console.log 'Will be used as base class.'\n````\n\n* src/app/b\n\n````coffeescript\n#<< app/a\nclass B extends A\n  constructor:->\n    console.log 'Using class A as base class'\n````\n\nThink of it as a glue that you use to chain all of your files appropriately.\n\n<a name=\"compiling\"/>\n## Compile\n\nCompile your project according your [config file](#config-file).\n\n````bash\ncd existing-project\ntoaster -c\n````\n\n<a name=\"watching\"/>\n## Watch\n\nStarts Toaster in watching'n'compiling mode:\n\n````bash\ncd existing-project\ntoaster -w\n````\n\nAny changes you make to your `src` files will trigger the `compile` action.\n\n<a name=\"debugging\"/>\n## Debug\n\nIn debug mode option `-d` all files will be compiled individually inside a\nfolder called `toaster` in the same directory you've pointed your debug file,\naiming to ease the debugging process.\n\n````bash\ntoaster -wd\ntoaster -cd\n````\n\nFor example, if you have `release/app-debug.js`, a folder will be created at\n`release/toaster` and all your CoffeeScript files will be compiled to Javascript\nwithin.\n\n<a name=\"representative-structure\"/>\n### Representative Structure\n\nBellow is a representative directory structure after compiling in debug mode.\n\n````\n/usage\n|-- src\n|   `-- app\n|       |-- controllers\n|       |   `-- users_controller.coffee\n|       |-- models\n|       |   `-- user_model.coffee\n|       `-- views\n|           `-- user_view.coffee\n|-- www\n|   `-- js\n|       |-- app-debug.js\n|       |-- app.js\n|       `-- toaster\n|           `-- app\n|               |-- controllers\n|               |   `-- users_controller.js\n|               |-- models\n|               |   `-- user_model.js\n|               `-- views\n|                   `-- user_view.js\n`-- toaster.coffee\n````\n\nEvery CoffeeScript file is compiled individually inside the `www/js/toaster`\ndirectory, so you can debug it sanely.\n\nThe debug file `www/js/app-debug.js` is the boot-loader responsible for loading\nall these individual compiled JS files into the right order.\n\n<a name=\"autorun\"/>\n## Autorun\n\nIn autorun mode option `-a` the script is recompiled after each file change and \nit is executed in a node.js child process. It is possible to use autorun in \ncombination with debug option `-d` to set the script breakpoint on the first line\n\n````bash\ntoaster -a\ntoaster -da\n````\nof if you like the `watch` option\n\n````bash\ntoaster -wa\ntoaster -wda\n````\n\nto better debug your application via node.js you can use some tools like \n[node-inspector](https://github.com/dannycoates/node-inspector)\n\nIt is also possible to pass arguments to the compiled script\n\n````bash\ntoaster -wa argument argument2 argument3\ntoaster -wda argument argument2 argument3\n````\n\nPlease note that the `-a` arguments has to be the last of the group in order to \nmake it work: `toaster -ad argument` will not behave as expected and\n`toaster -da argument` should be used instead\n\n<a name=\"html-inclusion\"/>\n## HTML inclusion\n\nSo in your `.html` you'll have two options:\n\n> 1) Include your release file.\n\n````html\n<script src=\"js/app.js\"></script>\n````\n \n> 2) Include the toaster boot-loader (your debug mode).\n\n````html\n<script src=\"js/app-debug.js\"></script>\n````\n\n<a name=\"advanced-options\"/>\n## Advanced options\n\nYou can pass your own config file for toaster instead of the default one\n`toaster.coffee`, with the `-f` or `--config-file` option:\n\n````bash\ntoaster -wdf config/mycustomconfig.coffee\n````\n\n*NOTE: It's important that you always call this from your project base folder,\notherwise the paths of your config can get messy. Remembers also that the paths\nin your config file shoud ideally be always relative to your project base\nfolder.*\n\nAlternativelly, you can even pass the whole configuration as a JSON string, with\nthe `-j` or `--config` option:\n\n````bash\ntoaster -wdj '{\"folders\":{\"src\":\"\"},\"expose\":\"window\",\"release\":\"app.js\",\"debug\":\"app-debug.js\"}'\n````\n\n*NOTE: The same above.*\n\n<a name=\"conclusion\"/>\n## Conlusion\n\nEvery time something changes, CoffeeToaster recompiles all of your application\nby:\n\n* collecting all .coffee files and processing everything, adding namespace's\ndeclarations to class definitions based on the folder they are located\n* reordering everything, always defining files and classes before they're needed\n* merge all yours vendors in the given order\n* declare root namespaces\n* merge everything\n\n<a name=\"vim-users\"/>\n### VIM Users\n\nDue to the way VIM handles files, you'll need to disable the creation of `swap`\nand `backup` files.\n\nTo do it, just put these three lines in your `.vimrc`:\n\n``` vim\n\" for coffee-toaster\nset nobackup       \" no backup files\nset nowritebackup  \" only in case you don't want a backup file while editing\nset noswapfile     \" no swap files\n```\n\nThis will guarantee the expected behavior of Toaster and make it play nicely\nwith VIM without any conflicts. For more info about why it's really needed,\nplease check this [thread](https://github.com/serpentem/coffee-toaster/issues/47).\n\n<a name=\"config-file\" />\n# Config file\n----\n\nThe `toaster.coffee` is the config file from where Toaster seek all information\nabout your app, vendores, build options and so on. There are two main usages\nyou can make of this file:\n\n* **1) Single source folder:**\n\nWhen all your code is bellow one single source folder your set up the main\n`toast` call passing the folder path directly.\n\n````coffeescript\n# src folder\ntoast 'src'\n\n  # excluded items (will be used as a regex)\n  exclude: ['folder/to/exclude', 'another/folder', '.DS_Store' ]\n\n  # packaging vendors among the code\n  vendors: ['vendors/x.js', 'vendors/y.js' ]\n\n  # gereral options (all is optional, default values listed)\n  bare: false\n  packaging: true\n  expose: '' # can be 'window', 'exports' etc\n  minify: false\n\n  # httpfolder (optional), release and debug (both required)\n  httpfolder: 'js'\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\n* **2) Multi source folder:**\n\nWhen your code is splitted between two or more source folders you can set the\nmain `toast` call without any path, and inform your folders right bellow it.\n\n````coffeescript\ntoast\n  folders:\n    'src/my/app/folder': 'app'\n    'src/my/lib/folder': 'lib'\n    # ...\n````\n\n<a name=\"config-options\" />\n## Config options\n\nLet's take a closer look at all properties you can have in your `toaster.coffee`\nfile and what each one of these is responsible of.\n\n<a name=\"config-options-folders\" />\n### `folders`\n\n> Mandatory: `no` <BR/>\n> Type: `Object` <BR/>\n> Default: `null` <BR/>\n\nIn case you have more than one `src` folder, you can set an `object` of\n`objects` containing setup information about all your source folders, in the\nformat `'folderpath':'folderalias'`.\n\nThe **hash-key** is the `path` of your folder, and the **hash-value** is the\n`alias` you want to prepend to all files under that.\n\n*Pay attention to this specially when using Toaster with the '-j'\n[option](#advanced-options).*\n\nTo give an example, the equivalent use of this config:\n\n````coffeescript\ntoast 'src'\n  # ...\n````\n\nWould be:\n\n````coffeescript\ntoast\n  folders:\n    'src': ''\n````\n\n**NOTE: Aliases take effect only if the [`packaging`](#config-options-packaging)\nis set to `true`.**\n\nAliases lets you set a virtual top namespace to your source folder, if you have\n`src/app/app.coffee` which is a `class App`, you'll usually access it using\n`new app.App`.\n\nNow if you set an alias like `'src':'awesome'` the whole structure under your\nsource folder will be addressed under that `awesome` namespace and you need\nto prepend it when accessing your classes, i.e. `new awesome.app.App`.\n\n<a name=\"config-options-exclude\" />\n### `exclude`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nLet's you excplicity exclude some folder, file or file type from Toaster\nsearch/process mechanism. The string you use here will effectively turn into\na RegExp like that:\n\n````coffeescript\nnew RegExp '.DS_store'\nnew RegExp '.swp'\nnew RegExp 'my/folder/to/be/excluded'\n````\n\n<a name=\"config-options-vendors\" />\n### `vendors`\n\n> Mandatory: `no` <BR/>\n> Type: `Array` <BR/>\n> Default: `[]` <BR/>\n\nYou can define vendors such as:\n\n````coffeescript\n  vendors: ['vendors/x.js', 'vendors/y.js', ... ]\n````\n\nIt's an ordered array of all your vendor's paths. These files must be purely\njavascript, preferably minified ones -- Toaster will not compile or minify them,\nonly concatenate everything.\n\n<a name=\"config-options-bare\" />\n### `bare`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nIf `true`, compile your CoffeeScript files without the top-level function safety\nwrapper:\n\n````javascript\n  (function() {\n    console.log('My peace of code!');\n  }).call(this);\n````\n\nSo you will end up with just `your peace of code`:\n\n````javascript\n  console.log('My peace of code!');\n````\n\n<a name=\"config-options-packaging\" />\n### `packaging`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `false` <BR/>\n\nWhen packaging is `true`, Toaster will rewrite **all** your `class`\ndeclarations.\n\nIf you have a file in `src/app/models/user.coffee` with this contents:\n\n````coffeescript\nclass User\n````\n\nToaster will rewrite your declaration prepending a `namespace` to it, based on\nthe folder the class is located, resulting -- in this example -- into this:\n\n````coffeescript\nclass app.models.User\n````\n\nThis rewriting process is **saved** directly into your `file`. In case you move\nthis class to another folder, the prepended `namespace` will be rewrited again,\nalways following your folder structure.\n\nIn other words, your don't need to worry about hardcoded namespaces in your\nfiles, because Toaster will handle all the dirty for you.\n\n<a name=\"config-options-expose\" />\n### `expose`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nIf informed, list all you packages of classes in the given scope. If you use\n`window` as your expose scope, your classes will be available also in the window\nobject -- or whatever scope you inform, suck as `exports` if you're building\nfor NodeJS.\n\nIn the end you'll be able to access your files throught this scope where your\nclasses was exposed.\n\n````coffeescript\nnew window.app.models.User\nnew exports.app.models.User\n````\n\n<a name=\"config-options-minify\" />\n### `minify`\n\n> Mandatory: `no` <BR/>\n> Type: `Boolean` <BR/>\n> Default: `true` <BR/>\n\nIf `true`, minify your release file using UglifyJS.\n\nDebug files are **never** minified.\n\n<a name=\"config-options-httpfolder\" />\n### `httpfolder`\n\n> Mandatory: `no` <BR/>\n> Type: `String` <BR/>\n> Default: `''` <BR/>\n\nThe folder path to reach your debug file through http, in case it is not inside\nyour root directory. Imagine that the `www` is your root folder and when you\naccess your webiste the `/` referes to this folder.\n\nInside this `www` folder you have another folder called `js` where you put all\nyour compiled js, resulting from a config like this:\n\n````coffeescript\ntoast 'src'\n  # ...\n  release: 'www/js/app.js'\n  debug: 'www/js/app-debug.js'\n````\n\nFollowing this case you'd just need to inform `js` as your http folder. Toaster\nwill use it to reach your **debug** files. For that, it will writes the\ndeclarations inside the `debug boot loader` following this location in order to\nimport your scripts properly when in debug mode, prepending your `httpfolder` to\nall file paths:\n\n````javascript\n// app-debug.js\ndocument.write('<scri'+'pt src=\"js/toaster/app.js\"></scr'+'ipt>')\n````\n\nWithout knowing that your JS files is under the `js` folder this path would be\nbroken.\n\n**NOTE: Your release file will not be affected by this property.**\n\n<a name=\"config-options-release\" />\n### `release`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **release** file.\n\n<a name=\"config-options-debug\" />\n### `debug`\n\n> Mandatory: `yes` <BR/>\n> Type: `String` <BR/>\n> Default: `null` <BR/>\n\nThe file path to your **debug** file.\n\n<a name=\"examples\"/>\n# Examples\n----\n\nYou'll certainly find some useful resources in the examples provided.\nExamine it and you'll understand how things works more instinctively.\n\nInstall coffee-toaster, clone the usage example and try different config\noptions, always looking for the differences in your javascript release file.\n\n> [Single folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/single-folder)<BR>\n> [Multi folder example](https://github.com/serpentem/coffee-toaster/tree/master/examples/multi-folder)<BR>\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)<BR>\n\n<a name=\"api\"/>\n# API\n----\n\nYou can use Toaster through API as well, in case you want to power up your\ncompiling tasks or even build some framework/lib on top of it.\n\nSee the API example for further information.\n> [API example](https://github.com/serpentem/coffee-toaster/tree/master/examples/introspection)\n\n````coffeescript\n  Toaster = (require 'coffee-toaster').Toaster\n  toasting = new Toaster [basedir], [options], [skip_initial_build]\n  toasting.build [header_code_injection], [footer_code_injection]\n````\n\n<a name=\"contributing\"/>\n# Contributing\n----\n\n<a name=\"setup\"/>\n## Setting everything up\n\nEnvironment setup is simple achieved by:\n\n````bash\n  git clone git://github.com/serpentem/coffee-toaster.git\n  cd coffee-toaster && git submodule update --init\n  npm link\n````\n\n<a name=\"building\"/>\n## Building\n\nBuilds the release file inside the `lib` folder.\n\n````bash\n  make build\n````\n\n<a name=\"watching\"/>\n## Watching'n'Compiling\n\nStarts watching/compiling using a previuos version of the CoffeeToaster itself.\n\n````bash\n  make watch\n````\n\n<a name=\"testing\"/>\n## Testing\n\nRun all tests.\n\n````bash\n  make test\n````\n\n<a name=\"changelog\"/>\n# Changelog\n----\n\n> [CHANGELOG.md](https://github.com/serpentem/coffee-toaster/tree/master/build/CHANGELOG.md)","readmeFilename":"README.md","_id":"coffee-toaster@0.6.13","dist":{"shasum":"46506bd3195b75b665033aa1b9eac6ead252cd1d","tarball":"https://registry.npmjs.org/coffee-toaster/-/coffee-toaster-0.6.13.tgz","integrity":"sha512-I0QDcm1azY87QQ+FCXeddhS2/AIGA+Rs4Z+oCS+7Ln8/qBezHgIrT9+bVK1RCnsrdxR+bzCKGFu23NSYM3/gxw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjFN1/sb0bFI+shxLIbeVU+JVDupPmhDOwgceg5VvpiQIhAJrT2dYcksAcC2sHEatNxVp33rQKSG3MT1I9YNWtW5gA"}]},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"arboleya","email":"anderson@arboleya.me"},"maintainers":[{"name":"arboleya","email":"anderson@arboleya.me"}]}},"maintainers":[{"name":"arboleya","email":"anderson@arboleya.me"}],"time":{"modified":"2022-06-13T06:27:57.844Z","created":"2011-09-14T16:36:14.887Z","0.1.0":"2011-09-14T16:36:17.362Z","0.1.2":"2011-09-18T00:41:43.098Z","0.2.0":"2011-09-18T22:29:09.444Z","0.2.1":"2011-09-22T14:13:09.285Z","0.2.2":"2011-10-02T17:46:57.345Z","0.3.0":"2011-10-16T20:30:48.411Z","0.3.5":"2011-10-24T03:20:49.533Z","0.3.6":"2011-10-26T01:17:22.835Z","0.3.7":"2011-10-29T12:22:39.300Z","0.3.8":"2011-10-29T12:25:59.975Z","0.3.9":"2012-04-10T12:23:22.928Z","0.5.0":"2012-04-12T18:02:29.586Z","0.5.5":"2012-04-19T14:48:08.325Z","0.6.0":"2012-06-19T19:19:57.494Z","0.6.1":"2012-06-19T19:23:16.507Z","0.6.2":"2012-06-25T19:12:34.485Z","0.6.3":"2012-07-02T19:34:15.453Z","0.6.4":"2012-11-18T20:29:16.461Z","0.6.5":"2012-11-27T12:38:38.772Z","0.6.6":"2012-12-15T21:45:05.767Z","0.6.7":"2012-12-20T19:32:10.464Z","0.6.8":"2012-12-22T15:19:12.493Z","0.6.9":"2012-12-22T21:31:29.763Z","0.6.10":"2012-12-24T22:27:46.475Z","0.6.11":"2012-12-30T01:56:51.065Z","0.6.12":"2013-03-26T17:11:16.317Z","0.6.13":"2013-04-01T17:33:19.246Z"},"author":{"name":"Anderson Arboleya","email":"anderson@arboleya.me"},"repository":{"type":"git","url":"http://github.com/serpentem/coffee-toaster"}}