fast_track 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/bin/track +12 -0
- data/fast_track.gemspec +24 -0
- data/lib/fast_track/app.rb +1 -0
- data/lib/fast_track/awesome_defaults.rb +22 -0
- data/lib/fast_track/backbone.rb +41 -0
- data/lib/fast_track/better_exceptions.rb +20 -0
- data/lib/fast_track/cancan.rb +12 -0
- data/lib/fast_track/config.rb +30 -0
- data/lib/fast_track/devise.rb +94 -0
- data/lib/fast_track/errbit_heroku.rb +7 -0
- data/lib/fast_track/generator.rb +47 -0
- data/lib/fast_track/guard.rb +24 -0
- data/lib/fast_track/jquery.rb +19 -0
- data/lib/fast_track/omniauth.rb +76 -0
- data/lib/fast_track/rolify.rb +12 -0
- data/lib/fast_track/track.rb +79 -0
- data/lib/fast_track/track_methods.rb +28 -0
- data/lib/fast_track/twitter_bootstrap.rb +74 -0
- data/lib/fast_track/version.rb +3 -0
- data/lib/fast_track.rb +5 -0
- data/lib/templates/guard_awesome_defaults/Guardfile +32 -0
- data/lib/templates/twitter_bootstrap/application.css +9 -0
- data/lib/templates/twitter_bootstrap/bootstrap_flash_helper.rb +23 -0
- data/lib/templates/twitter_bootstrap_nav_bar/_messages.html.erb +8 -0
- data/lib/templates/twitter_bootstrap_nav_bar/_navigation.html.erb +28 -0
- data/lib/templates/twitter_bootstrap_nav_bar/application.html.erb +37 -0
- data/lib/templates/twitter_bootstrap_nav_bar/application_helper.rb +5 -0
- metadata +135 -0
data/.document
ADDED
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Farley Knight
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# FastTrack
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'fast_track'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install fast_track
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/track
ADDED
data/fast_track.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'fast_track/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "fast_track"
|
8
|
+
spec.version = FastTrack::VERSION
|
9
|
+
spec.authors = ["Farley Knight"]
|
10
|
+
spec.email = ["farleyknight@gmail.com"]
|
11
|
+
spec.summary = %q{Create Rails apps quickly.}
|
12
|
+
spec.description = %q{Leverage the Rails generator to architect new Rails apps with lots of default gems, templates, and other recipes, quickly.}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rspec"
|
24
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
# ??
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class FastTrack
|
2
|
+
class AwesomeDefaults < Track
|
3
|
+
gemfile do
|
4
|
+
gem_group :development do
|
5
|
+
gem 'better_errors'
|
6
|
+
gem 'binding_of_caller'
|
7
|
+
gem 'quiet_assets'
|
8
|
+
gem 'pry'
|
9
|
+
gem 'pry-rails'
|
10
|
+
end
|
11
|
+
|
12
|
+
gem_group :test do
|
13
|
+
gem 'rspec-rails'
|
14
|
+
gem 'factory_girl_rails'
|
15
|
+
gem 'database_cleaner'
|
16
|
+
gem 'email_spec'
|
17
|
+
gem 'pry'
|
18
|
+
gem 'pry-rails'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class FastTrack
|
2
|
+
class BackboneOnRails
|
3
|
+
rubygem "backbone-on-rails"
|
4
|
+
github_url "https://github.com/meleyal/backbone-on-rails"
|
5
|
+
github_description "
|
6
|
+
A simple gem for using Backbone.js with Rails (>= 3.1),
|
7
|
+
based on thoughtbot's 'Backbone.js on Rails'.
|
8
|
+
|
9
|
+
http://git.io/backbone-on-rails
|
10
|
+
"
|
11
|
+
|
12
|
+
gemfile do
|
13
|
+
gem 'backbone-on-rails'
|
14
|
+
end
|
15
|
+
|
16
|
+
def invoke
|
17
|
+
generate "backbone:install"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class BackboneRails
|
22
|
+
rubygem "backbone-rails"
|
23
|
+
github_url "https://github.com/aflatter/backbone-rails"
|
24
|
+
|
25
|
+
github_description "
|
26
|
+
Developing javascript applications on top of rails just got faster thanks to the Rails 3.1 asset pipeline. Like jquery-rails, this gem bundles some javascript files to make them available to your application:
|
27
|
+
|
28
|
+
* backbone
|
29
|
+
* underscore
|
30
|
+
* json2
|
31
|
+
"
|
32
|
+
|
33
|
+
gemfile do
|
34
|
+
gem "rails-backbone"
|
35
|
+
end
|
36
|
+
|
37
|
+
def invoke
|
38
|
+
generate "backbone:install"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class FastTrack
|
2
|
+
class BetterExceptions
|
3
|
+
author ""
|
4
|
+
description "Render your http errors in your layout reducing the need for static files."
|
5
|
+
github_url "https://github.com/eric1234/better_exception_app"
|
6
|
+
rubygem_url "https://rubygems.org/gems/better_exception_app"
|
7
|
+
|
8
|
+
gemfile do
|
9
|
+
gem_group :production do
|
10
|
+
gem 'better_exception_app'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def invoke
|
15
|
+
remove_file "public/404.html"
|
16
|
+
remove_file "public/422.html"
|
17
|
+
remove_file "public/500.html"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class FastTrack
|
2
|
+
# TODO: This should take a YAML file and merge it with the defaults!
|
3
|
+
class Config < Hash
|
4
|
+
# TODO: This config file should have nested information for each
|
5
|
+
# class.. For example:
|
6
|
+
#
|
7
|
+
# >> config = {
|
8
|
+
# >> devise: {user_class: "User"}
|
9
|
+
# >> }
|
10
|
+
#
|
11
|
+
# Should probably map to
|
12
|
+
#
|
13
|
+
# >> config.devise.user_class?
|
14
|
+
#
|
15
|
+
|
16
|
+
# The user class for Devise.
|
17
|
+
# By default it's just "User"
|
18
|
+
def user_class
|
19
|
+
self[:user_class] || "user"
|
20
|
+
end
|
21
|
+
|
22
|
+
def profile_class
|
23
|
+
self[:profile_class] || "profile"
|
24
|
+
end
|
25
|
+
|
26
|
+
def skip_views
|
27
|
+
self[:skip_views] || false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
class FastTrack
|
2
|
+
# Vanilla Devise
|
3
|
+
class Devise < Track
|
4
|
+
gemfile do
|
5
|
+
gem 'devise'
|
6
|
+
end
|
7
|
+
|
8
|
+
before_migrate do
|
9
|
+
generate "devise:install"
|
10
|
+
generate "devise", config.user_class
|
11
|
+
end
|
12
|
+
|
13
|
+
def invoke
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Devise with views
|
18
|
+
class DeviseWithViews < Track
|
19
|
+
gemfile do
|
20
|
+
gem 'devise'
|
21
|
+
end
|
22
|
+
|
23
|
+
before_migrate do
|
24
|
+
generate "devise:install"
|
25
|
+
generate "devise", config.user_class
|
26
|
+
generate "devise:views"
|
27
|
+
end
|
28
|
+
|
29
|
+
def invoke
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Devise User with a Profile class, for storing personal information about the user.
|
34
|
+
class DeviseWithProfile < Track
|
35
|
+
gemfile do
|
36
|
+
gem 'devise'
|
37
|
+
end
|
38
|
+
|
39
|
+
before_migrate do
|
40
|
+
generate "devise:install"
|
41
|
+
generate "devise", config.user_class
|
42
|
+
generate "devise:views"
|
43
|
+
end
|
44
|
+
|
45
|
+
def invoke
|
46
|
+
model config.profile_class, {
|
47
|
+
"first_name" => "string",
|
48
|
+
"last_name" => "string",
|
49
|
+
"favorite_color" => "string",
|
50
|
+
"#{config.user_class}_id" => "integer"
|
51
|
+
}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# TODO
|
56
|
+
#
|
57
|
+
# A User object has_one of...
|
58
|
+
#
|
59
|
+
# * Member object
|
60
|
+
# * Admin object
|
61
|
+
class DevisePlusAdmin < Track
|
62
|
+
gemfile do
|
63
|
+
gem 'devise'
|
64
|
+
end
|
65
|
+
|
66
|
+
before_migrate do
|
67
|
+
generate "devise:install"
|
68
|
+
generate "devise", config.user_class
|
69
|
+
end
|
70
|
+
|
71
|
+
def invoke
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# TODO
|
76
|
+
# A User object has_one of...
|
77
|
+
#
|
78
|
+
# * Member object
|
79
|
+
# * Moderator object
|
80
|
+
# * Admin object
|
81
|
+
class DeviseThreeTier < Track
|
82
|
+
gemfile do
|
83
|
+
gem 'devise'
|
84
|
+
end
|
85
|
+
|
86
|
+
before_migrate do
|
87
|
+
generate "devise:install"
|
88
|
+
generate "devise", config.user_class
|
89
|
+
end
|
90
|
+
|
91
|
+
def invoke
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class FastTrack
|
2
|
+
class GemInstaller
|
3
|
+
def run(generator)
|
4
|
+
FastTrack.tracks.each do |klass|
|
5
|
+
unless klass.gemfile_block.blank?
|
6
|
+
generator.instance_eval(&klass.gemfile_block)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class BeforeMigrate
|
13
|
+
def run(generator)
|
14
|
+
FastTrack.tracks.each do |klass|
|
15
|
+
unless klass.before_migrate_block.blank?
|
16
|
+
generator.instance_eval(&klass.before_migrate_block)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Runner
|
23
|
+
def run(generator)
|
24
|
+
FastTrack.tracks.each do |klass|
|
25
|
+
if klass.instance_methods.include? :invoke
|
26
|
+
klass.new(generator).invoke
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class Generator < Rails::Generators::AppGenerator
|
33
|
+
include TrackMethods
|
34
|
+
|
35
|
+
source_root Rails::Generators::AppGenerator.source_root
|
36
|
+
|
37
|
+
def fasttrack
|
38
|
+
FastTrack::GemInstaller.new.run(self)
|
39
|
+
run("bundle install")
|
40
|
+
|
41
|
+
FastTrack::Runner.new.run(self)
|
42
|
+
|
43
|
+
FastTrack::BeforeMigrate.new.run(self)
|
44
|
+
rake("db:migrate")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class FastTrack
|
2
|
+
class Guard < Track
|
3
|
+
end
|
4
|
+
|
5
|
+
class GuardAwesomeDefaults
|
6
|
+
gemfile do
|
7
|
+
gem 'guard'
|
8
|
+
gem 'guard-rspec'
|
9
|
+
gem 'guard-jasmine'
|
10
|
+
gem 'guard-livereload'
|
11
|
+
end
|
12
|
+
|
13
|
+
def template_directory
|
14
|
+
"guard_awesome_defaults"
|
15
|
+
end
|
16
|
+
|
17
|
+
def guard_file
|
18
|
+
read_file("Guardfile")
|
19
|
+
end
|
20
|
+
|
21
|
+
def invoke
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class FastTrack
|
2
|
+
class Jquery < Track
|
3
|
+
rubygem "jquery-rails"
|
4
|
+
github_url "https://github.com/indirect/jquery-rails"
|
5
|
+
|
6
|
+
github_description "
|
7
|
+
This gem provides:
|
8
|
+
|
9
|
+
jQuery 1.7.2
|
10
|
+
jQuery UI 1.8.18 (javascript only)
|
11
|
+
the jQuery UJS adapter
|
12
|
+
assert_select_jquery to test jQuery responses in Ruby tests
|
13
|
+
"
|
14
|
+
|
15
|
+
gemfile do
|
16
|
+
gem 'jquery-rails'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
class FastTrack
|
2
|
+
# TODO
|
3
|
+
#
|
4
|
+
# Add Omniauth without adding any social networks
|
5
|
+
#
|
6
|
+
# Based on this gist: https://gist.github.com/schleg/993566
|
7
|
+
class Omniauth < Track
|
8
|
+
gemfile do
|
9
|
+
gem "omniauth"
|
10
|
+
end
|
11
|
+
|
12
|
+
def invoke
|
13
|
+
migration "add_name_to_users", {
|
14
|
+
"name" => "string"
|
15
|
+
}
|
16
|
+
|
17
|
+
model "Authorization", {
|
18
|
+
"provider" => "string",
|
19
|
+
"uid" => "string",
|
20
|
+
"user_id" => "integer",
|
21
|
+
"token" => "string",
|
22
|
+
"secret" => "string",
|
23
|
+
"name" => "string",
|
24
|
+
"link" => "string"
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# TODO
|
30
|
+
# Devise + Facebook
|
31
|
+
#
|
32
|
+
class OmniauthFacebook < Track
|
33
|
+
def files
|
34
|
+
{
|
35
|
+
controller: "devise_facebook/omniauth_controller.rb",
|
36
|
+
initializer: "devise_facebook/initializer.rb",
|
37
|
+
config: "devise_facebook/facebook.yml",
|
38
|
+
user: "devise_facebook/user.rb"
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
gemfile do
|
43
|
+
gem "omniauth"
|
44
|
+
gem "omniauth-facebook"
|
45
|
+
end
|
46
|
+
|
47
|
+
def invoke
|
48
|
+
|
49
|
+
gsub_file "config/routes.rb", "devise_for :users", 'devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }'
|
50
|
+
|
51
|
+
migration "AddUidToUsers", {
|
52
|
+
"provider" => "string",
|
53
|
+
"uid" => "string",
|
54
|
+
"name" => "string"
|
55
|
+
}
|
56
|
+
|
57
|
+
file "app/controllers/users/omniauth_callbacks_controller.rb", open_file(:controller)
|
58
|
+
file "config/initializers/devise_facebook.rb", open_file(:initializer)
|
59
|
+
file "app/models/user.rb", open_file(:user), :force => true
|
60
|
+
|
61
|
+
# TODO: Check if facebook_config is available
|
62
|
+
# Otherwise, just give the vanilla version
|
63
|
+
# file "config/facebook.yml", replace(open_file(:config), facebook_config)
|
64
|
+
file "config/facebook.yml", open_file(:config)
|
65
|
+
|
66
|
+
rake "db:migrate"
|
67
|
+
end
|
68
|
+
|
69
|
+
def facebook_config
|
70
|
+
{
|
71
|
+
"[APP_ID]" => config[:app_id],
|
72
|
+
"[APP_SECRET]" => config[:app_secret]
|
73
|
+
}
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
class FastTrack
|
2
|
+
class Track
|
3
|
+
include TrackMethods
|
4
|
+
|
5
|
+
attr_accessor :generator
|
6
|
+
|
7
|
+
def initialize(generator)
|
8
|
+
@generator = generator
|
9
|
+
end
|
10
|
+
|
11
|
+
# Describe a Gemfile using `gem` and `gem_group`
|
12
|
+
def self.gemfile(&block)
|
13
|
+
@gemfile_block = block
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.gemfile_block
|
17
|
+
@gemfile_block
|
18
|
+
end
|
19
|
+
|
20
|
+
# Tasks before migration
|
21
|
+
def self.before_migrate(&block)
|
22
|
+
@before_migrate_block = block
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.before_migrate_block
|
26
|
+
@before_migrate_block
|
27
|
+
end
|
28
|
+
|
29
|
+
# If you need to get the base-level generator object, it's
|
30
|
+
# available here.
|
31
|
+
def g
|
32
|
+
generator
|
33
|
+
end
|
34
|
+
|
35
|
+
# Add a gem
|
36
|
+
#
|
37
|
+
# TODO: Find a way to consolidate all gems at once, so we only have to run
|
38
|
+
# `bundle install` once.
|
39
|
+
def gem(*args)
|
40
|
+
g.gem(*args)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Run rake
|
44
|
+
def rake(*args)
|
45
|
+
g.rake(*args)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Run any command
|
49
|
+
def run(*args)
|
50
|
+
g.run(*args)
|
51
|
+
end
|
52
|
+
|
53
|
+
alias :bundle_install! :bundle_install
|
54
|
+
|
55
|
+
def generate(*args)
|
56
|
+
g.generate(*args)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Add a route to config/routes.rb
|
60
|
+
def route(*args)
|
61
|
+
g.route(*args)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Add a file
|
65
|
+
def create_file(*args)
|
66
|
+
g.create_file(*args)
|
67
|
+
end
|
68
|
+
|
69
|
+
# Create a gem group
|
70
|
+
def gem_group(*args, &block)
|
71
|
+
generator.gem_group(*args, &block)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Read a file from the templates directory
|
75
|
+
def read_file(file_name)
|
76
|
+
File.read(File.join(FastTrack.template_root, template_directory, file_name))
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class FastTrack
|
2
|
+
module TrackMethods
|
3
|
+
# Do a `bundle install`
|
4
|
+
def bundle_install
|
5
|
+
run "bundle install"
|
6
|
+
end
|
7
|
+
|
8
|
+
def config
|
9
|
+
::FastTrack.config
|
10
|
+
end
|
11
|
+
|
12
|
+
def migration(migration_name, columns = {})
|
13
|
+
migration_columns = columns.map {|k, v| "#{k}:#{v}" }
|
14
|
+
generate "migration", migration_name, *migration_columns
|
15
|
+
end
|
16
|
+
|
17
|
+
# Do a `rake db:migrate`
|
18
|
+
def db_migrate!
|
19
|
+
rake "db:migrate"
|
20
|
+
end
|
21
|
+
|
22
|
+
# Create a model `model_name`
|
23
|
+
def model(model_name, columns = {})
|
24
|
+
model_columns = columns.map {|k, v| "#{k}:#{v}" }
|
25
|
+
generate "model", model_name, *model_columns
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
class FastTrack
|
2
|
+
class TwitterBootstrap < Track
|
3
|
+
gemfile do
|
4
|
+
gem "twitter-bootstrap-rails"
|
5
|
+
gem "less-rails"
|
6
|
+
gem 'jquery-rails'
|
7
|
+
|
8
|
+
gem_group :assets do
|
9
|
+
gem 'less'
|
10
|
+
gem 'commonjs'
|
11
|
+
gem 'therubyracer', :platforms => :ruby
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def template_directory
|
16
|
+
"twitter_bootstrap"
|
17
|
+
end
|
18
|
+
|
19
|
+
def flash_helper
|
20
|
+
read_file("bootstrap_flash_helper.rb")
|
21
|
+
end
|
22
|
+
|
23
|
+
def application_css
|
24
|
+
read_file("application.css")
|
25
|
+
end
|
26
|
+
|
27
|
+
def invoke
|
28
|
+
generate "controller Home index"
|
29
|
+
route "root to: 'home#index'"
|
30
|
+
|
31
|
+
generate "bootstrap:install less"
|
32
|
+
generate "bootstrap:layout application fixed --force"
|
33
|
+
|
34
|
+
create_file "app/helpers/bootstrap_flash_helper.rb", flash_helper
|
35
|
+
create_file "app/assets/stylesheets/application.css", application_css, force: true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Create a layout that includes a customizable nav bar
|
40
|
+
class TwitterBootstrapNavBar < Track
|
41
|
+
def template_directory
|
42
|
+
"twitter_bootstrap_nav_bar"
|
43
|
+
end
|
44
|
+
|
45
|
+
def layout_for_application
|
46
|
+
read_file("application.html.erb")
|
47
|
+
end
|
48
|
+
|
49
|
+
def nav_bar
|
50
|
+
read_file("_navigation.html.erb")
|
51
|
+
end
|
52
|
+
|
53
|
+
def messages
|
54
|
+
read_file("_messages.html.erb")
|
55
|
+
end
|
56
|
+
|
57
|
+
def application_helper
|
58
|
+
read_file("application_helper.rb")
|
59
|
+
end
|
60
|
+
|
61
|
+
def invoke
|
62
|
+
unless FastTrack.tracks.any? {|t| t =~ "devise" }
|
63
|
+
raise "TwitterBootstrapNavBar requires Devise! Please include it in your --tracks!"
|
64
|
+
end
|
65
|
+
|
66
|
+
create_file "app/views/layouts/application.html.erb", layout_for_application, force: true
|
67
|
+
create_file "app/helpers/application_helper.rb", application_helper, force: true
|
68
|
+
|
69
|
+
# NOTE: _navigation.html.erb requires Devise to work properly!
|
70
|
+
create_file "app/views/layouts/_navigation.html.erb", nav_bar
|
71
|
+
create_file "app/views/layouts/_messages.html.erb", messages
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
data/lib/fast_track.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# More info at https://github.com/guard/guard#readme
|
2
|
+
|
3
|
+
guard :livereload do
|
4
|
+
watch(%r{app/views/.+\.slim$})
|
5
|
+
watch(%r{app/helpers/.+\.rb})
|
6
|
+
watch(%r{public/.+\.(css|js|html)})
|
7
|
+
watch(%r{config/locales/.+\.yml})
|
8
|
+
# Rails Assets Pipeline
|
9
|
+
watch(%r{(app|vendor)(/assets/\w+/(.+\.(css|js|html))).*}) { |m| "/assets/#{m[3]}" }
|
10
|
+
end
|
11
|
+
|
12
|
+
guard :rspec do
|
13
|
+
watch(%r{^spec/.+_spec\.rb$})
|
14
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
15
|
+
watch('spec/spec_helper.rb') { "spec" }
|
16
|
+
|
17
|
+
# Rails example
|
18
|
+
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
19
|
+
watch(%r{^app/(.*)(\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
20
|
+
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/requests/#{m[1]}_spec.rb"] }
|
21
|
+
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
22
|
+
watch('app/controllers/application_controller.rb') { "spec/controllers" }
|
23
|
+
|
24
|
+
# Capybara request specs
|
25
|
+
watch(%r{^app/views/(.+)/.*(\.slim)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
|
26
|
+
end
|
27
|
+
|
28
|
+
guard :jasmine do
|
29
|
+
watch(%r{spec/javascripts/spec\.(js\.coffee|js|coffee)$}) { 'spec/javascripts' }
|
30
|
+
watch(%r{spec/javascripts/.+_spec\.(js\.coffee|js|coffee)$})
|
31
|
+
watch(%r{app/assets/javascripts/(.+?)\.(js\.coffee|js|coffee)(?:\.\w+)*$}) { |m| "spec/javascripts/#{ m[1] }_spec.#{ m[2] }" }
|
32
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module BootstrapFlashHelper
|
2
|
+
ALERT_TYPES = [:error, :info, :success, :warning]
|
3
|
+
|
4
|
+
def bootstrap_flash
|
5
|
+
flash_messages = []
|
6
|
+
flash.each do |type, message|
|
7
|
+
# Skip empty messages, e.g. for devise messages set to nothing in a locale file.
|
8
|
+
next if message.blank?
|
9
|
+
|
10
|
+
type = :success if type == :notice
|
11
|
+
type = :error if type == :alert
|
12
|
+
next unless ALERT_TYPES.include?(type)
|
13
|
+
|
14
|
+
Array(message).each do |msg|
|
15
|
+
text = content_tag(:div,
|
16
|
+
content_tag(:button, raw("×"), :class => "close", "data-dismiss" => "alert") +
|
17
|
+
msg.html_safe, :class => "alert fade in alert-#{type}")
|
18
|
+
flash_messages << text if msg
|
19
|
+
end
|
20
|
+
end
|
21
|
+
flash_messages.join("\n").html_safe
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<% flash.each do |name, msg| %>
|
2
|
+
<% if msg.is_a?(String) %>
|
3
|
+
<div class="alert alert-<%= name == :notice ? "success" : "error" %>">
|
4
|
+
<a class="close" data-dismiss="alert">×</a>
|
5
|
+
<%= content_tag :div, msg, :id => "flash_#{name}" %>
|
6
|
+
</div>
|
7
|
+
<% end %>
|
8
|
+
<% end %>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<%= link_to application_name, root_path, :class => 'brand' %>
|
2
|
+
|
3
|
+
<ul class="nav">
|
4
|
+
<% if user_signed_in? %>
|
5
|
+
<li>
|
6
|
+
<%= link_to 'Logout', destroy_user_session_path, :method=>'delete' %>
|
7
|
+
</li>
|
8
|
+
<% else %>
|
9
|
+
<li>
|
10
|
+
<%= link_to 'Login', new_user_session_path %>
|
11
|
+
</li>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<% if user_signed_in? %>
|
15
|
+
<li>
|
16
|
+
<%= link_to 'Edit account', edit_user_registration_path %>
|
17
|
+
</li>
|
18
|
+
<% if current_user.has_role? :admin %>
|
19
|
+
<li>
|
20
|
+
<%= link_to 'Admin', users_path %>
|
21
|
+
</li>
|
22
|
+
<% end %>
|
23
|
+
<% else %>
|
24
|
+
<li>
|
25
|
+
<%= link_to 'Sign up', new_user_registration_path %>
|
26
|
+
</li>
|
27
|
+
<% end %>
|
28
|
+
</ul>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
5
|
+
<title>
|
6
|
+
<%= content_for?(:title) ? yield(:title) : application_name %>
|
7
|
+
</title>
|
8
|
+
<meta name="description" content="<%= content_for?(:description) ? yield(:description) : application_name %>">
|
9
|
+
<%= stylesheet_link_tag "application", :media => "all" %>
|
10
|
+
<%= javascript_include_tag "application" %>
|
11
|
+
<%= csrf_meta_tags %>
|
12
|
+
<%= yield(:head) %>
|
13
|
+
</head>
|
14
|
+
<body class="<%= controller_name %> <%= action_name %>">
|
15
|
+
<div class="navbar navbar-fixed-top">
|
16
|
+
<nav class="navbar-inner">
|
17
|
+
<div class="container">
|
18
|
+
<%= render 'layouts/navigation' %>
|
19
|
+
</div>
|
20
|
+
</nav>
|
21
|
+
</div>
|
22
|
+
<div id="main" role="main">
|
23
|
+
<div class="container">
|
24
|
+
<div class="content">
|
25
|
+
<div class="row">
|
26
|
+
<div class="span12">
|
27
|
+
<%= render 'layouts/messages' %>
|
28
|
+
<%= yield %>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
<footer>
|
32
|
+
</footer>
|
33
|
+
</div>
|
34
|
+
</div> <!--! end of .container -->
|
35
|
+
</div> <!--! end of #main -->
|
36
|
+
</body>
|
37
|
+
</html>
|
metadata
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fast_track
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Farley Knight
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-09-27 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.3'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
description: Leverage the Rails generator to architect new Rails apps with lots of
|
63
|
+
default gems, templates, and other recipes, quickly.
|
64
|
+
email:
|
65
|
+
- farleyknight@gmail.com
|
66
|
+
executables:
|
67
|
+
- track
|
68
|
+
extensions: []
|
69
|
+
extra_rdoc_files: []
|
70
|
+
files:
|
71
|
+
- .document
|
72
|
+
- .gitignore
|
73
|
+
- Gemfile
|
74
|
+
- LICENSE.txt
|
75
|
+
- README.md
|
76
|
+
- Rakefile
|
77
|
+
- bin/track
|
78
|
+
- fast_track.gemspec
|
79
|
+
- lib/fast_track.rb
|
80
|
+
- lib/fast_track/app.rb
|
81
|
+
- lib/fast_track/awesome_defaults.rb
|
82
|
+
- lib/fast_track/backbone.rb
|
83
|
+
- lib/fast_track/better_exceptions.rb
|
84
|
+
- lib/fast_track/cancan.rb
|
85
|
+
- lib/fast_track/config.rb
|
86
|
+
- lib/fast_track/devise.rb
|
87
|
+
- lib/fast_track/errbit_heroku.rb
|
88
|
+
- lib/fast_track/generator.rb
|
89
|
+
- lib/fast_track/guard.rb
|
90
|
+
- lib/fast_track/jquery.rb
|
91
|
+
- lib/fast_track/omniauth.rb
|
92
|
+
- lib/fast_track/rolify.rb
|
93
|
+
- lib/fast_track/track.rb
|
94
|
+
- lib/fast_track/track_methods.rb
|
95
|
+
- lib/fast_track/twitter_bootstrap.rb
|
96
|
+
- lib/fast_track/version.rb
|
97
|
+
- lib/templates/guard_awesome_defaults/Guardfile
|
98
|
+
- lib/templates/twitter_bootstrap/application.css
|
99
|
+
- lib/templates/twitter_bootstrap/bootstrap_flash_helper.rb
|
100
|
+
- lib/templates/twitter_bootstrap_nav_bar/_messages.html.erb
|
101
|
+
- lib/templates/twitter_bootstrap_nav_bar/_navigation.html.erb
|
102
|
+
- lib/templates/twitter_bootstrap_nav_bar/application.html.erb
|
103
|
+
- lib/templates/twitter_bootstrap_nav_bar/application_helper.rb
|
104
|
+
homepage: ''
|
105
|
+
licenses:
|
106
|
+
- MIT
|
107
|
+
post_install_message:
|
108
|
+
rdoc_options: []
|
109
|
+
require_paths:
|
110
|
+
- lib
|
111
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
112
|
+
none: false
|
113
|
+
requirements:
|
114
|
+
- - ! '>='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
segments:
|
118
|
+
- 0
|
119
|
+
hash: 901443202263976725
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
segments:
|
127
|
+
- 0
|
128
|
+
hash: 901443202263976725
|
129
|
+
requirements: []
|
130
|
+
rubyforge_project:
|
131
|
+
rubygems_version: 1.8.25
|
132
|
+
signing_key:
|
133
|
+
specification_version: 3
|
134
|
+
summary: Create Rails apps quickly.
|
135
|
+
test_files: []
|