# CanJS Generator       ![ScreenShot](https://raw.github.com/smarkle/generator-can/master/canjsLogo.jpeg)

Maintainer: [Scott Markley](https://github.com/smarkle)

Based on [Generator-Angular](https://github.com/yeoman/generator-angular)

## Usage

First make a new directory, and `cd` into it:
```
mkdir my-new-project && cd $_
```

Then install `generator-can` and `generator-karma`:
```
npm install generator-can generator-karma
```

Run `yo can`, optionally passing an app name:
```
yo can [app-name]
```

Finally, install npm and bower dependencies:
```
npm install && bower install --dev
```

## Generators

Available generators:

* [can](#app) (aka [can:app](#app))
* [can:model](#directive)
* [can:view](#view)
* [can:controller](#controller)
* [can:route](#route)


### App
Sets up a new CanJS app, generating all the boilerplate you need to get started. The app generator also optionally installs Twitter Bootstrap as well as testing suite Qunit.

Example:
```bash
yo can
```

### Route
Generates a controller and view, and configures a route in `app/scripts/app.js` connecting them.

### Controller
Generates a controller in `app/scripts/controllers`.

Example:
```bash
yo can:controller user
```

Produces `app/scripts/controllers/user.js`:
```javascript
can.module('myMod').controller('UserCtrl', function ($scope) {
  // ...
});
```

### View
Generates an HTML view file in `app/views`.

Example:
```bash
yo can:view user
```

Produces `app/views/user.html`:
```html
<p>This is the user view</p>
```

#### Options
There are options for each of the methods for registering services. For more on using these services, see the [CanJs AMD documentation](http://canjs.us/#using_canjs-amd).

## Options
In general, these options can be applied to any generator, though they only affect generators that produce scripts.

### CoffeeScript
For generators that output scripts, the `--coffee` option will output CoffeeScript instead of JavaScript.

For example:
```bash
yo can:controller user --coffee
```

Produces `app/scripts/controller/user.coffee`:
```coffeescript
can.module('myMod')
  .controller 'UserCtrl', ($scope) ->
```

A project can mix CoffeScript and JavaScript files.


## Bower Components

The following packages are always installed by the [app](#app) generator:

* Can
* can-mocks
* can-scenario


The following additional modules are available as components on bower, and installable via `bower install`:

* can-cookies
* can-loader
* can-resource
* can-sanitize

All of these can be updated with `bower update` as new versions of CanJS are released.

## Configuration
Yeoman generated projects can be further tweaked according to your needs by modifying project files appropriately.

### Output
You can change the `app` directory by adding a `appPath` property to `component.json`. For instance, if you wanted to easily integrate with Express.js, you could add the following:

```json
{
  "name": "yo-test",
  "version": "0.0.0",
  ...
  "appPath": "public"
}

```
This will cause Yeoman-generated client-side files to be placed in `public`.

## Testing

For tests to work properly, karma needs the `can-mocks` bower package.
This script is included in the component.json in the `devDependencies` section, which will
be available very soon, probably with the next minor release of bower.

While bower `devDependencies` are not yet implemented, you can fix it by running:
```bash
bower install can-mocks
```

By running `grunt test` you should now be able to run your unit tests with karma.

## Contribute

See the [contributing docs](https://github.com/yeoman/yeoman/blob/master/contributing.md)

When submitting an issue, please follow the [guidelines](https://github.com/yeoman/yeoman/blob/master/contributing.md#issue-submission). Especially important is to make sure Yeoman is up-to-date, and providing the command or commands that cause the issue.

When submitting a bugfix, write a test that exposes the bug and fails before applying your fix. Submit the test alongside the fix.

When submitting a new feature, add tests that cover the feature.

## License

[BSD license](http://opensource.org/licenses/bsd-license.php)

##Grunt Debugging

```bash
node --debug-brk $(which grunt) task
```

```bash
Use node-inspector &
```