bootstrappers2 4.0
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/CHANGELOG.md +57 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +23 -0
- data/README.md +100 -0
- data/Rakefile +2 -0
- data/TODO.md +23 -0
- data/bin/bootstrappers +12 -0
- data/bootstrapers.gemspec +22 -0
- data/lib/bootstrapers.rb +5 -0
- data/lib/bootstrappers/actions.rb +35 -0
- data/lib/bootstrappers/app_builder.rb +102 -0
- data/lib/bootstrappers/generators/app_generator.rb +161 -0
- data/lib/bootstrappers/layout_actions.rb +88 -0
- data/lib/bootstrappers/version.rb +3 -0
- data/templates/Gemfile_additions +47 -0
- data/templates/README.md.erb +14 -0
- data/templates/application_controller_rb +28 -0
- data/templates/bootstrappers_gitignore +7 -0
- data/templates/bootstrappers_layout.html.erb.erb +53 -0
- data/templates/capistrano/Capfile +5 -0
- data/templates/capistrano/deploy/assets.rb +30 -0
- data/templates/capistrano/deploy_rb.erb +80 -0
- data/templates/common/_bootstrap_modal.html.erb +4 -0
- data/templates/common/_facebook_js.erb +9 -0
- data/templates/common/_footer.html.erb +10 -0
- data/templates/common/_google_analytics.html.erb +13 -0
- data/templates/common/_menu.html.erb +32 -0
- data/templates/common/_not_logined.js.erb +4 -0
- data/templates/common/_search_form.html.erb +5 -0
- data/templates/common/_user_nav.html.erb +27 -0
- data/templates/config_yml.erb +21 -0
- data/templates/initializers/seo_helper.rb +11 -0
- data/templates/javascripts/README +0 -0
- data/templates/javascripts/application.js +5 -0
- data/templates/mysql_database.yml.erb +12 -0
- data/templates/setting.rb +5 -0
- data/templates/stylesheets/application.css.scss +2 -0
- data/templates/stylesheets/bootstrap-override.css.scss +11 -0
- data/templates/stylesheets/bootstrap-setting.css.scss +3 -0
- data/templates/stylesheets/common.css.scss +29 -0
- data/templates/tasks/dev.rake +10 -0
- data/templates/welcome.html.erb +3 -0
- metadata +117 -0
@@ -0,0 +1,88 @@
|
|
1
|
+
module Bootstrappers
|
2
|
+
module LayoutActions
|
3
|
+
|
4
|
+
def readme
|
5
|
+
template 'README.md.erb', 'README.md'
|
6
|
+
end
|
7
|
+
|
8
|
+
def remove_public_index
|
9
|
+
remove_file 'public/index.html'
|
10
|
+
end
|
11
|
+
|
12
|
+
def remove_rails_logo_image
|
13
|
+
remove_file 'app/assets/images/rails.png'
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_partials_directory
|
17
|
+
empty_directory 'app/views/application'
|
18
|
+
empty_directory 'app/views/pages'
|
19
|
+
empty_directory 'app/views/common'
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_application_layout
|
23
|
+
template 'bootstrappers_layout.html.erb.erb',
|
24
|
+
'app/views/layouts/application.html.erb',
|
25
|
+
:force => true
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_common_javascripts
|
29
|
+
remove_file 'app/assets/javascripts/application.js'
|
30
|
+
directory 'javascripts', 'app/assets/javascripts'
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_common_stylesheets
|
34
|
+
remove_file 'app/assets/stylesheets/application.css'
|
35
|
+
directory 'stylesheets', 'app/assets/stylesheets'
|
36
|
+
end
|
37
|
+
|
38
|
+
def create_common_partial
|
39
|
+
directory 'common', 'app/views/common'
|
40
|
+
end
|
41
|
+
|
42
|
+
def add_jquery_ui
|
43
|
+
inject_into_file 'app/assets/javascripts/application.js',
|
44
|
+
"//= require jquery-ui\n", :before => '//= require_tree .'
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_bootstrap_js
|
48
|
+
inject_into_file 'app/assets/javascripts/application.js',
|
49
|
+
"//= require twitter/bootstrap/alert\n", :before => '//= require_tree .'
|
50
|
+
end
|
51
|
+
|
52
|
+
def add_custom_gems
|
53
|
+
additions_path = find_in_source_paths 'Gemfile_additions'
|
54
|
+
new_gems = File.open(additions_path).read
|
55
|
+
inject_into_file 'Gemfile', "\n#{new_gems}",
|
56
|
+
:after => /gem 'jquery-rails'/
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
def setup_stylesheets
|
61
|
+
copy_file 'app/assets/stylesheets/application.css', 'app/assets/stylesheets/application.css.scss'
|
62
|
+
remove_file 'app/assets/stylesheets/application.css'
|
63
|
+
concat_file 'import_scss_styles', 'app/assets/stylesheets/application.css.scss'
|
64
|
+
end
|
65
|
+
|
66
|
+
def setup_root_route
|
67
|
+
template 'welcome.html.erb', 'app/views/pages/welcome.html.erb',:force => true
|
68
|
+
route "root :to => 'high_voltage/pages#show', :id => 'welcome'"
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
def customize_error_pages
|
73
|
+
meta_tags =<<-EOS
|
74
|
+
<meta charset='utf-8' />
|
75
|
+
<meta name='ROBOTS' content='NOODP' />
|
76
|
+
EOS
|
77
|
+
style_tags =<<-EOS
|
78
|
+
<link href='/assets/application.css' media='all' rel='stylesheet' type='text/css' />
|
79
|
+
EOS
|
80
|
+
%w(500 404 422).each do |page|
|
81
|
+
inject_into_file "public/#{page}.html", meta_tags, :after => "<head>\n"
|
82
|
+
replace_in_file "public/#{page}.html", /<style.+>.+<\/style>/mi, style_tags.strip
|
83
|
+
replace_in_file "public/#{page}.html", /<!--.+-->\n/, ''
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
gem "seo_helper", "~> 1.0"
|
2
|
+
gem "open_graph_helper"
|
3
|
+
|
4
|
+
gem "rmagick"
|
5
|
+
gem "carrierwave"
|
6
|
+
gem "carrierwave-meta"
|
7
|
+
|
8
|
+
gem "settingslogic"
|
9
|
+
|
10
|
+
gem "anjlab-bootstrap-rails", ">= 2.2.2", :require => "bootstrap-rails"
|
11
|
+
gem "bootstrap_helper", ">= 4.2.2.1"
|
12
|
+
gem "simple_form", "~> 3.0.0.beta1"
|
13
|
+
gem "will_paginate", "3.0.3"
|
14
|
+
|
15
|
+
gem "high_voltage"
|
16
|
+
|
17
|
+
gem "airbrake"
|
18
|
+
|
19
|
+
gem "rvm-capistrano"
|
20
|
+
|
21
|
+
gem "omniauth"
|
22
|
+
gem "omniauth-facebook"
|
23
|
+
gem "auto-facebook", "0.1.rails4"
|
24
|
+
|
25
|
+
|
26
|
+
gem "hipchat"
|
27
|
+
|
28
|
+
# Cache
|
29
|
+
gem "dalli"
|
30
|
+
|
31
|
+
group :assets do
|
32
|
+
gem "compass-rails", :git => "git@github.com:Compass/compass-rails.git", :branch => "rails4"
|
33
|
+
end
|
34
|
+
|
35
|
+
group :development do
|
36
|
+
gem "capistrano"
|
37
|
+
gem "capistrano-ext"
|
38
|
+
gem "cape"
|
39
|
+
gem "binding_of_caller"
|
40
|
+
gem "better_errors"
|
41
|
+
gem "magic_encoding"
|
42
|
+
gem "annotate"
|
43
|
+
gem "powder"
|
44
|
+
gem "pry-nav"
|
45
|
+
gem "pry-remote"
|
46
|
+
end
|
47
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
### Style Guides
|
3
|
+
|
4
|
+
* [Ruby Style Guide](https://github.com/bbatsov/ruby-style-guide)
|
5
|
+
* [Rails Style Guide](https://github.com/bbatsov/rails-style-guide)
|
6
|
+
* [Better Specs](http://betterspecs.org/)
|
7
|
+
* [Rails Best Practices](http://rails-bestpractices.com/)
|
8
|
+
|
9
|
+
### Speedup Tips
|
10
|
+
|
11
|
+
* [Speed up the Rails Asset Pipeline precompile process](http://stackoverflow.com/questions/11390447/how-can-you-speed-up-the-rails-asset-pipeline-precompile-process/11390454#11390454)
|
12
|
+
|
13
|
+
|
14
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class ApplicationController < ActionController::Base
|
2
|
+
protect_from_forgery
|
3
|
+
|
4
|
+
def login_required
|
5
|
+
if current_user.blank?
|
6
|
+
respond_to do |format|
|
7
|
+
format.html {
|
8
|
+
authenticate_user!
|
9
|
+
}
|
10
|
+
format.js{
|
11
|
+
render :partial => "common/not_logined"
|
12
|
+
}
|
13
|
+
format.all {
|
14
|
+
head(:unauthorized)
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def require_is_admin
|
23
|
+
unless (current_user && current_user.admin?)
|
24
|
+
redirect_to root_path, :flash => { :error => "no permission" }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<%%= render_page_title_tag %>
|
5
|
+
<%%= render_page_description_meta_tag %>
|
6
|
+
<%%= render_page_keywords_meta_tag %>
|
7
|
+
<%%= render_page_image_link_tag %>
|
8
|
+
<%%= csrf_meta_tag %>
|
9
|
+
|
10
|
+
<%%= stylesheet_link_tag "application" %>
|
11
|
+
|
12
|
+
<%%= yield :stylesheets %>
|
13
|
+
|
14
|
+
<meta property="og:title" content="<%%= page_title || SeoHelper.configuration.site_name %>"/>
|
15
|
+
<meta property="og:description" content="<%%= page_description || SeoHelper.configuration.default_page_description %>"/>
|
16
|
+
<meta property="og:image:url" content="<%%= page_image || SeoHelper.configuration.default_page_image %>"/>
|
17
|
+
|
18
|
+
</head>
|
19
|
+
|
20
|
+
<%%= render_body_tag %>
|
21
|
+
|
22
|
+
<%%= render :partial => "common/menu" %>
|
23
|
+
|
24
|
+
<div class="container">
|
25
|
+
|
26
|
+
<%%= notice_message %>
|
27
|
+
|
28
|
+
<div class="content">
|
29
|
+
<div class="row">
|
30
|
+
<%%= yield %>
|
31
|
+
<%%= yield (:sidebar) %>
|
32
|
+
</div>
|
33
|
+
|
34
|
+
</div>
|
35
|
+
|
36
|
+
<%%= render :partial => "common/footer" %>
|
37
|
+
</div>
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
<%%= render :partial => "common/bootstrap_modal" %>
|
44
|
+
<%%= render :partial => "common/facebook_js" %>
|
45
|
+
<%%= render :partial => "common/google_analytics" %>
|
46
|
+
|
47
|
+
<%%= javascript_include_tag "application" %>
|
48
|
+
|
49
|
+
<%%= yield :javascripts %>
|
50
|
+
|
51
|
+
|
52
|
+
</body>
|
53
|
+
</html>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
|
3
|
+
# from https://github.com/AF83/capistrano-af83/blob/master/lib/capistrano/af83/deploy/assets.rb
|
4
|
+
set :assets_dependencies, %w(app/assets lib/assets vendor/assets Gemfile.lock config/routes.rb)
|
5
|
+
|
6
|
+
namespace :deploy do
|
7
|
+
namespace :assets do
|
8
|
+
|
9
|
+
desc <<-DESC
|
10
|
+
Run the asset precompilation rake task. You can specify the full path \
|
11
|
+
to the rake executable by setting the rake variable. You can also \
|
12
|
+
specify additional environment variables to pass to rake via the \
|
13
|
+
asset_env variable. The defaults are:
|
14
|
+
|
15
|
+
set :rake, "rake"
|
16
|
+
set :rails_env, "production"
|
17
|
+
set :asset_env, "RAILS_GROUPS=assets"
|
18
|
+
set :assets_dependencies, fetch(:assets_dependencies) + %w(config/locales/js)
|
19
|
+
DESC
|
20
|
+
task :precompile, :roles => :web, :except => { :no_release => true } do
|
21
|
+
from = source.next_revision(current_revision)
|
22
|
+
if capture("cd #{latest_release} && #{source.local.diff(from)} #{assets_dependencies.join ' '} | wc -l").to_i > 0
|
23
|
+
run %Q{cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} #{asset_env} assets:precompile}
|
24
|
+
else
|
25
|
+
logger.info "Skipping asset pre-compilation because there were no asset changes"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
|
3
|
+
raw_config = File.read("config/config.yml")
|
4
|
+
APP_CONFIG = YAML.load(raw_config)
|
5
|
+
|
6
|
+
require "./config/boot"
|
7
|
+
require "bundler/capistrano"
|
8
|
+
require "rvm-capistrano"
|
9
|
+
|
10
|
+
default_environment["PATH"] = "/opt/ruby/bin:/usr/local/bin:/usr/bin:/bin"
|
11
|
+
|
12
|
+
set :application, "<%= app_name %>"
|
13
|
+
set :repository, "git@github.com:example/#{application}.git"
|
14
|
+
set :deploy_to, "/home/apps/#{application}"
|
15
|
+
|
16
|
+
set :branch, "master"
|
17
|
+
set :scm, :git
|
18
|
+
|
19
|
+
set :user, "apps"
|
20
|
+
set :group, "apps"
|
21
|
+
|
22
|
+
set :deploy_to, "/home/apps/#{application}"
|
23
|
+
set :runner, "apps"
|
24
|
+
set :deploy_via, :remote_cache
|
25
|
+
set :git_shallow_clone, 1
|
26
|
+
set :use_sudo, false
|
27
|
+
set :rvm_ruby_string, '1.9.3'
|
28
|
+
|
29
|
+
set :hipchat_token, APP_CONFIG["production"]["hipchat_token"]
|
30
|
+
set :hipchat_room_name, APP_CONFIG["production"]["hipchat_room_name"]
|
31
|
+
set :hipchat_announce, false # notify users?
|
32
|
+
|
33
|
+
role :web, "<%= app_name %>.com" # Your HTTP server, Apache/etc
|
34
|
+
role :app, "<%= app_name %>.com" # This may be the same as your `Web` server
|
35
|
+
role :db, "<%= app_name %>.com" , :primary => true # This is where Rails migrations will run
|
36
|
+
|
37
|
+
set :deploy_env, "production"
|
38
|
+
set :rails_env, "production"
|
39
|
+
set :scm_verbose, true
|
40
|
+
set :use_sudo, false
|
41
|
+
|
42
|
+
|
43
|
+
namespace :deploy do
|
44
|
+
|
45
|
+
desc "Restart passenger process"
|
46
|
+
task :restart, :roles => [:web], :except => { :no_release => true } do
|
47
|
+
run "touch #{current_path}/tmp/restart.txt"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
namespace :my_tasks do
|
53
|
+
task :symlink, :roles => [:web] do
|
54
|
+
run "mkdir -p #{deploy_to}/shared/log"
|
55
|
+
run "mkdir -p #{deploy_to}/shared/pids"
|
56
|
+
|
57
|
+
symlink_hash = {
|
58
|
+
"#{shared_path}/config/database.yml" => "#{release_path}/config/database.yml",
|
59
|
+
"#{shared_path}/config/s3.yml" => "#{release_path}/config/s3.yml",
|
60
|
+
"#{shared_path}/uploads" => "#{release_path}/public/uploads",
|
61
|
+
}
|
62
|
+
|
63
|
+
symlink_hash.each do |source, target|
|
64
|
+
run "ln -sf #{source} #{target}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
namespace :remote_rake do
|
73
|
+
desc "Run a task on remote servers, ex: cap staging rake:invoke task=cache:clear"
|
74
|
+
task :invoke do
|
75
|
+
run "cd #{deploy_to}/current; RAILS_ENV=#{rails_env} bundle exec rake #{ENV['task']}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
after "deploy:finalize_update", "my_tasks:symlink"
|
80
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
|
2
|
+
<div id="fb-root"></div>
|
3
|
+
<script>(function(d, s, id) {
|
4
|
+
var js, fjs = d.getElementsByTagName(s)[0];
|
5
|
+
if (d.getElementById(id)) {return;}
|
6
|
+
js = d.createElement(s); js.id = id;
|
7
|
+
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=<%= Setting.facebook_app_id%>";
|
8
|
+
fjs.parentNode.insertBefore(js, fjs);
|
9
|
+
}(document, 'script', 'facebook-jssdk'));</script>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<footer class="footer">
|
2
|
+
<%= render_list :class => "nav nav-pills pull-right" do |li|
|
3
|
+
#li << link_to( "Link1", "#")
|
4
|
+
#li << link_to( "Link2", "#")
|
5
|
+
#li << link_to( "Link3", "#")
|
6
|
+
#li << link_to( "Link4", "#")
|
7
|
+
end %>
|
8
|
+
<p class="copyright">Copyright @2012 <%= Setting.app_name %> All rights reserved.</p>
|
9
|
+
|
10
|
+
</footer>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<script type="text/javascript">
|
2
|
+
|
3
|
+
var _gaq = _gaq || [];
|
4
|
+
_gaq.push(['_setAccount', '<%= Setting.google_analytics_key %>']);
|
5
|
+
_gaq.push(['_trackPageview']);
|
6
|
+
|
7
|
+
(function() {
|
8
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
9
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
10
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
11
|
+
})();
|
12
|
+
|
13
|
+
</script>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<div class="navbar navbar-fixed-top ">
|
2
|
+
<div class="navbar-inner top ">
|
3
|
+
<div class="container">
|
4
|
+
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
5
|
+
<span class="icon-bar"></span>
|
6
|
+
<span class="icon-bar"></span>
|
7
|
+
<span class="icon-bar"></span>
|
8
|
+
</a>
|
9
|
+
|
10
|
+
<%= link_to(Setting.app_name, Setting.domain , :class => "brand" )%>
|
11
|
+
|
12
|
+
<%= render :partial => "common/search_form" %>
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
<div class="nav-collapse">
|
17
|
+
|
18
|
+
<%= render_list :class => "nav" do |li|
|
19
|
+
li << link_to("Link-1","#")
|
20
|
+
li << link_to("Link-2","#")
|
21
|
+
li << link_to("Link-3","#")
|
22
|
+
end %>
|
23
|
+
|
24
|
+
<%= render :partial => "common/user_nav"%>
|
25
|
+
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
|
30
|
+
<%= yield :submenu %>
|
31
|
+
|
32
|
+
</div>
|