Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
started working on the bootstrapping generator
  • Loading branch information
Graeme Nelson committed Aug 16, 2010
1 parent 51ab94e commit b207998
Show file tree
Hide file tree
Showing 15 changed files with 205 additions and 2 deletions.
2 changes: 2 additions & 0 deletions .gitignore
@@ -0,0 +1,2 @@
.DS_Store
testrun.txt
11 changes: 11 additions & 0 deletions bootstrap.rb
@@ -0,0 +1,11 @@
require 'rails/generators/named_base'

module Bootstrap
module Generators
class Base < Rails::Generators::NamedBase #:nodoc:
def self.source_root
@_bootstrap_girl_source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'bootstrap', generator_name, 'templates'))
end
end
end
end
56 changes: 56 additions & 0 deletions bootstrap/setup/setup_generator.rb
@@ -0,0 +1,56 @@
require 'generators/bootstrap'

module Bootstrap
module Generators
class SetupGenerator < Base
desc "Description:\n Sets up the initial application with devise as the underlying authentication system."
class_option :email, :type => :string, :default => "admin@site.com", :desc => "The initial admin account email"
class_option :password, :type => :string, :default => "password", :desc => "The initial admin account password"

def setup_devise
# install other packages we need
generate "devise:install", "installing devise"
generate "devise #{name}"
generate "formtastic:install"

resource = name.tableize

# TODO: need to add a root path, for admin it should go to dashboard???
route = <<-ROUTE
devise_for :#{resource}, :path_names => { :sign_in => 'signin', :sign_out => 'signout' }
as :#{resource.singularize} do
get "/signin" => "devise/sessions#new"
get "/signout" => "devise/sessions#destroy"
end
ROUTE

gsub_file "config/routes.rb", "devise_for :#{resource}", route

# devise forms with formtastic support.
run "cp -r #{self.class.source_root}/devise #{Rails.root}/app/views/"

rake "db:migrate"

# create initial admin account
# TODO: need to add super_user/admin role, after we add CanCan
email = options[:email]
password = options[:password]
admin = "Account.create!(:email => '#{email}', :password => '#{password}', :password_confirmation => '#{password}')"
run "rails runner \"#{admin}\""


# TODO: update other devise templates to use Formtastic
# TODO: setup i18n file for Formtastic



#rake "test"
end

def self.banner
"rails generate bootstrap:#{generator_name} <account_class_name> [options]"
end

end
end
end
9 changes: 9 additions & 0 deletions bootstrap/setup/templates/devise/confirmations/new.html.haml
@@ -0,0 +1,9 @@
%h2 Resend confirmation instructions
= form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :html => { :method => :post }) do |f|
= devise_error_messages!
%p
= f.label :email
%br/
= f.text_field :email
%p= f.submit "Resend confirmation instructions"
= render :partial => "devise/shared/links"
@@ -0,0 +1,4 @@
%p
Welcome #{@resource.email}!
%p You can confirm your account through the link below:
%p= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token)
@@ -0,0 +1,6 @@
%p
Hello #{@resource.email}!
%p Someone has requested a link to change your password, and you can do this through the link below.
%p= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token)
%p If you didn't request this, please ignore this email.
%p Your password won't change until you access the link above and create a new one.
@@ -0,0 +1,5 @@
%p
Hello #{@resource.email}!
%p Your account has been locked due to an excessive amount of unsuccessful sign in attempts.
%p Click the link below to unlock your account:
%p= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @resource.unlock_token)
14 changes: 14 additions & 0 deletions bootstrap/setup/templates/devise/passwords/edit.html.haml
@@ -0,0 +1,14 @@
%h2 Change your password
= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f|
= devise_error_messages!
= f.hidden_field :reset_password_token
%p
= f.label :password
%br/
= f.password_field :password
%p
= f.label :password_confirmation
%br/
= f.password_field :password_confirmation
%p= f.submit "Change my password"
= render :partial => "devise/shared/links"
9 changes: 9 additions & 0 deletions bootstrap/setup/templates/devise/passwords/new.html.haml
@@ -0,0 +1,9 @@
%h2 Forgot your password?
= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f|
= devise_error_messages!
%p
= f.label :email
%br/
= f.text_field :email
%p= f.submit "Send me reset password instructions"
= render :partial => "devise/shared/links"
27 changes: 27 additions & 0 deletions bootstrap/setup/templates/devise/registrations/edit.html.haml
@@ -0,0 +1,27 @@
%h2
Edit #{resource_name.to_s.humanize}
= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f|
= devise_error_messages!
%p
= f.label :email
%br/
= f.text_field :email
%p
= f.label :password
%i (leave blank if you don't want to change it)
%br/
= f.password_field :password
%p
= f.label :password_confirmation
%br/
= f.password_field :password_confirmation
%p
= f.label :current_password
%i (we need your current password to confirm your changes)
%br/
= f.password_field :current_password
%p= f.submit "Update"
%h3 Cancel my account
%p
Unhappy? #{link_to "Cancel my account", registration_path(resource_name), :confirm => "Are you sure?", :method => :delete}.
= link_to "Back", :back
17 changes: 17 additions & 0 deletions bootstrap/setup/templates/devise/registrations/new.html.haml
@@ -0,0 +1,17 @@
%h2 Sign up
= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f|
= devise_error_messages!
%p
= f.label :email
%br/
= f.text_field :email
%p
= f.label :password
%br/
= f.password_field :password
%p
= f.label :password_confirmation
%br/
= f.password_field :password_confirmation
%p= f.submit "Sign up"
= render :partial => "devise/shared/links"
11 changes: 11 additions & 0 deletions bootstrap/setup/templates/devise/sessions/new.html.haml
@@ -0,0 +1,11 @@
%h2 Sign in
= semantic_form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |form|
-form.inputs do
=form.input :email
=form.input :password
- if devise_mapping.rememberable?
=form.input :remember_me
-form.buttons do
=form.commit_button

= render :partial => "devise/shared/links"
15 changes: 15 additions & 0 deletions bootstrap/setup/templates/devise/shared/_links.haml
@@ -0,0 +1,15 @@
- if controller_name != 'sessions'
= link_to "Sign in", new_session_path(resource_name)
%br/
- if devise_mapping.registerable? && controller_name != 'registrations'
= link_to "Sign up", new_registration_path(resource_name)
%br/
- if devise_mapping.recoverable? && controller_name != 'passwords'
= link_to "Forgot your password?", new_password_path(resource_name)
%br/
- if devise_mapping.confirmable? && controller_name != 'confirmations'
= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name)
%br/
- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks'
= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name)
%br/
9 changes: 9 additions & 0 deletions bootstrap/setup/templates/devise/unlocks/new.html.haml
@@ -0,0 +1,9 @@
%h2 Resend unlock instructions
= form_for(resource, :as => resource_name, :url => unlock_path(resource_name), :html => { :method => :post }) do |f|
= devise_error_messages!
%p
= f.label :email
%br/
= f.text_field :email
%p= f.submit "Resend unlock instructions"
= render :partial => "devise/shared/links"
12 changes: 10 additions & 2 deletions template.rb
Expand Up @@ -18,6 +18,8 @@
#
# * Google Fonts???
#
# * Look at including http://github.com/himmel/html5-boilerplate
#
# Graeme Nelson, 2010

# If we are running rvm, lets create a new gemset based on
Expand Down Expand Up @@ -48,7 +50,13 @@
# Let's setup the gems we only need for testing
gem "shoulda", ">= 2.11.2", :group => :test
gem "factory_girl_rails", ">= 1.0.0", :group => :test
gem "mocha", ">= 0.9.8", :group => :test
gem "mocha", ">= 0.9.8", :group => :test
gem 'cover_me', '>= 1.0.0.pre1', :require => false, :group => :test

# add cover_me to the test/test_helper.rb, if we add more things to the test_helper.rb
# we might want to consider overwriting the file since there isn't much in the default
# version.
gsub_file("test/test_helper.rb", "require 'rails/test_help'", "require 'rails/test_help'\nrequire 'cover_me'")

# Let's get the generators we want from rails generator, factory_girl, shoulda
git :clone => "--depth 0 http://github.com/indirect/rails3-generators.git"
Expand Down Expand Up @@ -145,7 +153,7 @@ module ActionView::Helpers::AssetTagHelper
% cd #{app_name}
% gem install bundler --version '>= 1.0.0.rc.1'
% bundle install
% rails g app:setup
% rails g bootstrap:setup
DOCS

Expand Down

0 comments on commit b207998

Please sign in to comment.