headstart 0.1.0 → 0.3.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.
- data/README.rdoc +9 -8
- data/Rakefile +5 -5
- data/VERSION +1 -1
- data/app/views/generic_mailer/change_password.html.erb +1 -3
- data/app/views/passwords/edit.html.erb +1 -0
- data/app/views/passwords/new.html.erb +1 -0
- data/app/views/sessions/new.html.erb +4 -8
- data/app/views/users/new.html.erb +1 -0
- data/generators/headstart/headstart_generator.rb +26 -1
- data/generators/headstart/templates/app/helpers/application_helper.rb +27 -0
- data/generators/headstart/templates/app/views/sessions/index.html.erb +2 -1
- data/generators/headstart/templates/application.html.erb +4 -4
- data/generators/headstart/templates/layout.css +26 -0
- data/generators/headstart/templates/modernizr-1.5.min.js +28 -0
- data/generators/headstart/templates/style.css +4 -4
- data/generators/headstart/templates/text.css +35 -1
- metadata +56 -30
data/README.rdoc
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-
=
|
1
|
+
= Headstart
|
2
2
|
|
3
|
-
Blue Light Special is a derivative from Thoughtbot's
|
4
|
-
{Clearance}[http://github.com/thoughtbot/clearance] gem.
|
5
|
-
opinionated starting point for many of our projects at Envy Labs.
|
3
|
+
Headstart is an enhancement based on Blue Light Special which is a derivative from Thoughtbot's
|
4
|
+
{Clearance}[http://github.com/thoughtbot/clearance] gem.
|
6
5
|
|
7
6
|
In addition to the basic email and password authentication provided by
|
8
7
|
Clearance, a default Blue Light Special installation includes:
|
@@ -21,9 +20,9 @@ Clearance, a default Blue Light Special installation includes:
|
|
21
20
|
|
22
21
|
== Setup
|
23
22
|
|
24
|
-
Note: Before
|
23
|
+
Note: Before Headstart can run, the database must be created, the database.yml configured, and permissions granted to the user. The 'create-rails-dev-db' gem does all this. Run it with 'create-rails-dev-db' within the Rails app first.
|
25
24
|
|
26
|
-
After installing the
|
25
|
+
After installing the Headstart gem, require it in your Rails app and run
|
27
26
|
the headstart generator.
|
28
27
|
|
29
28
|
In your config/environment.rb:
|
@@ -93,6 +92,8 @@ After you've finished setting up your Facebook app, grab its API key and secret
|
|
93
92
|
and put them in config/headstart.yml.
|
94
93
|
|
95
94
|
== To Build the Gem ==
|
95
|
+
rake gemspec
|
96
|
+
|
96
97
|
gem build headstart.gemspec
|
97
98
|
|
98
99
|
sudo gem install headstart.gem
|
@@ -111,7 +112,7 @@ gem yank headstart -v 0.1.0
|
|
111
112
|
7. Added a facebook_logout method that facebook can call via its Post-Remove Callback, to remove user from app
|
112
113
|
8. Changed to user can still log in even though they haven't confirmed their email (they just aren't active)
|
113
114
|
9. The change password function was using the confirmation token instead of the password reset token in several spots
|
114
|
-
|
115
|
+
10. Implements http://www.modernizr.com/docs/
|
115
116
|
== Copyright
|
116
117
|
|
117
|
-
Copyright (c) 2010
|
118
|
+
Copyright (c) 2010 Agile Nomads LLC. See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -6,11 +6,11 @@ begin
|
|
6
6
|
require 'jeweler'
|
7
7
|
Jeweler::Tasks.new do |gem|
|
8
8
|
gem.name = "headstart"
|
9
|
-
gem.summary = %Q{Rails
|
10
|
-
gem.description = %Q{
|
11
|
-
gem.email = "
|
12
|
-
gem.homepage = "http://github.com/
|
13
|
-
gem.authors = ["
|
9
|
+
gem.summary = %Q{Headstart provides the Rails developer a headstart in creating a Rails app providing basic user authentication features.}
|
10
|
+
gem.description = %Q{Based on Envy Labs Blue Light Special, but modified to provide more options and features.}
|
11
|
+
gem.email = "brian@burridge.net"
|
12
|
+
gem.homepage = "http://github.com/bburridge/Headstart"
|
13
|
+
gem.authors = ["Bran Burridge"]
|
14
14
|
gem.files = FileList["[A-Z]*", "{app,config,generators,lib,shoulda_macros,rails}/**/*"]
|
15
15
|
|
16
16
|
gem.add_dependency "mini_fb", '=0.2.2'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
@@ -2,8 +2,6 @@ Someone, hopefully you, has requested that we send you a link to change your pas
|
|
2
2
|
|
3
3
|
Here's the link:
|
4
4
|
|
5
|
-
<%=
|
6
|
-
:token => @user.confirmation_token,
|
7
|
-
:escape => false) %>
|
5
|
+
<%= @url %>
|
8
6
|
|
9
7
|
If you didn't request this, ignore this email. Don't worry. Your password hasn't been changed.
|
@@ -1,3 +1,4 @@
|
|
1
|
+
<% content_for :title do %>Sign in<% end %>
|
1
2
|
<%- if Headstart.configuration.use_facebook_connect -%>
|
2
3
|
<%- if request.ssl? -%>
|
3
4
|
<%= javascript_include_tag 'https://ssl.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php/en_US' %>
|
@@ -23,6 +24,8 @@
|
|
23
24
|
<%= form.password_field :password %>
|
24
25
|
</div>
|
25
26
|
<div class="submit_field">
|
27
|
+
<%= link_to "Forgot password?", new_password_path %>
|
28
|
+
|
26
29
|
<%= form.submit "Sign in", :disable_with => "Please wait..." %>
|
27
30
|
<%- if Headstart.configuration.use_facebook_connect -%>
|
28
31
|
or <fb:login-button onlogin="facebook_onlogin();" length="long" v="2" size="large"></fb:login-button>
|
@@ -30,14 +33,7 @@
|
|
30
33
|
</div>
|
31
34
|
<% end %>
|
32
35
|
|
33
|
-
|
34
|
-
<li>
|
35
|
-
<%= link_to "Sign up", sign_up_path %>
|
36
|
-
</li>
|
37
|
-
<li>
|
38
|
-
<%= link_to "Forgot password?", new_password_path %>
|
39
|
-
</li>
|
40
|
-
</ul>
|
36
|
+
|
41
37
|
|
42
38
|
<%- if Headstart.configuration.use_facebook_connect -%>
|
43
39
|
<script type="text/javascript">
|
@@ -14,13 +14,38 @@ class HeadstartGenerator < Rails::Generator::Base
|
|
14
14
|
m.directory File.join("app", "views", "sessions")
|
15
15
|
m.file "application.html.erb", "app/views/layouts/application.html.erb"
|
16
16
|
m.file "app/views/sessions/index.html.erb", "app/views/sessions/index.html.erb"
|
17
|
+
m.insert_into "app/helpers/application_helper.rb",
|
18
|
+
'def format_title(title)
|
19
|
+
title_words = title.split(" ")
|
20
|
+
|
21
|
+
if title_words.size >= 2
|
22
|
+
f_half_loc = (title_words.size/2.0).ceil
|
23
|
+
content = "<span class=\'first_half\'>"
|
24
|
+
(0..f_half_loc-1).each do |i|
|
25
|
+
content += title_words[i]
|
26
|
+
end
|
27
|
+
content += "</span>"
|
28
|
+
|
29
|
+
content += "<span class=\'second_half\'>"
|
30
|
+
(f_half_loc..title_words.size-1).each do |i|
|
31
|
+
content += title_words[i]
|
32
|
+
end
|
33
|
+
content += "</span>"
|
34
|
+
|
35
|
+
else
|
36
|
+
content = title
|
37
|
+
end
|
38
|
+
return content
|
39
|
+
end'
|
17
40
|
|
18
41
|
m.directory File.join("public", "stylesheets")
|
19
42
|
m.file "style.css", "public/stylesheets/style.css"
|
20
|
-
m.file "
|
43
|
+
m.file "report.css", "public/stylesheets/report.css"
|
21
44
|
m.file "reset.css", "public/stylesheets/reset.css"
|
22
45
|
m.file "text.css", "public/stylesheets/text.css"
|
23
46
|
m.file "layout.css", "public/stylesheets/layout.css"
|
47
|
+
|
48
|
+
m.file "modernizr-1.5.min.js", "public/javascripts/modernizr-1.5.min.js"
|
24
49
|
|
25
50
|
m.file "xd_receiver.html", "public/xd_receiver.html"
|
26
51
|
m.file "xd_receiver_ssl.html", "public/xd_receiver_ssl.html"
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Methods added to this helper will be available to all templates in the application.
|
2
|
+
module ApplicationHelper
|
3
|
+
|
4
|
+
def format_title(title)
|
5
|
+
title_words = title.split(" ")
|
6
|
+
|
7
|
+
if title_words.size >= 2
|
8
|
+
f_half_loc = (title_words.size/2.0).ceil
|
9
|
+
content = "<span class='first_half'>"
|
10
|
+
(0..f_half_loc-1).each do |i|
|
11
|
+
content += title_words[i]
|
12
|
+
end
|
13
|
+
content += "</span>"
|
14
|
+
|
15
|
+
content += "<span class='second_half'>"
|
16
|
+
(f_half_loc..title_words.size-1).each do |i|
|
17
|
+
content += title_words[i]
|
18
|
+
end
|
19
|
+
content += "</span>"
|
20
|
+
|
21
|
+
else
|
22
|
+
content = title
|
23
|
+
end
|
24
|
+
return content
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -1 +1,2 @@
|
|
1
|
-
Home
|
1
|
+
<% content_for :title do %>Home<% end %>
|
2
|
+
<p><%= Settings.description %></p>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
2
|
-
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="en-US" lang="en-US" xmlns:fb="http://www.facebook.com/2008/fbml">
|
2
|
+
<html class="no-js" xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="en-US" lang="en-US" xmlns:fb="http://www.facebook.com/2008/fbml">
|
3
3
|
<head>
|
4
4
|
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
5
|
-
<title><%= yield(:title) %></title>
|
5
|
+
<title><%= yield(:title) %><% if @content_for_title %> - <% end %><%= Settings.title %></title>
|
6
6
|
<meta name="description" content="<%= yield(:description) %>" />
|
7
7
|
<meta name="keywords" content="<%= yield(:keywords) %>" />
|
8
8
|
<meta name="robots" content="INDEX,FOLLOW" />
|
@@ -14,14 +14,14 @@
|
|
14
14
|
<%- else -%>
|
15
15
|
<%= javascript_include_tag 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js' %>
|
16
16
|
<%- end -%>
|
17
|
-
<%= javascript_include_tag 'application' %>
|
17
|
+
<%= javascript_include_tag 'application','modernizr-1.5.min' %>
|
18
18
|
</head>
|
19
19
|
<body>
|
20
20
|
|
21
21
|
<div id="header" class="container_12">
|
22
22
|
|
23
23
|
<div id="title" class="grid_6 ">
|
24
|
-
|
24
|
+
<%= link_to format_title(Settings.title), "/" %>
|
25
25
|
</div>
|
26
26
|
|
27
27
|
<div id="nav" class="grid_6 ">
|
@@ -1,3 +1,29 @@
|
|
1
|
+
#header {
|
2
|
+
height:80px;
|
3
|
+
border-bottom:1px solid #000;
|
4
|
+
}
|
5
|
+
#nav {
|
6
|
+
margin-top:54px;
|
7
|
+
height:30px;
|
8
|
+
text-align:right;
|
9
|
+
}
|
10
|
+
#content {
|
11
|
+
width: 940px;
|
12
|
+
padding:10px;
|
13
|
+
min-height:400px;
|
14
|
+
}
|
15
|
+
#footer {
|
16
|
+
border-top:1px solid #aaa;
|
17
|
+
}
|
18
|
+
#meta {
|
19
|
+
text-align:right;
|
20
|
+
}
|
21
|
+
label {
|
22
|
+
display:block;
|
23
|
+
}
|
24
|
+
.text_field, .submit_field {
|
25
|
+
margin-top:6px;
|
26
|
+
}
|
1
27
|
|
2
28
|
/* Containers
|
3
29
|
----------------------------------------------------------------------------------------------------*/
|
@@ -0,0 +1,28 @@
|
|
1
|
+
/*!
|
2
|
+
* Modernizr JavaScript library 1.5
|
3
|
+
* http://www.modernizr.com/
|
4
|
+
*
|
5
|
+
* Copyright (c) 2009-2010 Faruk Ates - http://farukat.es/
|
6
|
+
* Dual-licensed under the BSD and MIT licenses.
|
7
|
+
* http://www.modernizr.com/license/
|
8
|
+
*
|
9
|
+
* Featuring major contributions by
|
10
|
+
* Paul Irish - http://paulirish.com
|
11
|
+
*/
|
12
|
+
window.Modernizr=function(i,e,I){function C(a,b){for(var c in a)if(m[a[c]]!==I&&(!b||b(a[c],D)))return true}function r(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1);return!!C([a,"Webkit"+c,"Moz"+c,"O"+c,"ms"+c,"Khtml"+c],b)}function P(){j[E]=function(a){for(var b=0,c=a.length;b<c;b++)J[a[b]]=!!(a[b]in n);return J}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" "));j[Q]=function(a){for(var b=0,c,h=a.length;b<h;b++){n.setAttribute("type",a[b]);if(c=n.type!==
|
13
|
+
"text"){n.value=K;/tel|search/.test(n.type)||(c=/url|email/.test(n.type)?n.checkValidity&&n.checkValidity()===false:n.value!=K)}L[a[b]]=!!c}return L}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var j={},s=e.documentElement,D=e.createElement("modernizr"),m=D.style,n=e.createElement("input"),E="input",Q=E+"types",K=":)",M=Object.prototype.toString,y=" -o- -moz- -ms- -webkit- -khtml- ".split(" "),d={},L={},J={},N=[],u=function(){var a={select:"input",
|
14
|
+
change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"},b={};return function(c,h){var t=arguments.length==1;if(t&&b[c])return b[c];h=h||document.createElement(a[c]||"div");c="on"+c;var g=c in h;if(!g&&h.setAttribute){h.setAttribute(c,"return;");g=typeof h[c]=="function"}h=null;return t?(b[c]=g):g}}(),F={}.hasOwnProperty,O;O=typeof F!=="undefined"&&typeof F.call!=="undefined"?function(a,b){return F.call(a,b)}:function(a,b){return b in a&&typeof a.constructor.prototype[b]==="undefined"};
|
15
|
+
d.canvas=function(){return!!e.createElement("canvas").getContext};d.canvastext=function(){return!!(d.canvas()&&typeof e.createElement("canvas").getContext("2d").fillText=="function")};d.geolocation=function(){return!!navigator.geolocation};d.crosswindowmessaging=function(){return!!i.postMessage};d.websqldatabase=function(){var a=!!i.openDatabase;if(a)try{a=!!openDatabase("testdb","1.0","html5 test db",2E5)}catch(b){a=false}return a};d.indexedDB=function(){return!!i.indexedDB};d.hashchange=function(){return u("hashchange",
|
16
|
+
i)&&(document.documentMode===I||document.documentMode>7)};d.historymanagement=function(){return!!(i.history&&history.pushState)};d.draganddrop=function(){return u("drag")&&u("dragstart")&&u("dragenter")&&u("dragover")&&u("dragleave")&&u("dragend")&&u("drop")};d.websockets=function(){return"WebSocket"in i};d.rgba=function(){m.cssText="background-color:rgba(150,255,150,.5)";return(""+m.backgroundColor).indexOf("rgba")!==-1};d.hsla=function(){m.cssText="background-color:hsla(120,40%,100%,.5)";return(""+
|
17
|
+
m.backgroundColor).indexOf("rgba")!==-1};d.multiplebgs=function(){m.cssText="background:url(//:),url(//:),red url(//:)";return/(url\s*\(.*?){3}/.test(m.background)};d.backgroundsize=function(){return r("backgroundSize")};d.borderimage=function(){return r("borderImage")};d.borderradius=function(){return r("borderRadius","",function(a){return(""+a).indexOf("orderRadius")!==-1})};d.boxshadow=function(){return r("boxShadow")};d.opacity=function(){var a=y.join("opacity:.5;")+"";m.cssText=a;return(""+m.opacity).indexOf("0.5")!==
|
18
|
+
-1};d.cssanimations=function(){return r("animationName")};d.csscolumns=function(){return r("columnCount")};d.cssgradients=function(){var a=("background-image:"+y.join("gradient(linear,left top,right bottom,from(#9f9),to(white));background-image:")+y.join("linear-gradient(left top,#9f9, white);background-image:")).slice(0,-17);m.cssText=a;return(""+m.backgroundImage).indexOf("gradient")!==-1};d.cssreflections=function(){return r("boxReflect")};d.csstransforms=function(){return!!C(["transformProperty",
|
19
|
+
"WebkitTransform","MozTransform","OTransform","msTransform"])};d.csstransforms3d=function(){var a=!!C(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);if(a){var b=document.createElement("style"),c=e.createElement("div");b.textContent="@media ("+y.join("transform-3d),(")+"modernizr){#modernizr{height:3px}}";e.getElementsByTagName("head")[0].appendChild(b);c.id="modernizr";s.appendChild(c);a=c.offsetHeight===3;b.parentNode.removeChild(b);c.parentNode.removeChild(c)}return a};
|
20
|
+
d.csstransitions=function(){return r("transitionProperty")};d.fontface=function(){var a;if(/*@cc_on@if(@_jscript_version>=5)!@end@*/0)a=true;else{var b=e.createElement("style"),c=e.createElement("span"),h,t=false,g=e.body,o,w;b.textContent="@font-face{font-family:testfont;src:url('data:font/ttf;base64,AAEAAAAMAIAAAwBAT1MvMliohmwAAADMAAAAVmNtYXCp5qrBAAABJAAAANhjdnQgACICiAAAAfwAAAAEZ2FzcP//AAMAAAIAAAAACGdseWYv5OZoAAACCAAAANxoZWFk69bnvwAAAuQAAAA2aGhlYQUJAt8AAAMcAAAAJGhtdHgGDgC4AAADQAAAABRsb2NhAIQAwgAAA1QAAAAMbWF4cABVANgAAANgAAAAIG5hbWUgXduAAAADgAAABPVwb3N03NkzmgAACHgAAAA4AAECBAEsAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAACAAMDAAAAAAAAgAACbwAAAAoAAAAAAAAAAFBmRWQAAAAgqS8DM/8zAFwDMwDNAAAABQAAAAAAAAAAAAMAAAADAAAAHAABAAAAAABGAAMAAQAAAK4ABAAqAAAABgAEAAEAAgAuqQD//wAAAC6pAP///9ZXAwAAAAAAAAACAAAABgBoAAAAAAAvAAEAAAAAAAAAAAAAAAAAAAABAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEACoAAAAGAAQAAQACAC6pAP//AAAALqkA////1lcDAAAAAAAAAAIAAAAiAogAAAAB//8AAgACACIAAAEyAqoAAwAHAC6xAQAvPLIHBADtMrEGBdw8sgMCAO0yALEDAC88sgUEAO0ysgcGAfw8sgECAO0yMxEhESczESMiARDuzMwCqv1WIgJmAAACAFUAAAIRAc0ADwAfAAATFRQWOwEyNj0BNCYrASIGARQGKwEiJj0BNDY7ATIWFX8aIvAiGhoi8CIaAZIoN/43KCg3/jcoAWD0JB4eJPQkHh7++EY2NkbVRjY2RgAAAAABAEH/+QCdAEEACQAANjQ2MzIWFAYjIkEeEA8fHw8QDxwWFhwWAAAAAQAAAAIAAIuYbWpfDzz1AAsEAAAAAADFn9IuAAAAAMWf0i797/8zA4gDMwAAAAgAAgAAAAAAAAABAAADM/8zAFwDx/3v/98DiAABAAAAAAAAAAAAAAAAAAAABQF2ACIAAAAAAVUAAAJmAFUA3QBBAAAAKgAqACoAWgBuAAEAAAAFAFAABwBUAAQAAgAAAAEAAQAAAEAALgADAAMAAAAQAMYAAQAAAAAAAACLAAAAAQAAAAAAAQAhAIsAAQAAAAAAAgAFAKwAAQAAAAAAAwBDALEAAQAAAAAABAAnAPQAAQAAAAAABQAKARsAAQAAAAAABgAmASUAAQAAAAAADgAaAUsAAwABBAkAAAEWAWUAAwABBAkAAQBCAnsAAwABBAkAAgAKAr0AAwABBAkAAwCGAscAAwABBAkABABOA00AAwABBAkABQAUA5sAAwABBAkABgBMA68AAwABBAkADgA0A/tDb3B5cmlnaHQgMjAwOSBieSBEYW5pZWwgSm9obnNvbi4gIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgT3BlbiBGb250IExpY2Vuc2UuIEtheWFoIExpIGdseXBocyBhcmUgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCB2ZXJzaW9uIDMuYmFlYzJhOTJiZmZlNTAzMiAtIHN1YnNldCBvZiBKdXJhTGlnaHRiYWVjMmE5MmJmZmU1MDMyIC0gc3Vic2V0IG9mIEZvbnRGb3JnZSAyLjAgOiBKdXJhIExpZ2h0IDogMjMtMS0yMDA5YmFlYzJhOTJiZmZlNTAzMiAtIHN1YnNldCBvZiBKdXJhIExpZ2h0VmVyc2lvbiAyIGJhZWMyYTkyYmZmZTUwMzIgLSBzdWJzZXQgb2YgSnVyYUxpZ2h0aHR0cDovL3NjcmlwdHMuc2lsLm9yZy9PRkwAQwBvAHAAeQByAGkAZwBoAHQAIAAyADAAMAA5ACAAYgB5ACAARABhAG4AaQBlAGwAIABKAG8AaABuAHMAbwBuAC4AIAAgAFIAZQBsAGUAYQBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGUAIABPAHAAZQBuACAARgBvAG4AdAAgAEwAaQBjAGUAbgBzAGUALgAgAEsAYQB5AGEAaAAgAEwAaQAgAGcAbAB5AHAAaABzACAAYQByAGUAIAByAGUAbABlAGEAcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAEcAUABMACAAdgBlAHIAcwBpAG8AbgAgADMALgBiAGEAZQBjADIAYQA5ADIAYgBmAGYAZQA1ADAAMwAyACAALQAgAHMAdQBiAHMAZQB0ACAAbwBmACAASgB1AHIAYQBMAGkAZwBoAHQAYgBhAGUAYwAyAGEAOQAyAGIAZgBmAGUANQAwADMAMgAgAC0AIABzAHUAYgBzAGUAdAAgAG8AZgAgAEYAbwBuAHQARgBvAHIAZwBlACAAMgAuADAAIAA6ACAASgB1AHIAYQAgAEwAaQBnAGgAdAAgADoAIAAyADMALQAxAC0AMgAwADAAOQBiAGEAZQBjADIAYQA5ADIAYgBmAGYAZQA1ADAAMwAyACAALQAgAHMAdQBiAHMAZQB0ACAAbwBmACAASgB1AHIAYQAgAEwAaQBnAGgAdABWAGUAcgBzAGkAbwBuACAAMgAgAGIAYQBlAGMAMgBhADkAMgBiAGYAZgBlADUAMAAzADIAIAAtACAAcwB1AGIAcwBlAHQAIABvAGYAIABKAHUAcgBhAEwAaQBnAGgAdABoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAAAAAAgAAAAAAAP+BADMAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQACAQIAEQt6ZXJva2F5YWhsaQ==')}";
|
21
|
+
e.getElementsByTagName("head")[0].appendChild(b);c.setAttribute("style","font:99px _,arial,helvetica;position:absolute;visibility:hidden");if(!g){g=s.appendChild(e.createElement("fontface"));t=true}c.innerHTML="........";c.id="fonttest";g.appendChild(c);h=c.offsetWidth*c.offsetHeight;c.style.font="99px testfont,_,arial,helvetica";a=h!==c.offsetWidth*c.offsetHeight;var v=function(){if(g.parentNode){a=j.fontface=h!==c.offsetWidth*c.offsetHeight;s.className=s.className.replace(/(no-)?fontface\b/,"")+
|
22
|
+
(a?" ":" no-")+"fontface"}};setTimeout(v,75);setTimeout(v,150);addEventListener("load",function(){v();(w=true)&&o&&o(a);setTimeout(function(){t||(g=c);g.parentNode.removeChild(g);b.parentNode.removeChild(b)},50)},false)}j._fontfaceready=function(p){w||a?p(a):(o=p)};return a||h!==c.offsetWidth};d.video=function(){var a=e.createElement("video"),b=!!a.canPlayType;if(b){b=new Boolean(b);b.ogg=a.canPlayType('video/ogg; codecs="theora"');b.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"');b.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return b};
|
23
|
+
d.audio=function(){var a=e.createElement("audio"),b=!!a.canPlayType;if(b){b=new Boolean(b);b.ogg=a.canPlayType('audio/ogg; codecs="vorbis"');b.mp3=a.canPlayType("audio/mpeg;");b.wav=a.canPlayType('audio/wav; codecs="1"');b.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")}return b};d.localStorage=function(){return"localStorage"in i&&i.localStorage!==null};d.sessionStorage=function(){try{return"sessionStorage"in i&&i.sessionStorage!==null}catch(a){return false}};d.webworkers=function(){return!!i.Worker};
|
24
|
+
d.applicationCache=function(){var a=i.applicationCache;return!!(a&&typeof a.status!="undefined"&&typeof a.update=="function"&&typeof a.swapCache=="function")};d.svg=function(){return!!e.createElementNS&&!!e.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect};d.smil=function(){return!!e.createElementNS&&/SVG/.test(M.call(e.createElementNS("http://www.w3.org/2000/svg","animate")))};d.svgclippaths=function(){return!!e.createElementNS&&/SVG/.test(M.call(e.createElementNS("http://www.w3.org/2000/svg",
|
25
|
+
"clipPath")))};for(var z in d)if(O(d,z))N.push(((j[z.toLowerCase()]=d[z]())?"":"no-")+z.toLowerCase());j[E]||P();j.addTest=function(a,b){a=a.toLowerCase();if(!j[a]){b=!!b();s.className+=" "+(b?"":"no-")+a;j[a]=b;return j}};m.cssText="";D=n=null;(function(){var a=e.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1})()&&function(a,b){function c(f,k){if(o[f])o[f].styleSheet.cssText+=k;else{var l=t[G],q=b[A]("style");q.media=f;l.insertBefore(q,l[G]);o[f]=q;c(f,k)}}function h(f,
|
26
|
+
k){for(var l=new RegExp("\\b("+w+")\\b(?!.*[;}])","gi"),q=function(B){return".iepp_"+B},x=-1;++x<f.length;){k=f[x].media||k;h(f[x].imports,k);c(k,f[x].cssText.replace(l,q))}}for(var t=b.documentElement,g=b.createDocumentFragment(),o={},w="abbr|article|aside|audio|canvas|command|datalist|details|figure|figcaption|footer|header|hgroup|keygen|mark|meter|nav|output|progress|section|source|summary|time|video",v=w.split("|"),p=[],H=-1,G="firstChild",A="createElement";++H<v.length;){b[A](v[H]);g[A](v[H])}g=
|
27
|
+
g.appendChild(b[A]("div"));a.attachEvent("onbeforeprint",function(){for(var f,k=b.getElementsByTagName("*"),l,q,x=new RegExp("^"+w+"$","i"),B=-1;++B<k.length;)if((f=k[B])&&(q=f.nodeName.match(x))){l=new RegExp("^\\s*<"+q+"(.*)\\/"+q+">\\s*$","i");g.innerHTML=f.outerHTML.replace(/\r|\n/g," ").replace(l,f.currentStyle.display=="block"?"<div$1/div>":"<span$1/span>");l=g.childNodes[0];l.className+=" iepp_"+q;l=p[p.length]=[f,l];f.parentNode.replaceChild(l[1],l[0])}h(b.styleSheets,"all")});a.attachEvent("onafterprint",
|
28
|
+
function(){for(var f=-1,k;++f<p.length;)p[f][1].parentNode.replaceChild(p[f][0],p[f][1]);for(k in o)t[G].removeChild(o[k]);o={};p=[]})}(this,e);j._enableHTML5=true;j._version="1.5";s.className=s.className.replace(/\bno-js\b/,"")+" js";s.className+=" "+N.join(" ");return j}(this,this.document);
|
@@ -16,8 +16,8 @@
|
|
16
16
|
}
|
17
17
|
|
18
18
|
.notice_flash {
|
19
|
-
color: #
|
20
|
-
background-color: #
|
19
|
+
color: #fff;
|
20
|
+
background-color: #aaa;
|
21
21
|
}
|
22
22
|
|
23
23
|
.failure_flash {
|
@@ -26,6 +26,6 @@
|
|
26
26
|
}
|
27
27
|
|
28
28
|
.success_flash {
|
29
|
-
color: #
|
30
|
-
background-color: #
|
29
|
+
color: #fff;
|
30
|
+
background-color: #aaa;
|
31
31
|
}
|
@@ -1 +1,35 @@
|
|
1
|
-
|
1
|
+
@import url(http://fonts.googleapis.com/css?family=Josefin+Sans+Std+Light);
|
2
|
+
@import url(http://fonts.googleapis.com/css?family=Droid+Sans);
|
3
|
+
@import url(http://fonts.googleapis.com/css?family=Yanone+Kaffeesatz:200,300,400,700);
|
4
|
+
|
5
|
+
body{font:13px/1.5 'Droid Sans','Helvetica Neue',Arial,'Liberation Sans',FreeSans,sans-serif}a:focus{outline:1px dotted}hr{border:0 #ccc solid;border-top-width:1px;clear:both;height:0}h1{font-size:25px}h2{font-size:23px}h3{font-size:21px}h4{font-size:19px}h5{font-size:17px}h6{font-size:15px}ol{list-style:decimal}ul{list-style:disc}li{margin-left:30px}p,dl,hr,h1,h2,h3,h4,h5,h6,ol,ul,pre,table,address,fieldset{margin-bottom:20px}
|
6
|
+
#title, #title span.first_half {font-family: 'Yanone Kaffeesatz', veranda, sans-serif;
|
7
|
+
font-size: 78px;
|
8
|
+
font-style: normal;
|
9
|
+
font-weight: 700;
|
10
|
+
text-shadow: none;
|
11
|
+
text-decoration: none;
|
12
|
+
text-transform: none;
|
13
|
+
letter-spacing: 0.011em;
|
14
|
+
word-spacing: 0em;
|
15
|
+
line-height: 1em;
|
16
|
+
padding-right:0px;
|
17
|
+
margin-right:0px;}
|
18
|
+
#title span.second_half {font-family: 'Yanone Kaffeesatz', veranda, sans-serif;
|
19
|
+
font-size: 78px;
|
20
|
+
font-style: normal;
|
21
|
+
font-weight: 200;
|
22
|
+
text-shadow: none;
|
23
|
+
text-decoration: none;
|
24
|
+
text-transform: none;
|
25
|
+
letter-spacing: 0.011em;
|
26
|
+
word-spacing: 0em;
|
27
|
+
line-height: 1em;
|
28
|
+
padding-left:0px;
|
29
|
+
margin-left:-3px;
|
30
|
+
}
|
31
|
+
#title a {
|
32
|
+
text-decoration:none;
|
33
|
+
color: #000;
|
34
|
+
}
|
35
|
+
#footer {font-family: 'Josefin Sans Std Light', arial, serif; font-size:16px;}
|
metadata
CHANGED
@@ -1,29 +1,32 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: headstart
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
+
- 3
|
8
9
|
- 0
|
9
|
-
version: 0.
|
10
|
+
version: 0.3.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
|
-
-
|
13
|
+
- Bran Burridge
|
13
14
|
autorequire:
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-09-09 00:00:00 -04:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: mini_fb
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - "="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 19
|
27
30
|
segments:
|
28
31
|
- 0
|
29
32
|
- 2
|
@@ -35,9 +38,11 @@ dependencies:
|
|
35
38
|
name: delayed_job
|
36
39
|
prerelease: false
|
37
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
38
42
|
requirements:
|
39
43
|
- - "="
|
40
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 63
|
41
46
|
segments:
|
42
47
|
- 1
|
43
48
|
- 8
|
@@ -49,9 +54,11 @@ dependencies:
|
|
49
54
|
name: mad_mimi_mailer
|
50
55
|
prerelease: false
|
51
56
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
52
58
|
requirements:
|
53
59
|
- - "="
|
54
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 17
|
55
62
|
segments:
|
56
63
|
- 0
|
57
64
|
- 0
|
@@ -59,34 +66,22 @@ dependencies:
|
|
59
66
|
version: 0.0.7
|
60
67
|
type: :runtime
|
61
68
|
version_requirements: *id003
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: create-rails-dev-db
|
64
|
-
prerelease: false
|
65
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - "="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
segments:
|
70
|
-
- 0
|
71
|
-
- 1
|
72
|
-
- 0
|
73
|
-
version: 0.1.0
|
74
|
-
type: :runtime
|
75
|
-
version_requirements: *id004
|
76
69
|
- !ruby/object:Gem::Dependency
|
77
70
|
name: shoulda
|
78
71
|
prerelease: false
|
79
|
-
requirement: &
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
80
74
|
requirements:
|
81
75
|
- - ">="
|
82
76
|
- !ruby/object:Gem::Version
|
77
|
+
hash: 3
|
83
78
|
segments:
|
84
79
|
- 0
|
85
80
|
version: "0"
|
86
81
|
type: :development
|
87
|
-
version_requirements: *
|
88
|
-
description:
|
89
|
-
email:
|
82
|
+
version_requirements: *id004
|
83
|
+
description: Based on Envy Labs Blue Light Special, but modified to provide more options and features.
|
84
|
+
email: brian@burridge.net
|
90
85
|
executables: []
|
91
86
|
|
92
87
|
extensions: []
|
@@ -99,17 +94,17 @@ files:
|
|
99
94
|
- README.rdoc
|
100
95
|
- Rakefile
|
101
96
|
- VERSION
|
102
|
-
- app/controllers/headstart/impersonations_controller.rb
|
103
97
|
- app/controllers/headstart/confirmations_controller.rb
|
98
|
+
- app/controllers/headstart/impersonations_controller.rb
|
104
99
|
- app/controllers/headstart/passwords_controller.rb
|
105
100
|
- app/controllers/headstart/sessions_controller.rb
|
106
101
|
- app/controllers/headstart/users_controller.rb
|
107
|
-
- app/models/headstart_mailer.rb
|
108
102
|
- app/models/deliver_change_password_job.rb
|
109
103
|
- app/models/deliver_welcome_job.rb
|
110
|
-
- app/models/mimi_mailer.rb
|
111
104
|
- app/models/generic_mailer.rb
|
105
|
+
- app/models/headstart_mailer.rb
|
112
106
|
- app/models/impersonation.rb
|
107
|
+
- app/models/mimi_mailer.rb
|
113
108
|
- app/views/generic_mailer/change_password.html.erb
|
114
109
|
- app/views/generic_mailer/confirmation.html.erb
|
115
110
|
- app/views/generic_mailer/welcome.html.erb
|
@@ -127,18 +122,20 @@ files:
|
|
127
122
|
- generators/headstart/lib/rake_commands.rb
|
128
123
|
- generators/headstart/templates/README
|
129
124
|
- generators/headstart/templates/app/controllers/sessions_controller.rb
|
125
|
+
- generators/headstart/templates/app/helpers/application_helper.rb
|
130
126
|
- generators/headstart/templates/app/views/sessions/index.html.erb
|
131
127
|
- generators/headstart/templates/application.html.erb
|
128
|
+
- generators/headstart/templates/factories.rb
|
132
129
|
- generators/headstart/templates/headstart.rb
|
133
130
|
- generators/headstart/templates/headstart.yml
|
134
|
-
- generators/headstart/templates/
|
131
|
+
- generators/headstart/templates/layout.css
|
135
132
|
- generators/headstart/templates/migrations/create_users.rb
|
136
133
|
- generators/headstart/templates/migrations/update_users.rb
|
134
|
+
- generators/headstart/templates/modernizr-1.5.min.js
|
137
135
|
- generators/headstart/templates/report.css
|
138
136
|
- generators/headstart/templates/reset.css
|
139
137
|
- generators/headstart/templates/style.css
|
140
138
|
- generators/headstart/templates/text.css
|
141
|
-
- generators/headstart/templates/layout.css
|
142
139
|
- generators/headstart/templates/user.rb
|
143
140
|
- generators/headstart/templates/xd_receiver.html
|
144
141
|
- generators/headstart/templates/xd_receiver_ssl.html
|
@@ -174,8 +171,33 @@ files:
|
|
174
171
|
- lib/headstart/user.rb
|
175
172
|
- rails/init.rb
|
176
173
|
- shoulda_macros/headstart.rb
|
174
|
+
- test/controllers/passwords_controller_test.rb
|
175
|
+
- test/controllers/sessions_controller_test.rb
|
176
|
+
- test/controllers/users_controller_test.rb
|
177
|
+
- test/models/headstart_mailer_test.rb
|
178
|
+
- test/models/impersonation_test.rb
|
179
|
+
- test/models/user_test.rb
|
180
|
+
- test/rails_root/app/controllers/accounts_controller.rb
|
181
|
+
- test/rails_root/app/controllers/application_controller.rb
|
182
|
+
- test/rails_root/app/helpers/application_helper.rb
|
183
|
+
- test/rails_root/app/helpers/confirmations_helper.rb
|
184
|
+
- test/rails_root/app/helpers/passwords_helper.rb
|
185
|
+
- test/rails_root/config/boot.rb
|
186
|
+
- test/rails_root/config/environment.rb
|
187
|
+
- test/rails_root/config/environments/development.rb
|
188
|
+
- test/rails_root/config/environments/production.rb
|
189
|
+
- test/rails_root/config/environments/test.rb
|
190
|
+
- test/rails_root/config/initializers/inflections.rb
|
191
|
+
- test/rails_root/config/initializers/mime_types.rb
|
192
|
+
- test/rails_root/config/initializers/requires.rb
|
193
|
+
- test/rails_root/config/initializers/time_formats.rb
|
194
|
+
- test/rails_root/config/routes.rb
|
195
|
+
- test/rails_root/public/dispatch.rb
|
196
|
+
- test/rails_root/script/create_project.rb
|
197
|
+
- test/rails_root/test/functional/accounts_controller_test.rb
|
198
|
+
- test/test_helper.rb
|
177
199
|
has_rdoc: true
|
178
|
-
homepage: http://github.com/
|
200
|
+
homepage: http://github.com/bburridge/Headstart
|
179
201
|
licenses: []
|
180
202
|
|
181
203
|
post_install_message:
|
@@ -184,26 +206,30 @@ rdoc_options:
|
|
184
206
|
require_paths:
|
185
207
|
- lib
|
186
208
|
required_ruby_version: !ruby/object:Gem::Requirement
|
209
|
+
none: false
|
187
210
|
requirements:
|
188
211
|
- - ">="
|
189
212
|
- !ruby/object:Gem::Version
|
213
|
+
hash: 3
|
190
214
|
segments:
|
191
215
|
- 0
|
192
216
|
version: "0"
|
193
217
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
218
|
+
none: false
|
194
219
|
requirements:
|
195
220
|
- - ">="
|
196
221
|
- !ruby/object:Gem::Version
|
222
|
+
hash: 3
|
197
223
|
segments:
|
198
224
|
- 0
|
199
225
|
version: "0"
|
200
226
|
requirements: []
|
201
227
|
|
202
228
|
rubyforge_project:
|
203
|
-
rubygems_version: 1.3.
|
229
|
+
rubygems_version: 1.3.7
|
204
230
|
signing_key:
|
205
231
|
specification_version: 3
|
206
|
-
summary: Rails
|
232
|
+
summary: Headstart provides the Rails developer a headstart in creating a Rails app providing basic user authentication features.
|
207
233
|
test_files:
|
208
234
|
- test/controllers/passwords_controller_test.rb
|
209
235
|
- test/controllers/sessions_controller_test.rb
|