yui3boiler
simple nodejs utility to initialize module source directory structure and templates for yui3 modules
All code is licensed under both the MIT and BSD licenses, presented in LICENSE.
Installing
Use npm:
npm install yui3boiler
Usage
Use in a node application:
var Y = require('yui3boiler'),
b;
b = new Y.BOILER.Base({
attrs: ['foo', 'bar', 'baz'],
classname: 'Foo',
name: 'foo',
requires: 'array-extras,node,base',
skinnable: ['ryan', 'sam'],
srcdir: '/Users/Ryan/repos/github/ryanvanoss/yui3/src/'
});
b.boil();
Creates the following in /Users/Ryan/repos/github/ryanvanoss/yui3/src/
, assuming
/Users/Ryan/repos/github/ryanvanoss/yui3/src/
exists, and
/Users/Ryan/repos/github/ryanvanoss/yui3/src/foo
does not exist:
src
foo
assets
foo-core.css
skins
ryan
foo-skin.css
sam
foo-skin.css
build.properties
build.xml
HISTORY.md
js
foo.js
meta
foo.json
README.md
tests
yuitest
foo-tests.js
foo.html
Use from the command line:
The yui3boiler config options aren't really conducive to command line usage. If you want to use it outside of a node application, just make sure you've installed it, then you can simply create a js file with the same code as above and run:
node myfile.js
Building or Modifying
Get the source:
git clone git@github.com:ryanvanoss/node-yui3boiler.git
yui builder project as a sibling to your source directory:
Clone thegit clone git://github.com/yui/builder.git
Alternatively, you can download Builder as a zip directly. Just make sure you unzip it to the correct location.
Install ant 1.8+.
Download ant from the ant project download page, and make sure that you add it to your path.
cd to the root of the project:
cd /path/to/yui3boiler/
Install the dev dependencies (see package.json for full list):
npm install buffertools
npm install handlebars
npm install yui
npm install yuidocjs
See the npm FAQ if you're confused on why these aren't installed with the global (-g) flag.
Run the ant build.
If you want to change the default properties, make a copy of build-DEFAULTS.properties and name it build-OVERRIDES.properties. Edit any properties you'd like to change, and comment out, or leave unchanged, any properties that you would like to inherit the defaults. The build file includes both property files automatically. It includes build-OVERRIDES.properties first. Since ant properties are immutable, any properties that you set in build-OVERRIDES.properties will take precedence over the properties from build-DEFAULTS.properties. By default, all built files will be output to the out directory in the base directory of the project. You can override this location by setting the appropriate properties as explained above. The default target is build.
ant
Build Targets
build: Builds all components of the project. Calls clean, mods, tpls, tests, cleanup.
ant build
clean: Removes any temporary directories created by the build, as well as the dir.out directory.
ant clean
cleanup: Removes any temporary directories created by the build. Does not remove the dir.out directory.
ant cleanup
docs: Builds all documentation. Currently the same as yuidoc, but available as a general doc-building target in the case that more, non-yuidoc, documentation is necessary in the future.
ant docs
mods: Builds all js modules.
ant mods
runtests: Creates an npm package, installs it locally (does not push it to npm), then builds all tests and runs them with the new package.
ant runtests
tests: Builds all tests.
ant tests
tpls: Builds (i.e. copies) all raw templates and creates a single compiled Handlebars js template file, using the filenames as the template names.
ant tpls
yuidocs: Builds API documentation from js source using yuidocjs.
ant yuidocs
Remember that you can call multiple targets at once in ant, so the following also works:
ant clean runtests docs
TODOS
- Fix doc output so that BOILER.Base correctly shows everything it inherits.
- Add documentation for ATTRS in each class.
- Generate module data in yui3boiler.js.
- Update tests to test for the appropriate message when intentionally erroring.
- Update tests to run a linter on the generated source files to make sure that they are valid js.
- Consider adding ability to generate full js files by consuming object literal containing API outline. E.g.
{
methods: {
instance: {
foo: {
arguments: {
'bar': {
description: 'Lorem ipsum...',
optional: true,
type: 'string'
}
},
description: 'Lorem ipsum...'
}
},
static: {
foo: {
arguments: {
'bar': {
description: 'Lorem ipsum...',
type: 'string'
}
}
}
}
}
}
- Setup tests on travis-ci.
- Remove home grown fs operations (mkdirpSync, rimrafSync).
- Remove all *Sync calls... sigh
- Create ant deploy target to pull files from git, runtests, upload zip to git and push to npm.
- Write more tests.
- Determine whether or not to create all files listed in
this.get('cssfiles')
andthis.get('jsfiles')
. - DRY with regard to templates build code. Currently it's repeated in the global build and build-DEFAULTS.properties files with only slight modifications.
- Build the README code examples, and add tests for them so that they're always up to date (and valid...).