headstart 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,8 +1,7 @@
1
- = Blue Light Special
1
+ = Headstart
2
2
 
3
- Blue Light Special is a derivative from Thoughtbot's
4
- {Clearance}[http://github.com/thoughtbot/clearance] gem. It's a highly
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 Blue Light Special 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.
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 Blue Light Special gem, require it in your Rails app and run
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 Envy Labs LLC. See LICENSE for details.
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 authentication by email and password}
10
- gem.description = %Q{Rails authentication by email and password with integrated dependencies to MadMimi. Also provides administrative user impersonation.}
11
- gem.email = "nate@envylabs.com"
12
- gem.homepage = "http://github.com/envylabs/headstart"
13
- gem.authors = ["Nathaniel Bibler", "Mark Kendall", "Caike Souza"]
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.2.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
- <%= edit_user_password_url(@user,
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 %>Change your password<% end %>
1
2
  <h2>Change your password</h2>
2
3
 
3
4
  <p>
@@ -1,3 +1,4 @@
1
+ <% content_for :title do %>Change your password<% end %>
1
2
  <h2>Change your password</h2>
2
3
 
3
4
  <p>
@@ -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
- <ul>
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">
@@ -1,3 +1,4 @@
1
+ <% content_for :title do %>Sign up<% end %>
1
2
  <h2>Sign up</h2>
2
3
 
3
4
  <% form_for @user do |form| %>
@@ -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 "reports.css", "public/stylesheets/report.css"
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 page
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
- Default Web App
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: #00529B;
20
- background-color: #BDE5F8;
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: #4F8A10;
30
- background-color: #DFF2BF;
29
+ color: #fff;
30
+ background-color: #aaa;
31
31
  }
@@ -1 +1,35 @@
1
- body{font:13px/1.5 '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}
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
- - 1
8
+ - 3
8
9
  - 0
9
- version: 0.1.0
10
+ version: 0.3.0
10
11
  platform: ruby
11
12
  authors:
12
- - Brian Burridge
13
+ - Bran Burridge
13
14
  autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-04-16 00:00:00 -04:00
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: &id005 !ruby/object:Gem::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: *id005
88
- description: Rails authentication by email and password with integrated dependencies to MadMimi. Also provides administrative user impersonation. Based on Headstart
89
- email: bburridg@gmail.com
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/factories.rb
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/envylabs/headstart
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.6
229
+ rubygems_version: 1.3.7
204
230
  signing_key:
205
231
  specification_version: 3
206
- summary: Rails authentication by email and password
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