<commit_before># Angular.js Enterprise Edition Boilerplate

<!-- toc -->

* [Visão Geral](#visão-geral)
* [Guia de Instalação](#guia-de-instalação)
  * [Pré-Requisitos](#pré-requisitos)
* [Guia de Uso](#guia-de-uso)
  * [Ferramentas para o Fluxo de Desenvolvimento](#ferramentas-para-o-fluxo-de-desenvolvimento)
  * [Ferramenta para Publicação no GitHub gh-pages](#ferramenta-para-publicação-no-github-gh-pages)
* [Estrutura de Diretórios](#estrutura-de-diretórios)
  * [Desenvolvimento](#desenvolvimento)
    * [Problemas Conhecidos](#problemas-conhecidos)
  * [Publicação](#publicação)
  * [Projeto](#projeto)

<!-- toc stop -->

## Visão Geral

Projeto Boilerplate, com ferramental de suporte para o desenvolvimento e publicação no gh-pages do GitHub

* **Importante**: para definir a comunicação com entre a aplicação frontend, com o backend (parte do servidor), observe e procure seguir a proposta [REST URL Design](rest_url_design.md)

## Guia de Instalação

Execute os comandos a seguir no terminal (console)

```bash
$ git clone https://github.com/erkobridee/angularjs-ee-boilerplate.git
$ cd angularjs-ee-boilerplate
$ cd publicher
$ npm install
$ cd ..
$ cd tools
$ npm run setup
```

### Pré-Requisitos

* Necessário ter instalado o [Git](http://git-scm.com/)

* Necessário ter instalado o [node.js (v0.10.0 ou mais recente)](http://nodejs.org/) com o npm (Node Package Manager)

  * caso esteja em um ambiente corporativo, utilizando o windows atrás de um proxy NTLM, siga estas intruções : [Utilizando o Node.js em um Windows XP sem Administrador | Javascript Brasil](http://javascriptbrasil.com/2012/11/19/utilizando-o-node-js-em-um-windows-xp-sem-administrador/)

* Necessário ter o [Grunt](https://github.com/gruntjs/grunt) instalado como um pacote global

## Guia de Uso

> `./` representa o diretório raíz

### Ferramentas para o Fluxo de Desenvolvimento

> Dentro do diretório `./tools`, comandos disponíveis do grunt.js

* `grunt` >> (tarefa padrão) irá executar o lintspaces, jshint nos arquivos .js para verificar a qualidade de código e limpar diretórios de construção e distribuição

  > **Atenção:** a tarefa ***lintspaces*** para verificar a padronização dos arquivos, esta depende do arquivo na raíz do repositório : `.editorconfig`

--

* `grunt build:dev` >> prepara os arquivos para desenvolvimento, dentro do diretório `./tools/.temp`

* `grunt build:prod` >> limpa os diretórios de build, executa os testes e então prepara os arquivos para distribuição / produção, dentro do diretório `./dist`

--

* `grunt generate` >> pergunta qual opção de geração de código você deseja, os respectivos valores para a opção escolhida e finalmente o destino de criação dos arquivos

--

* `grunt dev:livereload` >> primeiro irá executar a tarefa `build:dev`, depois disso inicia um servidor web com suporte ao livereload, o qual monitora alterações nos arquivos *.html, .css, e .js* e atualiza todos os browser e dispositivos conectados no servidor

* `grunt dev:livereload:proxy` >> além das tarefas do `grunt dev`, irá criar um proxy para rotear as requisições de um contexto, por exemplo: `/rest`, para outro servidor

* `grunt dev:sync` >> primeiro irá executar a tarefa `build:dev`, depois disso inicia um servidor web com suporte ao browser-sync, o qual monitora alterações nos arquivos *.html, .css, e .js* e atualiza todos os browser e dispositivos conectados no servidor, também mantem os dados e navegação sincronizada

* `grunt dev:sync:proxy` >> além das tarefas do `grunt dev:sync`, irá criar um proxy para rotear as requisições de um contexto, por exemplo: `/rest`, para outro servidor

* alias

  * `grunt dev` >> alias para `grunt dev:livereload`

  * `grunt dev:proxy` >> alias para `grunt dev:livereload:proxy`

--

* `grunt dist` >> primeiro irá executar a tarefa `build:prod`, depois disso inicia um servidor web com os arquivos gerados

* `grunt dist:proxy` >> primeiro irá executar a tarefa `build:prod`, depois disso inicia um servidor web com os arquivos gerados + proxy para rotear as requisições de um contexto, por exemplo: `/rest`, para outro servidor

* `grunt dist:sync` >> primeiro irá executar a tarefa `build:prod`, depois disso inicia um servidor web com os arquivos gerados + browser-sync para sincronizar os dados e navegação

* `grunt dist:sync:proxy` >> primeiro irá executar a tarefa `build:prod`, depois disso inicia um servidor web com os arquivos gerados + browser-sync para sincronizar os dados e navegação + proxy para rotear as requisições de um contexto, por exemplo: `/rest`, para outro servidor

--

* `grunt ci` - limpa os diretórios de build, executa a tarefa `karma:ci` do grunt que executa os testes

* `grunt reports` - limpa os diretórios de build, executa a tarefa `karma:reports` do grunt que gera os relatórios html de cobertura e teste, então abre o diretório onde os relatórios foram gerados

* `grunt specs` - primeiro gera os relatórios html de cobertura e teste, inicia o karma com watch e um webserver com livereload observando os arquivos html dos relatórios, que são regerados a cada execução do karma

> **Atenção:** caso queira executar com o fluxo de desenvolvimento, execute primeiro a tarefa de desenvolvimento (ex.: `grunt dev`) em um terminal e em outro terminal execute `grunt specs`

--

* Configurações globais do ferramental: `./tools/config.js`, as quais são utilizadas no `./tools/helpers/grunt/config/project.js`

  * Para centralizar e tornar mais fácil o gerenciado das configurações das tarefas do Grunt.js, foi definido o arquivo `./tools/helpers/grunt/config/project.js`, dentre as configurações a do roteamento do proxy (ver: `backend.proxies`)

  * Plugin do Grunt.js para proxy : [grunt-connect-proxy](https://github.com/drewzboto/grunt-connect-proxy) | [Using grunt-connect-proxy](http://www.fettblog.eu/blog/2013/09/20/using-grunt-connect-proxy/)

### Ferramenta para Publicação no GitHub gh-pages

> Dentro do diretório `./publisher`, comandos disponíveis do grunt.js

* `grunt init` >> realiza o clone do projeto a partir do GitHub no diretório `./publisher/local/gh-pages` e seleciona o branch `gh-pages`, o que é utilizado para atualizar o branch `gh-pages` no GitHub

> Execute este comando uma vez, antes dos comandos a seguir

--

* `grunt publish` >> esta tarefa irá executar o comando `grunt build:prod` dentro do diretório `./tools`, então irá copiar os arquivo gerados no diretório `./dist` para `./publisher/local/gh-pages`, efetuar o commit dos arquivos e então enviar para o branch `gh-pages` no Github

* `grunt publish:dev` - esta tarefa irá copiar os arquivo do diretório `./src` para `./publisher/local/gh-pages`, efetuar o commit dos arquivos e então enviar para o branch `gh-pages` no Github

## Estrutura de Diretórios

```
./
  /src        >> fontes do projeto
  /tools      >> ferramentas de desenvolvimento
  /publisher  >> ferramenta de publicação
```

### Desenvolvimento

```
/tools
  /helpers
    /lib                 >> processamentos auxiliares
    /scripts             >> processamentos de automação
    /html_report_template
      jasmine.html       >> template de relatório html do jasmine
    /grunt
      /config            >> arquivos de configurações para as tarefas do grunt.js
      /tasks             >> tarefas customizadas para o grunt.js
    /tests
      require.config.js  >> carrega os arquivos e testes da aplicação para o Karma Runner
  /templates             >> arquivos de templates para a tarefa generate do grunt.js
  config.js              >> configurações globais para as tarefas do grunt.js
  Gruntfile.js           >> arquivo principal de configuração do grunt.js
  package.json           >> arquivo de configuração e dependências do projeto 'tools' em node.js
```

> Caso você use o Sublime Text, veja isso:
>
> * [[GitHub] erkobridee / sublime-angularjs-ee-snippets](https://github.com/erkobridee/sublime-angularjs-ee-snippets) - Sublime Text 2 / 3 Snippets and Completions for Angular.js and Require.js (focused to the angularjs-ee-boilerplate code)
>
> * [[GitHub] caiogondim / jasmine-sublime-snippets](https://github.com/caiogondim/jasmine-sublime-snippets) - Snippets for Jasmine, the BDD framework for testing JavaScript, in Sublime Text
>

#### Problemas Conhecidos

##### Mac OSX

* [Como eu conserto o erro EMFILE: Muitos arquivos abertos? | grunt-contrib-watch - GitHub](https://github.com/gruntjs/grunt-contrib-watch#how-do-i-fix-the-error-emfile-too-many-opened-files)

  * [[SuperUser] How to change default ulimit values in Mac OS X 10.6?](https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in-mac-os-x-10-6)

  Isto porque o sistema limita a quantidade máxima de arquivos abertos.
  Para o OSX o valor padrão é muito baixo (256).
  Para aumentar temporariamente este limite use o comando `ulimit -n 10480`,
  este número será o novo limite máximo.

  Em algumas versões do OSX a solução acima não funciona.
  Neste caso tente `launchctl limit maxfiles 10480 10480` e reinicie
  o terminal.


##### Windows

* Atrás de um proxy NTLM

  * execute duas vezes o comando `npm install`, para instalar todas as dependências
<commit_msg>docs README pt-Br updated<commit_after># Angular.js Enterprise Edition Boilerplate

<!-- toc -->

* [Visão Geral](#visão-geral)
* [Guia de Instalação](#guia-de-instalação)
  * [Pré-Requisitos](#pré-requisitos)
* [Guia de Uso](#guia-de-uso)
  * [Ferramentas para o Fluxo de Desenvolvimento](#ferramentas-para-o-fluxo-de-desenvolvimento)
  * [Ferramenta para Publicação no GitHub gh-pages](#ferramenta-para-publicação-no-github-gh-pages)
* [Estrutura de Diretórios](#estrutura-de-diretórios)
  * [Desenvolvimento](#desenvolvimento)
    * [Problemas Conhecidos](#problemas-conhecidos)
  * [Publicação](#publicação)
  * [Projeto](#projeto)

<!-- toc stop -->

## Visão Geral

Projeto Boilerplate, com ferramental de suporte para o desenvolvimento e publicação no gh-pages do GitHub

* **Importante**: para definir a comunicação com entre a aplicação frontend, com o backend (parte do servidor), observe e procure seguir a proposta [REST URL Design](rest_url_design.md)

## Guia de Instalação

Execute os comandos a seguir no terminal (console)

```bash
$ git clone https://github.com/erkobridee/angularjs-ee-boilerplate.git
$ cd angularjs-ee-boilerplate
$ cd publicher
$ npm install
$ cd ..
$ cd tools
$ npm run setup
```

### Pré-Requisitos

* Necessário ter instalado o [Git](http://git-scm.com/)

* Necessário ter instalado o [node.js (v0.10.0 ou mais recente)](http://nodejs.org/) com o npm (Node Package Manager)

  * caso esteja em um ambiente corporativo, utilizando o windows atrás de um proxy NTLM, siga estas intruções : [Utilizando o Node.js em um Windows XP sem Administrador | Javascript Brasil](http://javascriptbrasil.com/2012/11/19/utilizando-o-node-js-em-um-windows-xp-sem-administrador/)

* Necessário ter o [Grunt](https://github.com/gruntjs/grunt) instalado como um pacote global

## Guia de Uso

> `./` representa o diretório raíz

### Ferramentas para o Fluxo de Desenvolvimento

> Dentro do diretório `./tools`, comandos disponíveis do grunt.js

* `grunt` >> (tarefa padrão) irá executar o lintspaces, jshint nos arquivos .js para verificar a qualidade de código e limpar diretórios de construção e distribuição

  > **Atenção:** a tarefa ***lintspaces*** para verificar a padronização dos arquivos, esta depende do arquivo na raíz do repositório : `.editorconfig`

--

* `grunt build:dev` >> prepara os arquivos para desenvolvimento, dentro do diretório `./tools/.temp`

* `grunt build:prod` >> limpa os diretórios de build, executa os testes e então prepara os arquivos para distribuição / produção, dentro do diretório `./dist`

--

* `grunt generate` >> pergunta qual opção de geração de código você deseja, os respectivos valores para a opção escolhida e finalmente o destino de criação dos arquivos

--

* `grunt dev:livereload` >> primeiro irá executar a tarefa `build:dev`, depois disso inicia um servidor web com suporte ao livereload, o qual monitora alterações nos arquivos *.html, .css, e .js* e atualiza todos os browser e dispositivos conectados no servidor

* `grunt dev:livereload:proxy` >> além das tarefas do `grunt dev`, irá criar um proxy para rotear as requisições de um contexto, por exemplo: `/rest`, para outro servidor

* `grunt dev:sync` >> primeiro irá executar a tarefa `build:dev`, depois disso inicia um servidor web com suporte ao browser-sync, o qual monitora alterações nos arquivos *.html, .css, e .js* e atualiza todos os browser e dispositivos conectados no servidor, também mantem os dados e navegação sincronizada

* `grunt dev:sync:proxy` >> além das tarefas do `grunt dev:sync`, irá criar um proxy para rotear as requisições de um contexto, por exemplo: `/rest`, para outro servidor

* alias

  * `grunt dev` >> alias para `grunt dev:livereload`

  * `grunt dev:proxy` >> alias para `grunt dev:livereload:proxy`

--

* `grunt dist` >> primeiro irá executar a tarefa `build:prod`, depois disso inicia um servidor web com os arquivos gerados

* `grunt dist:proxy` >> primeiro irá executar a tarefa `build:prod`, depois disso inicia um servidor web com os arquivos gerados + proxy para rotear as requisições de um contexto, por exemplo: `/rest`, para outro servidor

* `grunt dist:sync` >> primeiro irá executar a tarefa `build:prod`, depois disso inicia um servidor web com os arquivos gerados + browser-sync para sincronizar os dados e navegação

* `grunt dist:sync:proxy` >> primeiro irá executar a tarefa `build:prod`, depois disso inicia um servidor web com os arquivos gerados + browser-sync para sincronizar os dados e navegação + proxy para rotear as requisições de um contexto, por exemplo: `/rest`, para outro servidor

--

* `grunt ci` - limpa os diretórios de build, executa a tarefa `karma:ci` do grunt que executa os testes

* `grunt reports` - limpa os diretórios de build, executa a tarefa `karma:reports` do grunt que gera os relatórios html de cobertura e teste, então abre o diretório onde os relatórios foram gerados

* `grunt specs` - primeiro gera os relatórios html de cobertura e teste, inicia o karma com watch e um webserver com livereload observando os arquivos html dos relatórios, que são regerados a cada execução do karma

> **Atenção:** caso queira executar com o fluxo de desenvolvimento, execute primeiro a tarefa de desenvolvimento (ex.: `grunt dev`) em um terminal e em outro terminal execute `grunt specs`

--

* Configurações globais do ferramental: `./tools/config.js`, as quais são utilizadas no `./tools/helpers/grunt/config/project.js`

  * Para centralizar e tornar mais fácil o gerenciado das configurações das tarefas do Grunt.js, foi definido o arquivo `./tools/helpers/grunt/config/project.js`, dentre as configurações a do roteamento do proxy (ver: `backend.proxies`)

  * Plugin do Grunt.js para proxy : [grunt-connect-proxy](https://github.com/drewzboto/grunt-connect-proxy) | [Using grunt-connect-proxy](http://www.fettblog.eu/blog/2013/09/20/using-grunt-connect-proxy/)

### Ferramenta para Publicação no GitHub gh-pages

> Dentro do diretório `./publisher`, comandos disponíveis do grunt.js

* `grunt init` >> realiza o clone do projeto a partir do GitHub no diretório `./publisher/local/gh-pages` e seleciona o branch `gh-pages`, o que é utilizado para atualizar o branch `gh-pages` no GitHub

> Execute este comando uma vez, antes dos comandos a seguir

--

* `grunt publish` >> esta tarefa irá executar o comando `grunt build:prod` dentro do diretório `./tools`, então irá copiar os arquivo gerados no diretório `./dist` para `./publisher/local/gh-pages`, efetuar o commit dos arquivos e então enviar para o branch `gh-pages` no Github

* `grunt publish:dev` - esta tarefa irá copiar os arquivo do diretório `./src` para `./publisher/local/gh-pages`, efetuar o commit dos arquivos e então enviar para o branch `gh-pages` no Github

## Estrutura de Diretórios

```
./
  /src        >> fontes do projeto
  /tools      >> ferramentas de desenvolvimento
  /publisher  >> ferramenta de publicação
```

### Desenvolvimento

```
/tools
  /helpers
    /lib                 >> processamentos auxiliares
    /scripts             >> processamentos de automação
    /html_report_template
      jasmine.html       >> template de relatório html do jasmine
    /grunt
      /config            >> arquivos de configurações para as tarefas do grunt.js
      /tasks             >> tarefas customizadas para o grunt.js
    /tests
      require.config.js  >> carrega os arquivos e testes da aplicação para o Karma Runner
  /templates             >> arquivos de templates para a tarefa generate do grunt.js
  config.js              >> configurações globais para as tarefas do grunt.js
  Gruntfile.js           >> arquivo principal de configuração do grunt.js
  package.json           >> arquivo de configuração e dependências do projeto 'tools' em node.js
```

> Caso você use o Sublime Text, veja isso:
>
> * [[GitHub] erkobridee / sublime-angularjs-ee-snippets](https://github.com/erkobridee/sublime-angularjs-ee-snippets) - Sublime Text 2 / 3 Snippets and Completions for Angular.js and Require.js (focused to the angularjs-ee-boilerplate code)
>
> * [[GitHub] caiogondim / jasmine-sublime-snippets](https://github.com/caiogondim/jasmine-sublime-snippets) - Snippets for Jasmine, the BDD framework for testing JavaScript, in Sublime Text
>

#### Problemas Conhecidos

##### Mac OSX

* [Como eu conserto o erro EMFILE: Muitos arquivos abertos? | grunt-contrib-watch - GitHub](https://github.com/gruntjs/grunt-contrib-watch#how-do-i-fix-the-error-emfile-too-many-opened-files)

  * [[SuperUser] How to change default ulimit values in Mac OS X 10.6?](https://superuser.com/questions/261023/how-to-change-default-ulimit-values-in-mac-os-x-10-6)

  Isto porque o sistema limita a quantidade máxima de arquivos abertos.
  Para o OSX o valor padrão é muito baixo (256).
  Para aumentar temporariamente este limite use o comando `ulimit -n 10480`,
  este número será o novo limite máximo.

  Em algumas versões do OSX a solução acima não funciona. 

  Neste caso tente `launchctl limit maxfiles 10480 10480` e reinicie
  o terminal.


##### Windows

* Atrás de um proxy NTLM

  * execute duas vezes o comando `npm install`, para instalar todas as dependências

{'fraction_non_alphanumeric': 0.09579822737717475, 'fraction_numerical': 0.005689900426742532, 'mean_word_length': 4.0424827586206895, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 147, 'https://': 14, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4970047', 'n_tokens_mistral': 6419, 'n_tokens_neox': 6224, 'n_words': 2147}