ether

Simple scaffolding tool.

Ether

Ether is a simple tool to make scaffolding easy, and fun in a programmatic way.

[sudo] npm i ether
'use strict';
var path = require('path');
var ether = require('ether');
var nodeModule = ether({
  questions: [{
    type: 'input',
    name: 'name',
    message: 'Whats the name of the module?'
  }, {
    type: 'input',
    name: 'version',
    message: 'Whats the version of the module?',
    default: '0.0.1'
  }, {
    type: 'input',
    name: 'entryPoint',
    message: 'What the entry point of the module?',
    default: 'index.js',
  }, {
    type: 'input',
    name: 'author',
    message: 'Who is the author of the module?'
  }, {
    type: '',
    name: 'public',
    message: 'This module is public?',
    default: true
  }],
  tree: [
    ['{{name}}'],
    ['{{name}}/bin'],
    ['{{name}}/lib'],
    ['{{name}}/examples'],
    ['{{name}}/test']
  ],
});
 
nodeModule.task('questions', function (doneHandler) {
  nodeModule.run('prompt', [nodeModule.get('questions'), doneHandler]);
});
 
nodeModule.task('build', function () {
  var self = this;
 
  self.get('tree').map(function (item) {
    self.run('mkdir', item);
  });
 
  return self;
});
 
nodeModule.task('seed', function (cb) {
  var self = this;
 
  self
    .run('download', [
      'https://gist.github.com/kaiquewdev/9087288/raw/b7d70fc5e3aad9e04b6549bc4239f38f1149af5c/ether-package.json',
      './{{name}}/package.json'),
      cb
    ]);
 
  return self;
});
 
nodeModule.make('default', function () {
  var self = this;
 
  function doneHandler() {
    nodeModule.run('build');
    nodeModule.run('seed', [function () {
      console.log('Download was completed and template too.');
    }]);
  }
  nodeModule.run('questions', [doneHandler]);
 
  return self;
});
 
module.exports = exports = nodeModule;
[sudo] npm i -g ether

Use the cli tool, to run scaffolding, to generate new applications.

ether -i etherfile.js

The install option use the etherfile.js or and module installed.

ether -u [etherfile] -m [task-name]
[sudo] npm i -g ether-node-module

and

ether -i ether-node-module
 
or
 
ether -i node_modules/ether-node-module

Or using this way to install one scaffolding from npm, and run this scaffolding app.

var app = ether({
  name: 'Example'
});

Instantiation of the scaffolding.

app.get('name');

and

app.set('version', '0.0.1');

Get and Set, modify the context of the instance.

app.task('create-app-structure', function () {
  app.run('mkdir', ['app/'])
     .run('mkdir', ['app/models'])
     .run('mkdir', ['app/views'])
     .run('mkdir', ['app/controllers']);
});

using the task method you can create new methods to reuse in the instance, of the current scaffolding app.

app.run('mkdir', [destiny]);

On the destiny dir, this task create an new directory

app.run('copy', [source, destiny]);

That task make a copy of an file

app.run('template', [source, destiny]);

This task make a copy and replace variables from context of the instance of the scaffolding, to another new file.

app.run('prompt', [[{type:'input', name: 'name', message: 'Whats the name of that application?'}]]);

To put variables using the interactive mode in the context of the instance, use this method.

app.run('download', [url, destiny, callback]);

To make download of an file and put in the project replacing, variables.

app.run('create-app-structure');

This method run tasks previously defined.

app.make('default', function () {
  app.run('create-app-structure');
});

The make method can register a bunch of tasks.

app.make('default');

And run a bunch of tasks.

[WIP]

Created by Kaique da Silva kaique.developer@gmail.com