laces 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. data/CONTRIBUTING.md +38 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +122 -0
  4. data/LICENSE +21 -0
  5. data/README.md +5 -0
  6. data/Rakefile +8 -0
  7. data/bin/laces +16 -0
  8. data/features/creating_a_heroku_app.feature +9 -0
  9. data/features/rake_clean.feature +21 -0
  10. data/features/skipping_clearance.feature +13 -0
  11. data/features/step_definitions/gem_steps.rb +5 -0
  12. data/features/step_definitions/heroku_steps.rb +3 -0
  13. data/features/step_definitions/shell_steps.rb +55 -0
  14. data/features/support/bin/heroku +5 -0
  15. data/features/support/env.rb +15 -0
  16. data/features/support/fake_heroku.rb +21 -0
  17. data/laces-0.0.1.gem +0 -0
  18. data/laces.gemspec +35 -0
  19. data/lib/laces/actions.rb +35 -0
  20. data/lib/laces/app_builder.rb +237 -0
  21. data/lib/laces/generators/app_generator.rb +111 -0
  22. data/lib/laces/version.rb +3 -0
  23. data/templates/.DS_Store +0 -0
  24. data/templates/Gemfile_template +76 -0
  25. data/templates/HEROKU_README.md +66 -0
  26. data/templates/Procfile +1 -0
  27. data/templates/README.md +81 -0
  28. data/templates/app/assets/imgs/glyphicons-halflings-white.png +0 -0
  29. data/templates/app/assets/imgs/glyphicons-halflings.png +0 -0
  30. data/templates/app/assets/javascripts/admin.coffee +20 -0
  31. data/templates/app/assets/javascripts/application.coffee +21 -0
  32. data/templates/app/assets/javascripts/lib/actinology.coffee +47 -0
  33. data/templates/app/assets/javascripts/lib/analytics.js +11 -0
  34. data/templates/app/assets/javascripts/lib/auth_token_sync.js +17 -0
  35. data/templates/app/assets/javascripts/lib/backbone-ui.js +2455 -0
  36. data/templates/app/assets/javascripts/lib/backbone.coffee +27 -0
  37. data/templates/app/assets/javascripts/lib/backbone/collection.js +249 -0
  38. data/templates/app/assets/javascripts/lib/backbone/events.js +64 -0
  39. data/templates/app/assets/javascripts/lib/backbone/helpers.js +68 -0
  40. data/templates/app/assets/javascripts/lib/backbone/history.js +144 -0
  41. data/templates/app/assets/javascripts/lib/backbone/model.js +291 -0
  42. data/templates/app/assets/javascripts/lib/backbone/router.coffee +45 -0
  43. data/templates/app/assets/javascripts/lib/backbone/sync.coffee +38 -0
  44. data/templates/app/assets/javascripts/lib/backbone/view.js +150 -0
  45. data/templates/app/assets/javascripts/lib/backbone_extended.coffee +276 -0
  46. data/templates/app/assets/javascripts/lib/bootstrap.js +1836 -0
  47. data/templates/app/assets/javascripts/lib/inflection.js +658 -0
  48. data/templates/app/assets/javascripts/lib/jquery-ui.js +343 -0
  49. data/templates/app/assets/javascripts/lib/jquery.hotkeys.js +102 -0
  50. data/templates/app/assets/javascripts/lib/jquery.js +4 -0
  51. data/templates/app/assets/javascripts/lib/milk.js.coffee +265 -0
  52. data/templates/app/assets/javascripts/lib/raw.js +143 -0
  53. data/templates/app/assets/javascripts/lib/strftime.js +732 -0
  54. data/templates/app/assets/javascripts/lib/throttle-debounce.js +251 -0
  55. data/templates/app/assets/javascripts/lib/timeago.js +148 -0
  56. data/templates/app/assets/javascripts/lib/underscore.js +28 -0
  57. data/templates/app/assets/styles/application.sass +21 -0
  58. data/templates/app/assets/styles/layouts/default.sass +15 -0
  59. data/templates/app/assets/styles/layouts/footer.sass +0 -0
  60. data/templates/app/assets/styles/layouts/forms.sass +34 -0
  61. data/templates/app/assets/styles/layouts/header.sass +0 -0
  62. data/templates/app/assets/styles/layouts/navigation.sass +0 -0
  63. data/templates/app/assets/styles/lib/backbone-ui.css +580 -0
  64. data/templates/app/assets/styles/lib/bootstrap.sass +4248 -0
  65. data/templates/app/assets/styles/pages/home.sass +0 -0
  66. data/templates/app/assets/styles/sessions/new.sass +0 -0
  67. data/templates/app/assets/styles/users/activate.sass +0 -0
  68. data/templates/app/assets/styles/users/new.sass +0 -0
  69. data/templates/app/assets/styles/users/suspended.sass +0 -0
  70. data/templates/app/controllers/app_controller.rb +14 -0
  71. data/templates/app/controllers/pages_controller.rb +2 -0
  72. data/templates/app/controllers/sessions_controller.rb +2 -0
  73. data/templates/app/controllers/templating_controller.rb +31 -0
  74. data/templates/app/controllers/users_controller.rb +2 -0
  75. data/templates/app/helpers/app_helper.rb +94 -0
  76. data/templates/app/helpers/users_helper.rb +53 -0
  77. data/templates/app/models/user.rb +9 -0
  78. data/templates/app/views/devise/confirmations/new.haml +9 -0
  79. data/templates/app/views/devise/passwords/edit.haml +11 -0
  80. data/templates/app/views/devise/passwords/new.haml +9 -0
  81. data/templates/app/views/devise/registrations/edit.haml +13 -0
  82. data/templates/app/views/devise/registrations/new.haml +8 -0
  83. data/templates/app/views/devise/sessions/_form.haml +7 -0
  84. data/templates/app/views/devise/sessions/new.haml +5 -0
  85. data/templates/app/views/devise/unlocks/new.haml +7 -0
  86. data/templates/app/views/layouts/_ascii.haml +0 -0
  87. data/templates/app/views/layouts/_column.haml +0 -0
  88. data/templates/app/views/layouts/_content.haml +1 -0
  89. data/templates/app/views/layouts/_extra.haml +0 -0
  90. data/templates/app/views/layouts/_footer.haml +9 -0
  91. data/templates/app/views/layouts/_head.haml +13 -0
  92. data/templates/app/views/layouts/_header.haml +6 -0
  93. data/templates/app/views/layouts/application.html.haml +16 -0
  94. data/templates/app/views/pages/home.haml +1 -0
  95. data/templates/config/app.yml +29 -0
  96. data/templates/config/application.erb +28 -0
  97. data/templates/config/database.yml +32 -0
  98. data/templates/config/initializers/devise.rb +232 -0
  99. data/templates/config/initializers/rabl_init.rb +4 -0
  100. data/templates/config/initializers/setup_mail.rb +13 -0
  101. data/templates/config/initializers/wrap_parameters.rb +12 -0
  102. data/templates/db/migrate/user_migration.rb +36 -0
  103. data/templates/laces_gitignore +9 -0
  104. data/templates/lib/development_mail_interceptor.rb +7 -0
  105. data/templates/lib/templating.rb +40 -0
  106. metadata +225 -0
@@ -0,0 +1,14 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+ helper :all
4
+
5
+ helper_method :_user, :logged_in?
6
+
7
+ def _user
8
+ current_user
9
+ end
10
+
11
+ def logged_in?
12
+ user_signed_in?
13
+ end
14
+ end
@@ -0,0 +1,2 @@
1
+ class PagesController < ApplicationController
2
+ end
@@ -0,0 +1,2 @@
1
+ class SessionsController < ApplicationController
2
+ end
@@ -0,0 +1,31 @@
1
+ class TemplatingController < AbstractController::Base
2
+ include AbstractController::Logger
3
+ include AbstractController::Rendering
4
+ include AbstractController::Layouts
5
+ include AbstractController::Helpers
6
+ include AbstractController::Translation
7
+ include AbstractController::AssetPaths
8
+ include Rails.application.routes.url_helpers
9
+
10
+ self.view_paths = 'app/views'
11
+ self.assets_dir = 'app/public'
12
+
13
+ helper ApplicationHelper,
14
+ JennyHelper,
15
+ Admin::ApplicationHelper,
16
+ Admin::CoursesHelper,
17
+ DocumentsHelper,
18
+ VideosHelper,
19
+ UsersHelper,
20
+ UploadsHelper,
21
+ DownloadsHelper,
22
+ GroupsHelper,
23
+ Admin::DepartmentsHelper,
24
+ NavigationHelper
25
+
26
+ public
27
+ def r partial
28
+ render :partial => partial
29
+ end
30
+
31
+ end
@@ -0,0 +1,2 @@
1
+ class UsersController < ApplicationController
2
+ end
@@ -0,0 +1,94 @@
1
+ module ApplicationHelper
2
+ def body_attrs
3
+ attrs = {}
4
+ class_name = [location_name,I18n.locale,ENV['RAILS_ENV']]
5
+ class_name << 'signup_process' if signup_location?
6
+ class_name << 'admin' if admin_location?
7
+ class_name << 'static' if static_pages?
8
+ class_name << (logged_in? ? 'logged_in' : 'logged_out')
9
+ attrs[:location] = location_name
10
+ attrs[:controller] = controller.controller_name
11
+ attrs[:action] = action_name
12
+ attrs[:class] = class_name.join ' '
13
+ attrs[:query] = controller.controller_name if admin_location?
14
+ attrs
15
+ end
16
+
17
+ def content_attrs
18
+ class_name = if content_for?(:extra) && content_for?(:column)
19
+ 'content_wrap_extra'
20
+ elsif content_for? :extra
21
+ 'content_single_extra'
22
+ elsif content_for? :column
23
+ 'content_wrap'
24
+ else
25
+ 'content_single'
26
+ end
27
+ attrs = {}
28
+ attrs[:class] = class_name
29
+ attrs
30
+ end
31
+
32
+ def asset_dir
33
+ admin_location? ? :admin : :application
34
+ end
35
+
36
+ def admin_location?
37
+ location_match? 'admin'
38
+ end
39
+
40
+ def signup_location?
41
+ location_name? 'new_users'
42
+ end
43
+
44
+ def location_name?(*names)
45
+ names.any?{ |name| name == location_name }
46
+ end
47
+
48
+ def location_name
49
+ "#{action_name}_#{controller.controller_name}"
50
+ end
51
+
52
+ def location_match?(*names)
53
+ names.any?{ |name| controller.controller_path.match(/#{name}/) }
54
+ end
55
+
56
+ def static_pages?
57
+ pages = %w{about_pages}
58
+ location_name? *pages
59
+ end
60
+
61
+ def ascii
62
+ partial 'layouts/ascii'
63
+ end
64
+
65
+ def head
66
+ partial '%head', 'layouts/head'
67
+ end
68
+
69
+ def content
70
+ partial 'layouts/content'
71
+ end
72
+
73
+ def extra
74
+ return unless content_for? :extra
75
+ partial ['.extra_wrap','.extra'], 'layouts/extra'
76
+ end
77
+
78
+ def column
79
+ return unless content_for? :column
80
+ partial '.column.expand', 'layouts/column'
81
+ end
82
+
83
+ def header
84
+ partial ['.header_wrap','.header'], 'layouts/header'
85
+ end
86
+
87
+ def footer
88
+ partial ['.footer_wrap','.footer'], 'layouts/footer'
89
+ end
90
+
91
+ def google_analytics
92
+ javascript_include_tag 'lib/analytics'
93
+ end
94
+ end
@@ -0,0 +1,53 @@
1
+ module UsersHelper
2
+ def registration_form_for user, &proc
3
+ devise_form_for :registration, user, &proc
4
+ end
5
+
6
+ def session_form_for user, &proc
7
+ devise_form_for :session, user, &proc
8
+ end
9
+
10
+ def confirmation_form_for user, &proc
11
+ devise_form_for :confirmation, user, &proc
12
+ end
13
+
14
+ def password_form_for user, &proc
15
+ devise_form_for :password, user, &proc
16
+ end
17
+
18
+ def devise_form_for name, user, &proc
19
+ url = nil
20
+ eval "url = #{name}_path :user"
21
+ html = { class: 'default' }
22
+ form_for user, url: url, html: html, &proc
23
+ end
24
+
25
+ def session_form user
26
+ partial 'users/sessions/form', user: user
27
+ end
28
+
29
+ def signup_link
30
+ name = 'Sign up'
31
+ path = new_registration_path :user
32
+ link_to name, path
33
+ end
34
+
35
+ def signin_link
36
+ name = 'Sign in'
37
+ path = new_session_path :user
38
+ link_to name, path
39
+ end
40
+
41
+ def forgot_link
42
+ name = 'Forgot your password?'
43
+ path = new_password_path :user
44
+ link_to name, path
45
+ end
46
+
47
+ def confirm_link
48
+ name = "Didn't receive confirmation instructions?"
49
+ path = new_confirmation_path :user
50
+ link_to name, path
51
+ end
52
+ end
53
+
@@ -0,0 +1,9 @@
1
+ class User < ActiveRecord::Base
2
+ devise :database_authenticatable,
3
+ :registerable,
4
+ :recoverable,
5
+ :rememberable,
6
+ :trackable,
7
+ :validatable,
8
+ :confirmable
9
+ end
@@ -0,0 +1,9 @@
1
+ %h2 Resend confirmation instructions
2
+ = confirmation_form_for resource do |f|
3
+ = devise_error_messages!
4
+ = app_text_field f, :email
5
+ .submit
6
+ = submit_tag 'Resend confirmation instructions'
7
+
8
+ = forgot_link
9
+ = confirm_link
@@ -0,0 +1,11 @@
1
+ %h2 Change your password
2
+ = password_form_for resource, &proc
3
+ = devise_error_messages!
4
+ = f.hidden_field :reset_password_token
5
+ = app_password_field f, :password
6
+ = app_password_field f, :password_confirmation
7
+ .submit
8
+ = submit_tag 'Change my password'
9
+
10
+ = forgot_link
11
+ = confirm_link
@@ -0,0 +1,9 @@
1
+ %h2 Forgot your password?
2
+ = password_form_for resource, &proc
3
+ = devise_error_messages!
4
+ = app_text_field :email
5
+ .submit
6
+ = submit_tag 'Send me reset password instructions'
7
+
8
+ = forgot_link
9
+ = confirm_link
@@ -0,0 +1,13 @@
1
+ %h2
2
+ Edit #{resource_name.to_s.humanize}
3
+ = registration_form_for resource do |f|
4
+ = devise_error_messages!
5
+ = app_text_field f, :email
6
+ = app_password_field f, :password
7
+ = app_password_field f, :password_confirmation
8
+ = app_password_field f, :current_password
9
+ .submit
10
+ = submit_tag 'Update'
11
+ %h3 Cancel my account
12
+ %p
13
+ Unhappy? #{link_to "Cancel my account", registration_path(resource_name), :data => { :confirm => "Are you sure?" }, :method => :delete}.
@@ -0,0 +1,8 @@
1
+ %h2 Sign up
2
+ = registration_form_for resource do |f|
3
+ = devise_error_messages!
4
+ = app_text_field f, :email
5
+ = app_password_field f, :password
6
+ = app_password_field f, :password_confirmation
7
+ .submit
8
+ = submit_tag 'Sign up'
@@ -0,0 +1,7 @@
1
+ = session_form_for user do |f|
2
+ = app_text_field f, :email
3
+ = app_password_field f, :password
4
+ - if devise_mapping.rememberable?
5
+ = app_checkbox f, :remember_me
6
+ .submit
7
+ = submit_tag 'Sign in'
@@ -0,0 +1,5 @@
1
+ %h2 Sign in
2
+ = session_form resource
3
+
4
+ = forgot_link
5
+ = confirm_link
@@ -0,0 +1,7 @@
1
+ %h2 Resend unlock instructions
2
+ = form_for(resource, :as => resource_name, :url => unlock_path(resource_name), :html => { :method => :post }) do |f|
3
+ = devise_error_messages!
4
+ = app_text_field f, :email
5
+ .submit
6
+ = submit_tag 'Resend unlock instructions'
7
+ = render "devise/shared/links"
@@ -0,0 +1,9 @@
1
+ .copyright
2
+ %p
3
+ %span
4
+ Copyright
5
+ &copy;
6
+ = Time.current.year
7
+ <%= app_name.classify %>
8
+ All rights reserved.
9
+ .clear
@@ -0,0 +1,13 @@
1
+ %meta{ 'http-equiv' => "content-type", :content => "text/html;charset=utf-8" }
2
+ = csrf_meta_tag
3
+ %title <%= app_name.classify %>
4
+ = stylesheet_link_tag asset_dir
5
+ = javascript_include_tag asset_dir
6
+
7
+ %link{ :rel => 'shortcut icon' ,:href => '/favicon.ico' }
8
+ %meta{ :property => 'og:title' ,:content => '<%= app_name.classify %>' }
9
+ %meta{ :property => 'og:type' ,:content => 'website' }
10
+ %meta{ :property => 'og:url' ,:content => 'https://domain.com' }
11
+ %meta{ :property => 'og:image' ,:content => 'https://domain.com/assets/logo.png' }
12
+ %meta{ :property => 'og:site_name' ,:content => '<%= app_name.classify %>' }
13
+ %meta{ :property => 'og:description',:content => '' }
@@ -0,0 +1,6 @@
1
+ .navbar
2
+ .navbar-inner
3
+ %ul.nav
4
+ - unless logged_in?
5
+ %li= signup_link
6
+ %li= signin_link
@@ -0,0 +1,16 @@
1
+ !!!
2
+ %html
3
+ = ascii
4
+ = head
5
+ %body{body_attrs}
6
+ .container
7
+ = header
8
+ .wrapper
9
+ = content
10
+ = column
11
+ = extra
12
+ .clear
13
+ = footer
14
+ = footer
15
+ = google_analytics
16
+
@@ -0,0 +1 @@
1
+ This is your home page
@@ -0,0 +1,29 @@
1
+ defaults: &DEFAULTS
2
+ domain: 'localhost:3000'
3
+ mail:
4
+ address : 'smtp.sendgrid.net'
5
+ port : 587
6
+ domain : 'domain.com'
7
+ user_name : 'user'
8
+ password : 'password'
9
+ authenication : 'plain'
10
+ enable_starttls_auto : true
11
+ development:
12
+ <<: *DEFAULTS
13
+ production:
14
+ <<: *DEFAULTS
15
+ domain: 'domain.com'
16
+ mail:
17
+ address : 'smtp.sendgrid.net'
18
+ port : 587
19
+ domain : 'domain.com'
20
+ user_name : 'user'
21
+ password : 'password'
22
+ authenication : 'plain'
23
+ enable_starttls_auto : true
24
+ staging:
25
+ <<: *DEFAULTS
26
+ domain: 'stage.domain.com'
27
+ test: &TEST
28
+ <<: *DEFAULTS
29
+
@@ -0,0 +1,28 @@
1
+ require File.expand_path('../boot', __FILE__)
2
+
3
+ require 'rails/all'
4
+
5
+ Bundler.require *Rails.groups(:assets) if defined?(Bundler)
6
+
7
+ module <%= app_name.classify %>
8
+
9
+ def self.config
10
+ Rails.configuration
11
+ end
12
+
13
+ class Application < Rails::Application
14
+ config.from_file 'app.yml'
15
+ config.encoding = 'utf-8'
16
+ config.assets.enabled = true
17
+ config.filter_parameters += [:password]
18
+ config.time_zone = "Eastern Time (US & Canada)"
19
+ config.autoload_paths += %W(#{Rails.root}/lib)
20
+ config.generators do |g|
21
+ g.template_engine :haml
22
+ g.test_framework :rspec, :fixture => false
23
+ end
24
+ end
25
+
26
+ Object.const_set :APP, config
27
+ end
28
+
@@ -0,0 +1,32 @@
1
+ production:
2
+ adapter: mysql2
3
+ encoding: utf8
4
+ reconnect: false
5
+ database: <%= app_name %>_pro
6
+ pool: 5
7
+ username: root
8
+ password:
9
+ socket: <%=RUBY_PLATFORM.downcase.include?("darwin") ? '/tmp/mysql.sock' : '/var/run/mysqld/mysqld.sock' %>
10
+
11
+ development:
12
+ adapter: mysql2
13
+ encoding: utf8
14
+ reconnect: false
15
+ database: <%= app_name %>_dev
16
+ pool: 5
17
+ username: root
18
+ password:
19
+ socket: <%=RUBY_PLATFORM.downcase.include?("darwin") ? '/tmp/mysql.sock' : '/var/run/mysqld/mysqld.sock' %>
20
+
21
+ test: &test
22
+ adapter: mysql2
23
+ encoding: utf8
24
+ reconnect: true
25
+ database: <%= app_name %>_test
26
+ pool: 5
27
+ username: root
28
+ password:
29
+ socket: <%=RUBY_PLATFORM.downcase.include?("darwin") ? '/tmp/mysql.sock' : '/var/run/mysqld/mysqld.sock' %>
30
+
31
+ cucumber:
32
+ <<: *test