kryptonite 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. data/Gemfile +1 -0
  2. data/MIT-LICENSE +20 -0
  3. data/PUBLIC_VERSION.yml +4 -0
  4. data/README.rdoc +209 -0
  5. data/Rakefile +40 -0
  6. data/app/controllers/kryptonite/kryptonite_controller.rb +72 -0
  7. data/app/controllers/kryptonite/password_resets_controller.rb +66 -0
  8. data/app/controllers/kryptonite/user_sessions_controller.rb +40 -0
  9. data/app/controllers/kryptonite/users_controller.rb +102 -0
  10. data/app/helpers/kryptonite/kryptonite_helper.rb +200 -0
  11. data/app/mailers/kryptonite/kryptonite_notification.rb +39 -0
  12. data/app/models/kryptonite/user.rb +55 -0
  13. data/app/models/kryptonite/user_session.rb +8 -0
  14. data/app/views/kryptonite/kryptonite/blank.html.erb +1 -0
  15. data/app/views/kryptonite/kryptonite_notification/generate_new_password.erb +12 -0
  16. data/app/views/kryptonite/kryptonite_notification/new_user_information.erb +12 -0
  17. data/app/views/kryptonite/kryptonite_notification/password_reset_instructions.erb +11 -0
  18. data/app/views/kryptonite/password_resets/edit.html.erb +48 -0
  19. data/app/views/kryptonite/user_sessions/new.html.erb +66 -0
  20. data/app/views/kryptonite/users/index.html.erb +35 -0
  21. data/app/views/kryptonite/users/new.html.erb +46 -0
  22. data/app/views/kryptonite/users/show.html.erb +94 -0
  23. data/app/views/layouts/kryptonite_auth.html.erb +24 -0
  24. data/app/views/layouts/kryptonite_main.html.erb +67 -0
  25. data/config/routes.rb +20 -0
  26. data/lib/generators/kryptonite/install/USAGE +1 -0
  27. data/lib/generators/kryptonite/install/install_generator.rb +37 -0
  28. data/lib/generators/kryptonite/install/templates/app/helpers/kryptonite/config_helper.rb +46 -0
  29. data/lib/generators/kryptonite/install/templates/app/views/kryptonite/layouts/_left_navigation.html.erb +2 -0
  30. data/lib/generators/kryptonite/install/templates/app/views/kryptonite/layouts/_right_navigation.html.erb +1 -0
  31. data/lib/generators/kryptonite/install/templates/db/migrate/kryptonite_create_users.rb +30 -0
  32. data/lib/generators/kryptonite/install/templates/public/casein/javascripts/custom.js +2 -0
  33. data/lib/generators/kryptonite/install/templates/public/casein/stylesheets/custom.css +2 -0
  34. data/lib/generators/kryptonite/install/templates/public/robots.txt +5 -0
  35. data/lib/generators/kryptonite/scaffold/USAGE +1 -0
  36. data/lib/generators/kryptonite/scaffold/scaffold_generator.rb +99 -0
  37. data/lib/generators/kryptonite/scaffold/templates/controller.rb +60 -0
  38. data/lib/generators/kryptonite/scaffold/templates/migration.rb +13 -0
  39. data/lib/generators/kryptonite/scaffold/templates/model.rb +3 -0
  40. data/lib/generators/kryptonite/scaffold/templates/views/_form.html.erb +9 -0
  41. data/lib/generators/kryptonite/scaffold/templates/views/_table.html.erb +17 -0
  42. data/lib/generators/kryptonite/scaffold/templates/views/index.html.erb +11 -0
  43. data/lib/generators/kryptonite/scaffold/templates/views/new.html.erb +18 -0
  44. data/lib/generators/kryptonite/scaffold/templates/views/show.html.erb +18 -0
  45. data/lib/generators/kryptonite/update/USAGE +1 -0
  46. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/casein.png +0 -0
  47. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/header.png +0 -0
  48. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/icons/add.png +0 -0
  49. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/icons/delete.png +0 -0
  50. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/icons/table.png +0 -0
  51. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/alertBg.png +0 -0
  52. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/background.png +0 -0
  53. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/bottom.png +0 -0
  54. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/loginBoxBg.png +0 -0
  55. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/loginBoxBottom.png +0 -0
  56. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/loginBoxTop.png +0 -0
  57. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/loginSubmit.png +0 -0
  58. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/recoverSubmit.png +0 -0
  59. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/login/top.png +0 -0
  60. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/nav.png +0 -0
  61. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/rightNav.png +0 -0
  62. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/rightNavButton.png +0 -0
  63. data/lib/generators/kryptonite/update/templates/public/kryptonite/images/visitSiteNav.png +0 -0
  64. data/lib/generators/kryptonite/update/templates/public/kryptonite/javascripts/jquery.js +154 -0
  65. data/lib/generators/kryptonite/update/templates/public/kryptonite/javascripts/kryptonite.js +25 -0
  66. data/lib/generators/kryptonite/update/templates/public/kryptonite/javascripts/login.js +24 -0
  67. data/lib/generators/kryptonite/update/templates/public/kryptonite/javascripts/rails.js +132 -0
  68. data/lib/generators/kryptonite/update/templates/public/kryptonite/stylesheets/elements.css +307 -0
  69. data/lib/generators/kryptonite/update/templates/public/kryptonite/stylesheets/login.css +137 -0
  70. data/lib/generators/kryptonite/update/templates/public/kryptonite/stylesheets/screen.css +224 -0
  71. data/lib/generators/kryptonite/update/update_generator.rb +40 -0
  72. data/lib/kryptonite.rb +3 -0
  73. data/lib/kryptonite/engine.rb +22 -0
  74. data/lib/railties/tasks.rake +31 -0
  75. metadata +169 -0
@@ -0,0 +1,48 @@
1
+ <%= form_for @reset_user, :url => kryptonite_password_reset_path do |f| %>
2
+
3
+ <% if @reset_user.errors.any? %>
4
+ <div class="error">
5
+ <p>
6
+ <% @reset_user.errors.keys.each do |key| %>
7
+ <%= (key.to_s.humanize + " ") unless key == :base %>
8
+ <%= @reset_user.errors[key].first %>
9
+ <% end %>
10
+ </p>
11
+ </div>
12
+ <% end %>
13
+
14
+ <% if flash[:warning] %>
15
+ <div class="error">
16
+ <p><%= flash[:warning] %></p>
17
+ </div>
18
+ <% end %>
19
+
20
+ <% if flash[:notice] %>
21
+ <div class="notice">
22
+ <p><%= flash[:notice] %></p>
23
+ </div>
24
+ <% end %>
25
+
26
+ <%= hidden_field_tag :token, params[:token] %>
27
+
28
+ <div class="text">
29
+ <p>
30
+ <%= f.label :password, "Password:" %>
31
+ <%= f.password_field :password, :class => "kryptoniteTextField" %>
32
+ </p>
33
+ </div>
34
+
35
+ <div class="text">
36
+ <p>
37
+ <%= f.label :password_confirmation, "Confirm password:" %>
38
+ <%= f.password_field :password_confirmation, :class => "kryptoniteTextField" %>
39
+ </p>
40
+ </div>
41
+
42
+ <div class="submit_remember">
43
+ <p>
44
+ <%= f.submit "Reset password", :class => "kryptoniteSubmit" %>
45
+ </p>
46
+ </div>
47
+
48
+ <% end %>
@@ -0,0 +1,66 @@
1
+ <%= form_for @user_session, :url => kryptonite_user_session_path do |f| %>
2
+
3
+ <% if @user_session.errors.any? %>
4
+ <div class="error">
5
+ <p>
6
+ <% @user_session.errors.keys.each do |key| %>
7
+ <%= (key.to_s.humanize + " ") unless key == :base %>
8
+ <%= @user_session.errors[key].first %>
9
+ <% end %>
10
+ </p>
11
+ </div>
12
+ <% end %>
13
+
14
+ <% if flash[:warning] %>
15
+ <div class="error">
16
+ <p><%= flash[:warning] %></p>
17
+ </div>
18
+ <% end %>
19
+
20
+ <% if flash[:notice] %>
21
+ <div class="notice">
22
+ <p><%= flash[:notice] %></p>
23
+ </div>
24
+ <% end %>
25
+
26
+ <div class="text" style="margin-bottom:10px;">
27
+ <p>
28
+ <%= f.label :login, "Login:" %>
29
+ <%= f.text_field :login, :class => "kryptoniteTextField" %>
30
+ </p>
31
+ </div>
32
+
33
+ <div class="text">
34
+ <p>
35
+ <%= f.label :password, "Password:" %>
36
+ <%= f.password_field :password, :class => "kryptoniteTextField" %>
37
+ </p>
38
+ </div>
39
+
40
+ <div class="submit_remember">
41
+ <p>
42
+ <%= f.check_box :remember_me %> Remember me
43
+ <br /><br />
44
+ <%= f.submit "Log in", :class => "kryptoniteSubmit" %>
45
+ <input type="button" value="Forgotten password?" class="kryptoniteSubmitBlue" onclick="toggleDiv('recover');" />
46
+ </p>
47
+ </div>
48
+
49
+ <% end %>
50
+
51
+ <%= form_tag kryptonite_password_reset_url do %>
52
+ <div id="recover">
53
+
54
+ <div class="text">
55
+ <p>
56
+ <%= label_tag :recover_email, "Email:" %>
57
+ <%= text_field_tag :recover_email, params[:recover_email], :class => "kryptoniteTextField" %>
58
+ </p>
59
+ </div>
60
+ <div class="submit_remember">
61
+ <p>
62
+ <%= submit_tag "Reset", :class => "kryptoniteSubmit" %>
63
+ </p>
64
+ </div>
65
+ </div>
66
+ <% end %>
@@ -0,0 +1,35 @@
1
+ <h2>Users</h2>
2
+
3
+ <table cellpadding="0" cellspacing="0" id="itemList" class="itemList">
4
+ <tr>
5
+ <th>Login</th>
6
+ <th>Name</th>
7
+ <th>Status</th>
8
+ <th>&nbsp;</th>
9
+ </tr>
10
+
11
+ <% @users.each_with_index do |user, index| %>
12
+ <tr class="<%= 'even' if index.modulo(2) == 0 %> hover">
13
+ <td><%= kryptonite_table_cell_link user.login, kryptonite_user_path(user) %></td>
14
+ <td><%= kryptonite_table_cell_link user.name, kryptonite_user_path(user) %></td>
15
+ <td><%= kryptonite_table_cell_link kryptonite_get_access_level_text(user.access_level), kryptonite_user_path(user) %></td>
16
+ <td class="delete">
17
+ <% if user.is_admin? == false || Kryptonite::User.has_more_than_one_admin %>
18
+ <% confirm_message = "Are you sure you want to delete #{user.name}?" %>
19
+
20
+ <% if user.id == @session_user.id %>
21
+ <% confirm_message += "\n\nWARNING: This is your user account. You will be logged out if you proceed." %>
22
+ <% end %>
23
+
24
+ <%= link_to(kryptonite_show_row_icon("delete"), kryptonite_user_path(user), :method => :delete, :confirm => confirm_message) %>
25
+ <% end %>
26
+ </td>
27
+ </tr>
28
+ <% end %>
29
+ </table>
30
+
31
+ <%= will_paginate @users %>
32
+
33
+ <%= content_for :sidebar do %>
34
+ <li><%= link_to "#{kryptonite_show_icon('add')}Add a new user".html_safe, new_kryptonite_user_path %></li>
35
+ <% end %>
@@ -0,0 +1,46 @@
1
+ <h2>Add a new user</h2>
2
+
3
+ <%= form_for @kryptonite_user do |form| %>
4
+
5
+ <div class="tfContainer">
6
+ <%= kryptonite_text_field form, @kryptonite_user, :login, {:size => 30} %>
7
+ </div>
8
+
9
+ <div class="tfContainer tfContainerSecond">
10
+ <%= kryptonite_text_field form, @kryptonite_user, :name %>
11
+ </div>
12
+
13
+ <div class="tfContainer">
14
+ <%= kryptonite_text_field form, @kryptonite_user, :email %>
15
+ </div>
16
+
17
+ <div class="tfContainer tfContainerSecond">
18
+ <%= kryptonite_time_zone_select form, @kryptonite_user, :time_zone, ActiveSupport::TimeZone.us_zones %>
19
+ </div>
20
+
21
+ <div class="tfContainer">
22
+ <%= kryptonite_select form, @kryptonite_user, :access_level, kryptonite_get_access_level_array, {:kryptonite_label => "Status"} %>
23
+ </div>
24
+
25
+ <div class="tfContainer tfContainerSecond">
26
+ </div>
27
+
28
+ <div class="tfContainer">
29
+ <%= kryptonite_password_field form, @kryptonite_user, :password, {:kryptonite_label => "Password"} %>
30
+ </div>
31
+
32
+ <div class="tfContainer tfContainerSecond">
33
+ <%= kryptonite_password_field form, @kryptonite_user, :password_confirmation, {:kryptonite_label => "Repeat password"} %>
34
+ </div>
35
+
36
+ <div class="clearer"></div>
37
+
38
+ <p class="submits">
39
+ <%= form.submit "Add new user", :class => "update" %>
40
+ </p>
41
+
42
+ <% end %>
43
+
44
+ <%= content_for :sidebar do %>
45
+ <li><%= link_to "#{kryptonite_show_icon('table')}Back to list".html_safe, kryptonite_users_path %></li>
46
+ <% end %>
@@ -0,0 +1,94 @@
1
+ <h2>View user</h2>
2
+
3
+ <%= form_for @kryptonite_user do |f| %>
4
+
5
+ <div class="tfContainer">
6
+ <%= kryptonite_text_field f, f.object, :login, {:size => 30} %>
7
+ </div>
8
+
9
+ <div class="tfContainer tfContainerSecond">
10
+ <%= kryptonite_text_field f, f.object, :name %>
11
+ </div>
12
+
13
+ <div class="tfContainer">
14
+ <%= kryptonite_text_field f, f.object, :email %>
15
+ </div>
16
+
17
+ <div class="tfContainer tfContainerSecond">
18
+ <%= kryptonite_time_zone_select f, f.object, :time_zone, ActiveSupport::TimeZone.us_zones %>
19
+ </div>
20
+
21
+ <% if @session_user.is_admin? && (@kryptonite_user.is_admin? == false || Kryptonite::User.has_more_than_one_admin) %>
22
+ <div class="tfContainer">
23
+ <%= kryptonite_select f, f.object, :access_level, kryptonite_get_access_level_array, {:kryptonite_label => "Status"} %>
24
+ </div>
25
+ <div class="tfContainer tfContainerSecond">
26
+ </div>
27
+ <% end %>
28
+
29
+ <div class="clearer"></div>
30
+
31
+ <p class="submits">
32
+ <%= link_to 'Cancel', kryptonite_users_path, :class => 'cancel' %> or
33
+ <%= f.submit "Save changes", :class => "update" %>
34
+ </p>
35
+ <% end %>
36
+
37
+ <% if @session_user.is_admin? %>
38
+
39
+ <h2>Reset password (admin action - use carefully)</h2>
40
+
41
+ <%= form_for @kryptonite_user, :url => reset_password_kryptonite_user_path(@kryptonite_user) do |f| %>
42
+
43
+ <div class="tfContainer">
44
+ <%= kryptonite_password_field f, f.object, :password, {:kryptonite_label => "New password"} %>
45
+ </div>
46
+
47
+ <div class="tfContainer tfContainerSecond">
48
+ <%= kryptonite_password_field f, f.object, :password_confirmation, {:kryptonite_label => "Repeat password"} %>
49
+ </div>
50
+
51
+ <div class="clearer"></div>
52
+
53
+ <p class="submits">
54
+ <%= f.submit "Reset", :class => "update" %>
55
+ </p>
56
+
57
+ <% end %>
58
+
59
+ <% elsif @session_user.id == @kryptonite_user.id %>
60
+
61
+ <h2>Change password</h2>
62
+
63
+ <%= form_for @kryptonite_user, :url => update_password_kryptonite_user_path(@kryptonite_user) do |f| %>
64
+
65
+ <div class="tfContainer">
66
+ <p><%= label_tag :form_current_password, "Current password" %></p>
67
+ <p><%= password_field_tag :form_current_password, "", {:class => 'kryptoniteTextField'} %></p>
68
+ </div>
69
+
70
+ <div class="tfContainer tfContainerSecond">
71
+ </div>
72
+
73
+ <div class="tfContainer">
74
+ <%= kryptonite_password_field f, f.object, :password, {:kryptonite_label => "New password"} %>
75
+ </div>
76
+
77
+ <div class="tfContainer tfContainerSecond">
78
+ <%= kryptonite_password_field f, f.object, :password_confirmation, {:kryptonite_label => "Repeat password"} %>
79
+ </div>
80
+
81
+ <div class="clearer"></div>
82
+
83
+ <p class="submits">
84
+ <%= f.submit "Change", :class => "update" %>
85
+ </p>
86
+
87
+ <% end %>
88
+ <% end %>
89
+
90
+ <%= content_for :sidebar do %>
91
+ <% if @session_user.is_admin? %>
92
+ <li><%= link_to "#{kryptonite_show_icon('table')}Back to list".html_safe, kryptonite_users_path %></li>
93
+ <% end %>
94
+ <% end %>
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
7
+ <title>Welcome to <%= kryptonite_config_website_name %></title>
8
+ <%= stylesheet_link_tag "/kryptonite/stylesheets/login" %>
9
+ <%= javascript_include_tag "/kryptonite/javascripts/jquery", "/kryptonite/javascripts/login", "/kryptonite/javascripts/rails" %>
10
+ <%= csrf_meta_tag %>
11
+ </head>
12
+ <body>
13
+ <div id="header">
14
+ <h1><%= image_tag(kryptonite_config_logo, :alt => kryptonite_config_website_name) %></h1>
15
+ </div>
16
+ <div id="content">
17
+ <%= yield %>
18
+ </div>
19
+ <div id="footer">
20
+ <p>Based on <%= link_to "Kryptonite", "http://www.kryptonitecms.com" %> <%= kryptonite_get_short_version_string %> technology,
21
+ an open-source project initiated by <a href="http://www.spoiledmilk.dk">Spoiled Milk</a>.</p>
22
+ </div>
23
+ </body>
24
+ </html>
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
7
+ <title><%= kryptonite_generate_page_title %></title>
8
+ <% kryptonite_config_stylesheet_includes.each do |stylesheet| %>
9
+ <%= stylesheet_link_tag(stylesheet) %>
10
+ <% end %>
11
+
12
+ <% kryptonite_config_javascript_includes.each do |javascript| %>
13
+ <%= javascript_include_tag(javascript) %>
14
+ <% end %>
15
+
16
+ <%= csrf_meta_tag %>
17
+ </head>
18
+ <body>
19
+ <div id="header">
20
+ <h1><%= link_to(image_tag(kryptonite_config_logo, :alt => kryptonite_config_website_name), :controller => :kryptonite) %></h1>
21
+ <div id="dashboard">
22
+ <% if @session_user != nil %>
23
+ <ul>
24
+ <li>Hello <%= @session_user.name %></li>
25
+ <li><%= Time.zone.name %></li>
26
+ <li><%= link_to 'Profile', kryptonite_user_path(@session_user) %></li>
27
+ <li class="lastItem"><%= link_to 'Logout', kryptonite_user_session_path, :method => :delete %></li>
28
+ </ul>
29
+ <% end %>
30
+ </div>
31
+ <div id="navigation">
32
+ <ul>
33
+ <%= render :partial => '/kryptonite/layouts/left_navigation' %>
34
+ </ul>
35
+ </div>
36
+ <div id="altNavigation">
37
+ <ul>
38
+ <% if @session_user.is_admin? %>
39
+ <li><%= link_to 'Users', kryptonite_users_path %></li>
40
+ <% end %>
41
+ <%= render :partial => '/kryptonite/layouts/right_navigation' %>
42
+ </ul>
43
+ </div>
44
+ </div>
45
+ <div id="rightBar">
46
+ <div class="spacer"></div>
47
+ <ul>
48
+ <%= yield :sidebar %>
49
+ </ul>
50
+ </div>
51
+ <div id="content">
52
+ <div id="data">
53
+ <% if flash[:warning] %>
54
+ <div id="error">
55
+ <%= flash[:warning] %>
56
+ </div>
57
+ <% end %>
58
+ <% if flash[:notice] %>
59
+ <div id="notice">
60
+ <%= flash[:notice] %>
61
+ </div>
62
+ <% end %>
63
+ <%= yield %>
64
+ </div>
65
+ </div>
66
+ </body>
67
+ </html>
data/config/routes.rb ADDED
@@ -0,0 +1,20 @@
1
+ Rails.application.routes.draw do
2
+
3
+ match "/admin" => redirect("/kryptonite")
4
+
5
+ namespace :kryptonite do
6
+
7
+ resources :users do
8
+ member do
9
+ put :update_password, :reset_password
10
+ end
11
+ end
12
+
13
+ resource :user_session
14
+ resource :password_reset, :only => [:create, :edit, :update]
15
+
16
+ match "/blank" => "kryptonite#blank"
17
+ root :to => "kryptonite#index"
18
+ end
19
+
20
+ end
@@ -0,0 +1 @@
1
+ Copies user configurable Kryptonite files into the main project
@@ -0,0 +1,37 @@
1
+ module Kryptonite
2
+ class InstallGenerator < Rails::Generators::Base
3
+
4
+ include Rails::Generators::Migration
5
+ source_root File.expand_path('../templates', __FILE__)
6
+
7
+ def self.next_migration_number dirname
8
+ if ActiveRecord::Base.timestamped_migrations
9
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
10
+ else
11
+ "%.3d" % (current_migration_number(dirname) + 1)
12
+ end
13
+ end
14
+
15
+ def generate_files
16
+ puts "*** WARNING - Generating configuration files. Make sure you have backed up any files before overwriting them. ***"
17
+
18
+ #config helper
19
+ copy_file "app/helpers/kryptonite/config_helper.rb", "app/helpers/kryptonite/config_helper.rb"
20
+
21
+ #initial view partials
22
+ copy_file "app/views/kryptonite/layouts/_left_navigation.html.erb", "app/views/kryptonite/layouts/_left_navigation.html.erb"
23
+ copy_file "app/views/kryptonite/layouts/_right_navigation.html.erb", "app/views/kryptonite/layouts/_right_navigation.html.erb"
24
+
25
+ #robots.txt
26
+ puts " ** Overwrite if you haven't yet modified your robots.txt, otherwise add disallow rules for /kryptonite and /admin manually **"
27
+ copy_file "public/robots.txt", "public/robots.txt"
28
+
29
+ #blank stylesheets and JavaScript files
30
+ copy_file "public/kryptonite/stylesheets/custom.css", "public/kryptonite/stylesheets/custom.css"
31
+ copy_file "public/kryptonite/javascripts/custom.js", "public/kryptonite/javascripts/custom.js"
32
+
33
+ #migrations
34
+ migration_template 'db/migrate/kryptonite_create_users.rb', "db/migrate/kryptonite_create_users.rb"
35
+ end
36
+ end
37
+ end