Skip to content

Commit

Permalink
ember:component
Browse files Browse the repository at this point in the history
  • Loading branch information
Ilya Radchenko committed Apr 29, 2014
1 parent cd704d5 commit faf1769
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 0 deletions.
1 change: 1 addition & 0 deletions app/templates/scripts/app.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ require 'scripts/controllers/*'
require 'scripts/store'
require 'scripts/models/*'
require 'scripts/routes/*'
require 'scripts/components/*'
require 'scripts/views/*'
require 'scripts/router'
1 change: 1 addition & 0 deletions app/templates/scripts/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ require('scripts/controllers/*');
require('scripts/store');
require('scripts/models/*');
require('scripts/routes/*');
require('scripts/components/*');
require('scripts/views/*');
require('scripts/router');
38 changes: 38 additions & 0 deletions component/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
'use strict';

var util = require('util');
var yeoman = require('yeoman-generator');
var fleck = require('fleck');
var getJSPath = require('../utils/js_path');

var ComponentGenerator = module.exports = function ComponentGenerator(args, options, config) {
yeoman.generators.NamedBase.apply(this, arguments);
this.dasherized_name = this._.dasherize(this.name);
this.componetized_name = this._.classify(this.dasherized_name);
this.slugified_name = this._.slugify(this.componetized_name);
this.underscorized_name = this._.underscored(this.name);

if (this.dasherized_name.indexOf('-') === 0) {
this.dasherized_name = this.dasherized_name.slice(1);
}

if (!this.componetized_name.match(/.*[A-Z].*[A-Z].*/)) {
throw 'Component name must be made of two or more words, e.g. x-player, UserProfile, my_big_gravatar';

}

// TODO Find a better way to do this. Passing `coffee` via options from controller seems to be a futile effort
this.options.coffee = options.coffee;
if (!this.options.coffee && this.expandFiles('app/scripts/**/*.coffee', {}).length > 0) {
this.options.coffee = true;
}
};

util.inherits(ComponentGenerator, yeoman.generators.NamedBase);

ComponentGenerator.prototype._getJSPath = getJSPath;

ComponentGenerator.prototype.files = function files() {
this.copy(this._getJSPath('component'), 'app/scripts/components/' + this.underscorized_name + this._getJSPath('_component'));
this.copy('component.hbs', 'app/templates/components/' + this.dasherized_name + '.hbs');
};
2 changes: 2 additions & 0 deletions component/templates/component.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<%= _.classify(appname) %>.<%= _.classify(name) %>Component = Ember.Component.extend(
)
1 change: 1 addition & 0 deletions component/templates/component.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<p>I'm a component, <a href="http://emberjs.com/guides/components/" title="Ember.js Component Guide">customize</a> me please!</p>
2 changes: 2 additions & 0 deletions component/templates/component.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<%= _.classify(appname) %>.<%= componetized_name %>Component = Ember.Component.extend({
});
9 changes: 9 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ This project is an ongoing community effort, and efforts to find the easiest way
* [ember-model](#embermodel)
* [ember-view](#emberview)
* [ember-controller](#embercontroller)
* [ember-component](#embercomponent)
* [Options](#options)
* [Troubleshooting](#troubleshooting)
* [Changelog](#changelog)
Expand Down Expand Up @@ -100,6 +101,14 @@ see:

* http://localhost:9000/#/bar

### ember:component

Creates a component and a template for that component, as in:

`yo ember:component x-player`

Which can be used in the application with `{{x-player}}`.

## Options

* `--skip-install`
Expand Down

0 comments on commit faf1769

Please sign in to comment.