rugular 0.0.95
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +4 -0
- data/Gemfile +5 -0
- data/README.md +149 -0
- data/Rakefile +11 -0
- data/bin/rugular +8 -0
- data/features/generator_for_directive.feature +35 -0
- data/features/generator_for_route.feature +40 -0
- data/features/new.feature +29 -0
- data/features/step_definitions/rugular_steps.rb +3 -0
- data/features/support/setup.rb +2 -0
- data/lib/rugular/tasks/build.rb +27 -0
- data/lib/rugular/tasks/dependencies.rb +28 -0
- data/lib/rugular/tasks/generate/directive.rb +11 -0
- data/lib/rugular/tasks/generate/generator_base.rb +81 -0
- data/lib/rugular/tasks/generate/route.rb +11 -0
- data/lib/rugular/tasks/generate.rb +44 -0
- data/lib/rugular/tasks/helpers/app_checker.rb +41 -0
- data/lib/rugular/tasks/new.rb +52 -0
- data/lib/rugular/tasks/server/Guardfile +22 -0
- data/lib/rugular/tasks/server/Procfile +5 -0
- data/lib/rugular/tasks/server.rb +28 -0
- data/lib/rugular/templates/directive/app.directive.coffee.erb +23 -0
- data/lib/rugular/templates/directive/app.directive.spec.coffee.erb +16 -0
- data/lib/rugular/templates/directive/app.haml.erb +1 -0
- data/lib/rugular/templates/directive/app.module.coffee.erb +2 -0
- data/lib/rugular/templates/directive/app.sass.erb +2 -0
- data/lib/rugular/templates/new/.gitignore +7 -0
- data/lib/rugular/templates/new/Gemfile +5 -0
- data/lib/rugular/templates/new/karma.conf.js +48 -0
- data/lib/rugular/templates/new/protractor.conf.js +32 -0
- data/lib/rugular/templates/new/src/app/app.controller.coffee +6 -0
- data/lib/rugular/templates/new/src/app/app.controller.spec.coffee +19 -0
- data/lib/rugular/templates/new/src/app/app.haml +1 -0
- data/lib/rugular/templates/new/src/app/app.module.coffee +4 -0
- data/lib/rugular/templates/new/src/app/app.routes.coffee +15 -0
- data/lib/rugular/templates/new/src/app/app.sass +2 -0
- data/lib/rugular/templates/new/src/favicon.ico +0 -0
- data/lib/rugular/templates/new/src/index.haml +21 -0
- data/lib/rugular/templates/new/test/spec_helper.js +168 -0
- data/lib/rugular/templates/new_erb/bower.json.erb +29 -0
- data/lib/rugular/templates/new_erb/package.json.erb +30 -0
- data/lib/rugular/templates/route/app.controller.coffee.erb +8 -0
- data/lib/rugular/templates/route/app.controller.spec.coffee.erb +19 -0
- data/lib/rugular/templates/route/app.haml.erb +1 -0
- data/lib/rugular/templates/route/app.module.coffee.erb +4 -0
- data/lib/rugular/templates/route/app.routes.coffee.erb +15 -0
- data/lib/rugular/templates/route/app.sass.erb +2 -0
- data/lib/rugular/version.rb +3 -0
- data/lib/rugular.rb +36 -0
- data/rugular.gemspec +33 -0
- metadata +255 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5146630b5d70b0d26d71eb5bb4d4eff347405f98
|
4
|
+
data.tar.gz: 747b7d81fcdfaa2c70a9a64a32860b692eac5b40
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 044165ce25868e12bc7457233718287d08722e5685a92c9eda1476dfff299738b064fb7fb65359da33caa0bba331ecbb80726eb468859e01bc4c8b73676040db
|
7
|
+
data.tar.gz: 090bf7d3aa4e36468082421d00846f4bdaff2f9cea94b6fdd6867299b4fa37b1e0d13cd62112514892fd3fe34b8553daa41aa42b76d8d45f59c0c87c7a4ae3cb
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
[![Build Status](https://travis-ci.org/currica/rugular.svg)](https://travis-ci.org/currica/rugular)
|
2
|
+
|
3
|
+
# Rugular
|
4
|
+
|
5
|
+
Rugular is a ruby scaffolding framework to build AngularJS apps. It builds a
|
6
|
+
minified and compressed version of a front-end into the ``./dist`` folder that
|
7
|
+
can be served as a standalone AngularJS app. The goal of this framework is to
|
8
|
+
create applications written with [best AngularJS
|
9
|
+
practices](https://github.com/johnpapa/angularjs-styleguide); CoffeeScript
|
10
|
+
optional.
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
Add this line to your application's Gemfile:
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
gem 'rugular'
|
18
|
+
```
|
19
|
+
|
20
|
+
And then execute:
|
21
|
+
|
22
|
+
$ bundle
|
23
|
+
|
24
|
+
Or install it yourself as:
|
25
|
+
|
26
|
+
$ gem install rugular
|
27
|
+
|
28
|
+
## Start a new project
|
29
|
+
|
30
|
+
```bash
|
31
|
+
rugular new <project_name>
|
32
|
+
```
|
33
|
+
|
34
|
+
This will create the initial project template that follows [Google's Best
|
35
|
+
Practices for an Angular App
|
36
|
+
Structure](https://docs.google.com/document/d/1XXMvReO8-Awi1EZXAXS4PzDzdNvV6pGcuaF4Q9821Es/pub).
|
37
|
+
<pre>
|
38
|
+
├── bower_components/
|
39
|
+
├── bower.json
|
40
|
+
├── Gemfile
|
41
|
+
├── package.json
|
42
|
+
├── src/
|
43
|
+
│ ├── app/
|
44
|
+
│ │ ├── app.module.coffee
|
45
|
+
│ │ ├── app.config.coffee
|
46
|
+
│ │ ├── app.controller.coffee
|
47
|
+
│ │ ├── app.controller.spec.coffee
|
48
|
+
│ │ ├── app.routes.coffee
|
49
|
+
│ │ ├── index.haml
|
50
|
+
│ │ ├── index.sass
|
51
|
+
│ ├── components/
|
52
|
+
│ ├── 404.html
|
53
|
+
│ ├── 500.html
|
54
|
+
│ ├── favico.ico
|
55
|
+
</pre>
|
56
|
+
|
57
|
+
## Development Server
|
58
|
+
|
59
|
+
Rugular includes a built in server that will interpret Coffeescript/Haml/Sass
|
60
|
+
and run a server on ``localhost:8080``. To run the server, type:
|
61
|
+
|
62
|
+
```bash
|
63
|
+
bundle exec rugular server
|
64
|
+
```
|
65
|
+
|
66
|
+
## Running the tests
|
67
|
+
|
68
|
+
### Unit Tests
|
69
|
+
|
70
|
+
Unit tests are included in the development server. To run these tests just once
|
71
|
+
(perhaps for CI) run:
|
72
|
+
|
73
|
+
```
|
74
|
+
karma start karma.conf.js --single-run
|
75
|
+
```
|
76
|
+
|
77
|
+
### End to End tests
|
78
|
+
|
79
|
+
End to end tests with protractor can be run with:
|
80
|
+
|
81
|
+
```bash
|
82
|
+
protractor
|
83
|
+
```
|
84
|
+
|
85
|
+
Please make sure you have mocha installed globally!
|
86
|
+
|
87
|
+
### Rugular Generators
|
88
|
+
|
89
|
+
#### Create a Route
|
90
|
+
|
91
|
+
A route creates a angular route, controller, and view in the app folder.
|
92
|
+
|
93
|
+
```bash
|
94
|
+
rugular generate route <route_name>
|
95
|
+
```
|
96
|
+
|
97
|
+
This command will create a folder in the ``src/app`` directory that will
|
98
|
+
contain a controller and service namespaced with a new module of the route
|
99
|
+
name if one dos not already exist. It will also register the new module in the
|
100
|
+
``app.module.js`` file.
|
101
|
+
|
102
|
+
#### Create a Directive
|
103
|
+
|
104
|
+
```bash
|
105
|
+
rugular generate directive <directive_name>
|
106
|
+
```
|
107
|
+
|
108
|
+
This command will create a directive and controller namespaced with a new
|
109
|
+
module of the feature name if one does not already exist. It will also register
|
110
|
+
the new module in the ``app.module.js`` file.
|
111
|
+
|
112
|
+
#### Create a Factory (TODO)
|
113
|
+
|
114
|
+
```bash
|
115
|
+
rugular generate factory <factory_name>
|
116
|
+
```
|
117
|
+
|
118
|
+
This command will create contain a factory namespaced with a new module of the
|
119
|
+
feature name if one does not already exist. It will also register the new
|
120
|
+
module in the ``app.module.js`` file.
|
121
|
+
|
122
|
+
### Creating a component
|
123
|
+
|
124
|
+
A component refers to shareable, abstracted angular modules. To create a
|
125
|
+
component, simply run any generator command with the ``-c`` option and the
|
126
|
+
service will be created in the ``src/components`` folder.
|
127
|
+
|
128
|
+
|
129
|
+
## TODO (need to build)
|
130
|
+
|
131
|
+
### Building the app
|
132
|
+
|
133
|
+
Rugular builds a minified, compressed version of your app in the ``/dist``
|
134
|
+
folder. To build the app run:
|
135
|
+
|
136
|
+
```
|
137
|
+
rugular build
|
138
|
+
```
|
139
|
+
|
140
|
+
## Contributing
|
141
|
+
|
142
|
+
1. Fork it ( https://github.com/currica/rugular/fork )
|
143
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
144
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
145
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
146
|
+
5. Create a new Pull Request
|
147
|
+
|
148
|
+
## License
|
149
|
+
Copyright 2014. Q-Centrix. MIT License.
|
data/Rakefile
ADDED
data/bin/rugular
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
Feature: Rugular CLI
|
2
|
+
In order to generate an application route
|
3
|
+
As a user of the rugular framework
|
4
|
+
I want to bootstrap the templates necessary to carry this out
|
5
|
+
|
6
|
+
Scenario: Generating a route
|
7
|
+
When I set up Rugular and run "rugular generate directive test"
|
8
|
+
And the file "my-app/src/app/test/test.directive.coffee" should contain:
|
9
|
+
"""
|
10
|
+
angular.module('test').controller('testController', testController)
|
11
|
+
"""
|
12
|
+
And the file "my-app/src/app/test/test.directive.spec.coffee" should contain:
|
13
|
+
"""
|
14
|
+
describe 'testController', ->
|
15
|
+
"""
|
16
|
+
And the file "my-app/src/app/test/test.haml" should contain:
|
17
|
+
"""
|
18
|
+
%h1 test
|
19
|
+
"""
|
20
|
+
And the file "my-app/src/app/app.module.coffee" should contain:
|
21
|
+
"""
|
22
|
+
'test'
|
23
|
+
"""
|
24
|
+
And the file "my-app/src/app/test/test.module.coffee" should contain:
|
25
|
+
"""
|
26
|
+
angular.module 'test', [
|
27
|
+
]
|
28
|
+
"""
|
29
|
+
|
30
|
+
Scenario: Generating a route in the components directory
|
31
|
+
When I set up Rugular and run "rugular generate directive -c test"
|
32
|
+
And the file "my-app/src/components/test/test.directive.coffee" should contain:
|
33
|
+
"""
|
34
|
+
angular.module('test').controller('testController', testController)
|
35
|
+
"""
|
@@ -0,0 +1,40 @@
|
|
1
|
+
Feature: Rugular CLI
|
2
|
+
In order to generate an application route
|
3
|
+
As a user of the rugular framework
|
4
|
+
I want to bootstrap the templates necessary to carry this out
|
5
|
+
|
6
|
+
Scenario: Generating a route
|
7
|
+
When I set up Rugular and run "rugular generate route test"
|
8
|
+
And the file "my-app/src/app/test/test.controller.coffee" should contain:
|
9
|
+
"""
|
10
|
+
angular.module('test').controller('testController', testController)
|
11
|
+
"""
|
12
|
+
And the file "my-app/src/app/test/test.routes.coffee" should contain:
|
13
|
+
"""
|
14
|
+
angular.module('test').config(testRouting)
|
15
|
+
"""
|
16
|
+
And the file "my-app/src/app/test/test.controller.spec.coffee" should contain:
|
17
|
+
"""
|
18
|
+
describe 'testController', ->
|
19
|
+
"""
|
20
|
+
And the file "my-app/src/app/test/test.haml" should contain:
|
21
|
+
"""
|
22
|
+
%h1 test
|
23
|
+
"""
|
24
|
+
And the file "my-app/src/app/app.module.coffee" should contain:
|
25
|
+
"""
|
26
|
+
'test'
|
27
|
+
"""
|
28
|
+
And the file "my-app/src/app/test/test.module.coffee" should contain:
|
29
|
+
"""
|
30
|
+
angular.module 'test', [
|
31
|
+
'ui.router'
|
32
|
+
]
|
33
|
+
"""
|
34
|
+
|
35
|
+
Scenario: Generating a route in the components directory
|
36
|
+
When I set up Rugular and run "rugular generate route -c test"
|
37
|
+
And the file "my-app/src/components/test/test.controller.coffee" should contain:
|
38
|
+
"""
|
39
|
+
angular.module('test').controller('testController', testController)
|
40
|
+
"""
|
@@ -0,0 +1,29 @@
|
|
1
|
+
Feature: Rugular CLI
|
2
|
+
In order to generate initial files
|
3
|
+
As a user of the rugular framework
|
4
|
+
I want bootstrap the files necessary to start hacking!
|
5
|
+
|
6
|
+
Scenario: New
|
7
|
+
When I run `rugular new my-app`
|
8
|
+
Then the exit status should be 0
|
9
|
+
Then the file "my-app/.gitignore" should contain:
|
10
|
+
"""
|
11
|
+
bower_components
|
12
|
+
"""
|
13
|
+
And the file "my-app/bower.json" should contain:
|
14
|
+
"""
|
15
|
+
"name": "my-app",
|
16
|
+
"""
|
17
|
+
And the file "my-app/package.json" should contain:
|
18
|
+
"""
|
19
|
+
"name": "my-app",
|
20
|
+
"""
|
21
|
+
And the file "my-app/karma.conf.js" should contain:
|
22
|
+
"""
|
23
|
+
frameworks: ['mocha', 'chai', 'sinon', 'chai-sinon'],
|
24
|
+
"""
|
25
|
+
And the file "my-app/src/index.haml" should contain:
|
26
|
+
"""
|
27
|
+
= javascript_include_tag("./bower_components/angular-ui-router/release/angular-ui-router.js")
|
28
|
+
"""
|
29
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
Dir.glob("#{__dir__}/helpers/**/*.rb").each {|file| require file}
|
2
|
+
|
3
|
+
module Rugular
|
4
|
+
class Build < Thor::Group
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
desc('Creates a minified, compressed version in the dist folder')
|
8
|
+
|
9
|
+
Rugular::AppChecker.check_rugular!(self.name, new.destination_root)
|
10
|
+
|
11
|
+
# TODO: build from the ./.tmp folder
|
12
|
+
def compile_coffeescript
|
13
|
+
puts CoffeeScript.compile File.read("app.coffee")
|
14
|
+
end
|
15
|
+
|
16
|
+
def uglify_css
|
17
|
+
puts Uglifier.compile(CoffeeScript.compile File.read("app.coffee"))
|
18
|
+
end
|
19
|
+
|
20
|
+
def interpret_sass
|
21
|
+
template = File.load('stylesheets/sassy.sass')
|
22
|
+
sass_engine = Sass::Engine.new(template)
|
23
|
+
output = sass_engine.render
|
24
|
+
puts output
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Dir.glob("#{__dir__}/helpers/**/*.rb").each {|file| require file}
|
2
|
+
|
3
|
+
module Rugular
|
4
|
+
class Dependencies < Thor::Group
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
desc('Installs dependencies (bundle, bower and npm)')
|
8
|
+
|
9
|
+
Rugular::AppChecker.check_rugular!(self.name, new.destination_root)
|
10
|
+
|
11
|
+
def bundle
|
12
|
+
`bundle install`
|
13
|
+
end
|
14
|
+
|
15
|
+
def bower
|
16
|
+
`bower install`
|
17
|
+
end
|
18
|
+
|
19
|
+
def npm_install
|
20
|
+
`npm install`
|
21
|
+
end
|
22
|
+
|
23
|
+
# Protractor needs to be installed globally
|
24
|
+
def install_protractor
|
25
|
+
`npm install -g protractor coffee-script mocha`
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
module Rugular
|
4
|
+
class GeneratorBase < Thor::Group
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
argument :name, desc: 'Name for your route'
|
8
|
+
|
9
|
+
# specify a component
|
10
|
+
class_option(
|
11
|
+
:c,
|
12
|
+
type: :boolean,
|
13
|
+
desc: 'create the route in the component folder'
|
14
|
+
)
|
15
|
+
|
16
|
+
def self.source_root
|
17
|
+
__dir__.chomp('/tasks/generate')
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_route_folders
|
21
|
+
route_pathnames.each do |pathname|
|
22
|
+
next(
|
23
|
+
"#{destination_file(pathname)} already exists"
|
24
|
+
) if File.exists? destination_file(pathname)
|
25
|
+
|
26
|
+
create_file destination_file(pathname) do
|
27
|
+
ERB.new(pathname.read).result(
|
28
|
+
open_struct.instance_eval { binding }
|
29
|
+
)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def inject_module_into_app_module
|
35
|
+
insert_into_file(
|
36
|
+
app_module_file,
|
37
|
+
module_declaration,
|
38
|
+
after: "angular.module 'app', [\n"
|
39
|
+
) unless module_declaration_present?
|
40
|
+
end
|
41
|
+
|
42
|
+
def template_files; []; end
|
43
|
+
|
44
|
+
protected
|
45
|
+
|
46
|
+
def folder
|
47
|
+
options[:c] ? "src/components/#{name}" : "src/app/#{name}"
|
48
|
+
end
|
49
|
+
|
50
|
+
def route_pathnames
|
51
|
+
Dir.glob(template_files).map do |file_name|
|
52
|
+
Pathname.new(file_name)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def destination_file(pathname)
|
57
|
+
"#{folder}/#{pathname.basename('.erb').to_s.gsub('app', name)}"
|
58
|
+
end
|
59
|
+
|
60
|
+
def open_struct
|
61
|
+
@_open_struct ||= OpenStruct.new(name: name)
|
62
|
+
end
|
63
|
+
|
64
|
+
def lib_directory
|
65
|
+
__dir__.chomp('/tasks/generate')
|
66
|
+
end
|
67
|
+
|
68
|
+
def app_module_file
|
69
|
+
'src/app/app.module.coffee'
|
70
|
+
end
|
71
|
+
|
72
|
+
def module_declaration
|
73
|
+
" '#{name}'\n"
|
74
|
+
end
|
75
|
+
|
76
|
+
def module_declaration_present?
|
77
|
+
File.read(app_module_file).include? module_declaration
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
Dir.glob("#{__dir__}/helpers/**/*.rb").each {|file| require file}
|
2
|
+
Dir.glob("#{__dir__}/generate/**/*.rb").each {|file| require file}
|
3
|
+
|
4
|
+
module Rugular
|
5
|
+
class Generate < Thor
|
6
|
+
include Thor::Actions
|
7
|
+
|
8
|
+
Rugular::AppChecker.check_rugular!(self.name, new.destination_root)
|
9
|
+
|
10
|
+
desc(
|
11
|
+
'generate <angular_service> <name>',
|
12
|
+
'generates an angular service'
|
13
|
+
)
|
14
|
+
long_desc <<-LONGDESC
|
15
|
+
The generate command creates a new angular service in either the app
|
16
|
+
folder (default) or the components folder with the `-c` option.
|
17
|
+
|
18
|
+
The angular services this command can create include:
|
19
|
+
|
20
|
+
* A route (includes a route, controller, controller_spec and view)
|
21
|
+
* A controller
|
22
|
+
* A factory
|
23
|
+
* A directive (includes a view)
|
24
|
+
|
25
|
+
The name that is passed in is the name of the angular service. The
|
26
|
+
command will also create an angular module if one does not already exist.
|
27
|
+
LONGDESC
|
28
|
+
|
29
|
+
register(
|
30
|
+
Rugular::Route,
|
31
|
+
'route',
|
32
|
+
'route',
|
33
|
+
'build an angular route'
|
34
|
+
)
|
35
|
+
|
36
|
+
register(
|
37
|
+
Rugular::Directive,
|
38
|
+
'directive',
|
39
|
+
'directive',
|
40
|
+
'build an angular directive'
|
41
|
+
)
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Rugular
|
2
|
+
class AppChecker
|
3
|
+
include Thor::Shell
|
4
|
+
|
5
|
+
def self.check_rugular!(task_name, root_directory)
|
6
|
+
new(task_name: task_name, root_directory: root_directory).check_rugular!
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(task_name:, root_directory:)
|
10
|
+
@task_name = task_name
|
11
|
+
@root_directory = root_directory
|
12
|
+
end
|
13
|
+
|
14
|
+
def check_rugular!
|
15
|
+
error(rugular_app_message) unless rugular_app?
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
attr_reader :task_name, :root_directory
|
21
|
+
|
22
|
+
def rugular_app_message
|
23
|
+
"#{task_name} requires a pre-existing Rugular application"
|
24
|
+
end
|
25
|
+
|
26
|
+
def rugular_app?
|
27
|
+
[
|
28
|
+
'bower.json',
|
29
|
+
'package.json',
|
30
|
+
'src/index.haml',
|
31
|
+
'Gemfile',
|
32
|
+
'.tmp'
|
33
|
+
].each do |file_name|
|
34
|
+
destination_file_name = root_directory + '/' + file_name
|
35
|
+
|
36
|
+
return false unless File.exists?(destination_file_name)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
module Rugular
|
5
|
+
class New < Thor::Group
|
6
|
+
include Thor::Actions
|
7
|
+
|
8
|
+
argument :app_name, desc: 'Name for your application'
|
9
|
+
desc('Creates an initial folder structure for developing apps')
|
10
|
+
|
11
|
+
def self.source_root
|
12
|
+
__dir__.chomp('/tasks')
|
13
|
+
end
|
14
|
+
|
15
|
+
def create_application_directory
|
16
|
+
directory "#{lib_directory}/templates/new/", app_open_struct.name
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_custom_files
|
20
|
+
Dir.glob("#{lib_directory}/templates/new_erb/*.erb").each do |file_name|
|
21
|
+
pathname = Pathname.new(file_name)
|
22
|
+
|
23
|
+
create_file "#{app_name}/#{pathname.basename('.erb').to_s}" do
|
24
|
+
ERB.new(pathname.read).result(
|
25
|
+
app_open_struct.instance_eval { binding }
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def create_component_directory
|
32
|
+
empty_directory "#{app_name}/components"
|
33
|
+
end
|
34
|
+
|
35
|
+
def installation_complete
|
36
|
+
puts "Thank you for installing Rugular, please finish setting up your "\
|
37
|
+
"project with: `cd #{app_open_struct.name} && bundle install && "\
|
38
|
+
"rugular dependencies`"
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def app_open_struct
|
44
|
+
@_app_open_struct ||= OpenStruct.new(name: app_name)
|
45
|
+
end
|
46
|
+
|
47
|
+
def lib_directory
|
48
|
+
__dir__.chomp('/tasks')
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Only watch the src folder
|
2
|
+
directories %w(src)
|
3
|
+
|
4
|
+
# Create .tmp folder for localhost server and karma
|
5
|
+
['haml', 'sass'].each do |language|
|
6
|
+
guard language, input: 'src', output: '.tmp', run_at_start: true do
|
7
|
+
watch %r{^src/.+\.#{language}}
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
input_dir = 'src'
|
13
|
+
|
14
|
+
coffeescript_options = {
|
15
|
+
input: input_dir,
|
16
|
+
output: '.tmp',
|
17
|
+
patterns: [%r{^#{input_dir}/(.+\.(?:coffee|coffee\.md|litcoffee))$}]
|
18
|
+
}
|
19
|
+
|
20
|
+
guard 'coffeescript', coffeescript_options do
|
21
|
+
coffeescript_options[:patterns].each { |pattern| watch(pattern) }
|
22
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Dir.glob("#{__dir__}/helpers/**/*.rb").each {|file| require file}
|
2
|
+
require 'open3'
|
3
|
+
|
4
|
+
module Rugular
|
5
|
+
class Server < Thor::Group
|
6
|
+
include Thor::Actions
|
7
|
+
|
8
|
+
Rugular::AppChecker.check_rugular!(self.name, new.destination_root)
|
9
|
+
|
10
|
+
desc(
|
11
|
+
"runs the test suite and a dev server on localhost:8080 "\
|
12
|
+
"(set in lib/rugular/tasks/server/Procfile)"
|
13
|
+
)
|
14
|
+
|
15
|
+
def start_server
|
16
|
+
system(
|
17
|
+
"bundle exec foreman start --color --root=#{destination_root} " \
|
18
|
+
"--procfile=#{rugular_procfile}"
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def rugular_procfile
|
25
|
+
"#{__dir__}/server/Procfile"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|