diff --git a/app/index.js b/app/index.js index f851d32..51ec13b 100644 --- a/app/index.js +++ b/app/index.js @@ -40,15 +40,15 @@ var Generator = module.exports = function Generator(args, options) { args.push('--minsafe'); } - this.hookFor('angular:common', { + this.hookFor('angular-silex:common', { args: args }); - this.hookFor('angular:main', { + this.hookFor('angular-silex:main', { args: args }); - this.hookFor('angular:controller', { + this.hookFor('angular-silex:controller', { args: args }); @@ -150,16 +150,50 @@ Generator.prototype.bootstrapFiles = function bootstrapFiles() { } if (this.bootstrap || this.compassBootstrap) { - // this.directory('images', 'app/images'); + //this.directory('images', 'app/images'); } }; +/* Generator.prototype.createIndexHtml = function createIndexHtml() { this.template('../../templates/common/index.html', 'resources/views/layout.html.twig'); }; +*/ + +Generator.prototype.silexFiles = function () { + this.mkdir('resources'); + this.directory('silex/resources/cache', 'resources/cache'); + this.directory('silex/resources/config', 'resources/config'); + this.directory('silex/resources/locales', 'resources/locales'); + this.directory('silex/resources/log', 'resources/log'); + this.directory('silex/resources/views', 'resources/views'); + this.template('../../templates/common/index.html', 'resources/views/layout.html.twig'); + this.template('../../templates/common/silex/prod.php', 'resources/config/prod.php'); + + this.directory('silex/src', 'src'); + this.template('../../templates/common/silex/app.php', 'src/app.php'); + this.template('../../templates/common/silex/console.php', 'src/console.php'); + this.template('../../templates/common/silex/Script.php', 'src/SKE/Composer/Script.php'); + this.template('../../templates/common/silex/phpunit.xml', 'phpunit.xml'); + + this.template('silex/.travis.yml', '.travis.yml'); + this.template('silex/composer.json', 'composer.json'); + this.template('silex/composer.lock', 'composer.lock'); + this.template('silex/console', 'console'); + this.directory('silex/tests', 'test'); + + this.directory('silex/web', 'web'); +}; + +/* +is possible to force file copy with this.template() or this.directory() methods in app/index.js to force overweite? or there is another approach? + */ Generator.prototype.packageFiles = function () { - this.template('../../templates/common/bower.json', 'bower.json'); + this.template('../../templates/common/package.json', 'package.json'); + this.template('../../templates/common/bower.json', 'bower.json'); + this.template('../../templates/common/Gruntfile.js', 'Gruntfile.js'); + this.template('../../templates/common/README.md', 'README.md'); }; diff --git a/script-base.js b/script-base.js index cd090c9..c81eb0c 100644 --- a/script-base.js +++ b/script-base.js @@ -88,7 +88,7 @@ Generator.prototype.htmlTemplate = function (src, dest) { Generator.prototype.addScriptToIndex = function (script) { try { var appPath = this.env.options.appPath; - var fullPath = path.join(appPath, 'index.html'); + var fullPath = path.join(appPath, '../resources/views/layout.html.twig'); angularUtils.rewriteFile({ file: fullPath, needle: '', diff --git a/templates/common/README.md b/templates/common/README.md new file mode 100644 index 0000000..21d4c8e --- /dev/null +++ b/templates/common/README.md @@ -0,0 +1,293 @@ + +# Silex - Yeoman Generator + +Maintainer: [Luciano Amodio](https://github.com/adamquadmon) + +Based on [generator-angular](https://github.com/yeoman/generator-angular/) +Based on [Silex-Kitchen-Edition](https://github.com/lyrixx/Silex-Kitchen-Edition/) + + +## Usage + +Install `generator-angular-silex`: +``` +npm install -g generator-angular-silex +``` + +* For Development +``` +git clone https://github.com/AdamQuadmon/generator-angular-silex.git +``` + +Make a new directory, and `cd` into it: +``` +mkdir my-new-project && cd $_ +``` + +* For Developers +``` +npm install ./../generator-angular-silex +``` + +Run `yo angular-silex:app`, optionally passing an app name: +``` +yo angular-silex:app [app-name] +``` + +## Generators + +Available generators: + +* [angular-silex](#app) (aka [angular-silex:app](#app)) +* [angular-silex:controller](#controller) +* [angular-silex:directive](#directive) +* [angular-silex:filter](#filter) +* [angular-silex:route](#route) +* [angular-silex:service](#service) +* [angular-silex:view](#view) + +**Note: Generators are to be run from the root directory of your app.** + +### App +Sets up a new AngularJS app, generating all the boilerplate you need to get started. The app generator also optionally installs Twitter Bootstrap and additional AngularJS modules, such as angular-resource. + +Example: +```bash +yo angular-silex +``` + +### Route +Generates a controller and view, and configures a route in `app/scripts/app.js` connecting them. + +Example: +```bash +yo angular-silex:route myroute +``` + +Produces `app/scripts/controllers/myroute.js`: +```javascript +angular.module('myMod').controller('MyrouteCtrl', function ($scope) { + // ... +}); +``` + +Produces `app/views/myroute.html`: +```html +
This is the myroute view
+``` + +### Controller +Generates a controller in `app/scripts/controllers`. + +Example: +```bash +yo angular-silex:controller user +``` + +Produces `app/scripts/controllers/user.js`: +```javascript +angular.module('myMod').controller('UserCtrl', function ($scope) { + // ... +}); +``` +### Directive +Generates a directive in `app/scripts/directives`. + +Example: +```bash +yo angular-silex:directive myDirective +``` + +Produces `app/scripts/directives/myDirective.js`: +```javascript +angular.module('myMod').directive('myDirective', function () { + return { + template: '', + restrict: 'E', + link: function postLink(scope, element, attrs) { + element.text('this is the myDirective directive'); + } + }; +}); +``` + +### Filter +Generates a filter in `app/scripts/filters`. + +Example: +```bash +yo angular-silex:filter myFilter +``` + +Produces `app/scripts/filters/myFilter.js`: +```javascript +angular.module('myMod').filter('myFilter', function () { + return function (input) { + return 'myFilter filter:' + input; + }; +}); +``` + +### View +Generates an HTML view file in `app/views`. + +Example: +```bash +yo angular-silex:view user +``` + +Produces `app/views/user.html`: +```html +This is the user view
+``` + +### Service +Generates an AngularJS service. + +Example: +```bash +yo angular-silex:service myService +``` + +Produces `app/scripts/services/myService.js`: +```javascript +angular.module('myMod').factory('myService', function () { + // ... +}); +``` + +#### Options +There are options for each of the methods for registering services. For more on using these services, see the [module API AngularJS documentation](http://docs.angularjs.org/api/angular.Module). + +##### Factory +Invoked with `--factory` + +This is the default method when creating a service. Running `yo angular:service myService --factory` is the same as running `yo angular:service myService` + +##### Service +Invoked with `--service` + +##### Value +Invoked with `--value` + +##### Constant +Invoked with `--constant` + +## 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 angular-silex:controller user --coffee +``` + +Produces `app/scripts/controller/user.coffee`: +```coffeescript +angular.module('myMod') + .controller 'UserCtrl', ($scope) -> +``` + +A project can mix CoffeScript and JavaScript files. + +### Minification Safe +By default, generators produce unannotated code. Without annotations, AngularJS's DI system will break when minified. Typically, these annotations the make minification safe are added automatically at build-time, after application files are concatenated, but before they are minified. By providing the `--minsafe` option, the code generated will out-of-the-box be ready for minification. The trade-off is between amount of boilerplate, and build process complexity. + +#### Example +```bash +yo angular-silex:controller user --minsafe +``` + +Produces `app/controller/user.js`: +```javascript +angular.module('myMod').controller('UserCtrl', ['$scope', function ($scope) { + // ... +}]); +``` + +#### Background +Unannotated: +```javascript +angular.module('myMod').controller('MyCtrl', function ($scope, $http, myService) { + // ... +}); +``` + +Annotated: +```javascript +angular.module('myMod').controller('MyCtrl', + ['$scope', '$http', 'myService', function ($scope, $http, myService) { + + // ... + }]); +``` + +The annotations are important because minified code will rename variables, making it impossible for AngularJS to infer module names based solely on function parameters. + +The recommended build process uses `ngmin`, a tool that automatically adds these annotations. However, if you'd rather not use `ngmin`, you have to add these annotations manually yourself. + +## Bower Components + +The following packages are always installed by the [app](#app) generator: + +* angular +* angular-mocks +* angular-scenario + + +The following additional modules are available as components on bower, and installable via `bower install`: + +* angular-cookies +* angular-loader +* angular-resource +* angular-sanitize + +All of these can be updated with `bower update` as new versions of AngularJS 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 `bower.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 `angular-mocks` bower package. +This script is included in the bower.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 angular-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 PR, make sure that the commit messages match the [AngularJS conventions](https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/). + +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) \ No newline at end of file diff --git a/templates/common/gitignore b/templates/common/gitignore index ccd7911..66d6b34 100644 --- a/templates/common/gitignore +++ b/templates/common/gitignore @@ -3,3 +3,10 @@ dist .tmp .sass-cache app/components + +.idea + +resources/cache/* +resources/log/* +vendor/ +web/assets/* diff --git a/templates/common/index.html b/templates/common/index.html index 00c9ee7..3dd8a01 100644 --- a/templates/common/index.html +++ b/templates/common/index.html @@ -3,47 +3,105 @@ - - + +