captain_oveur 0.8.10

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.
Files changed (36) hide show
  1. data.tar.gz.sig +0 -0
  2. data/CHANGELOG.textile +3 -0
  3. data/LICENSE +20 -0
  4. data/Manifest +32 -0
  5. data/README +21 -0
  6. data/README.textile +21 -0
  7. data/Rakefile +13 -0
  8. data/VERSION +1 -0
  9. data/app/controllers/admin/users_controller.rb +106 -0
  10. data/app/views/admin/users/_form.erb +12 -0
  11. data/app/views/admin/users/edit.html.erb +6 -0
  12. data/app/views/admin/users/index.html.erb +12 -0
  13. data/app/views/admin/users/new.html.erb +2 -0
  14. data/app/views/admin/users/show.html.erb +4 -0
  15. data/captain_oveur.gemspec +39 -0
  16. data/generators/captain_oveur/README +6 -0
  17. data/generators/captain_oveur/USAGE +1 -0
  18. data/generators/captain_oveur/captain_oveur_generator.rb +55 -0
  19. data/generators/captain_oveur/lib/insert_commands.rb +33 -0
  20. data/generators/captain_oveur/lib/rake_commands.rb +22 -0
  21. data/generators/captain_oveur/templates/admins.rb +4 -0
  22. data/generators/captain_oveur/templates/migrations/update_admins.rb +23 -0
  23. data/generators/captain_oveur_features/USAGE +1 -0
  24. data/generators/captain_oveur_features/captain_oveur_features_generator.rb +16 -0
  25. data/generators/captain_oveur_features/templates/features/administration.feature +82 -0
  26. data/generators/captain_oveur_features/templates/features/step_definitions/administration_steps.rb +49 -0
  27. data/generators/captain_oveur_features/templates/features/support/paths.rb +42 -0
  28. data/lib/captain_oveur.rb +3 -0
  29. data/lib/captain_oveur/authentication.rb +27 -0
  30. data/lib/captain_oveur/routes.rb +20 -0
  31. data/lib/captain_oveur/user.rb +21 -0
  32. data/test/captain_oveur_test.rb +7 -0
  33. data/test/factories/admins.rb +4 -0
  34. data/test/test_helper.rb +10 -0
  35. metadata +165 -0
  36. metadata.gz.sig +0 -0
data.tar.gz.sig ADDED
Binary file
data/CHANGELOG.textile ADDED
@@ -0,0 +1,3 @@
1
+ 0.8.10 (7/5/2010)
2
+
3
+ * cucumber features added
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Disruptive Ventures, Inc.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest ADDED
@@ -0,0 +1,32 @@
1
+ CHANGELOG.textile
2
+ LICENSE
3
+ Manifest
4
+ README
5
+ README.textile
6
+ Rakefile
7
+ VERSION
8
+ app/controllers/admin/users_controller.rb
9
+ app/views/admin/users/_form.erb
10
+ app/views/admin/users/edit.html.erb
11
+ app/views/admin/users/index.html.erb
12
+ app/views/admin/users/new.html.erb
13
+ app/views/admin/users/show.html.erb
14
+ generators/captain_oveur/README
15
+ generators/captain_oveur/USAGE
16
+ generators/captain_oveur/captain_oveur_generator.rb
17
+ generators/captain_oveur/lib/insert_commands.rb
18
+ generators/captain_oveur/lib/rake_commands.rb
19
+ generators/captain_oveur/templates/admins.rb
20
+ generators/captain_oveur/templates/migrations/update_admins.rb
21
+ generators/captain_oveur_features/USAGE
22
+ generators/captain_oveur_features/captain_oveur_features_generator.rb
23
+ generators/captain_oveur_features/templates/features/administration.feature
24
+ generators/captain_oveur_features/templates/features/step_definitions/administration_steps.rb
25
+ generators/captain_oveur_features/templates/features/support/paths.rb
26
+ lib/captain_oveur.rb
27
+ lib/captain_oveur/authentication.rb
28
+ lib/captain_oveur/routes.rb
29
+ lib/captain_oveur/user.rb
30
+ test/captain_oveur_test.rb
31
+ test/factories/admins.rb
32
+ test/test_helper.rb
data/README ADDED
@@ -0,0 +1,21 @@
1
+ Gem-Based Admins for Clearance
2
+
3
+ Do you like movies about gladiators or Clearance-based authentication? If you do, you and Captain Oveur will become fast friends. Captain Oveur adds user-management tools and admin authentication to make flights of web development smoother.
4
+
5
+ Tested with Rails 2.3.5 and Clearance 0.8.8
6
+
7
+ Install it as a gem (after installing clearance, cucumber and clearance_features):
8
+
9
+ gem install captain_oveur
10
+
11
+ script/generate captain_oveur
12
+
13
+ for the cucumber features:
14
+
15
+ script/generate captain_oveur_features
16
+
17
+ NOTE
18
+
19
+ A lot of this gem looks exactly like clearance. Firstly, I am an unabashed fan of thoughtbot and clearance. Given the problem domain, I also think it was the best way to handle a lot of issues, but I am open to criticism and/or suggestions.
20
+
21
+ (c)2009-2010 Disruptive Ventures, Inc. See LICENSE for details.
data/README.textile ADDED
@@ -0,0 +1,21 @@
1
+ *Gem-Based Admins for Clearance*
2
+
3
+ Do you like movies about gladiators or "Clearance-based":http://github.com/thoughtbot/clearance authentication? If you do, you and Captain Oveur will become fast friends. Captain Oveur adds user-management tools and admin authentication to make flights of web development smoother.
4
+
5
+ Tested with Rails 2.3.5 and Clearance 0.8.8
6
+
7
+ Install it as a gem (after installing clearance, cucumber and clearance_features):
8
+
9
+ gem install captain_oveur
10
+
11
+ script/generate captain_oveur
12
+
13
+ for the cucumber features:
14
+
15
+ script/generate captain_oveur_features
16
+
17
+ NOTE
18
+
19
+ A lot of this gem looks exactly like "clearance":http://github.com/thoughtbot/clearance. Firstly, I am an unabashed fan of "thoughtbot":http://thoughtbot.com and clearance. Given the problem domain, I also think it was the best way to handle a lot of issues, but I am open to criticism and/or suggestions.
20
+
21
+ (c) 2009-2010 Disruptive Ventures, Inc. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new('captain_oveur', '0.8.10') do |p|
6
+ p.description = "Admins for Clearance"
7
+ p.url = "http://disruptive.github.com/captain_oveur"
8
+ p.author = "Jerry Richardson, Zachery Maloney"
9
+ p.email = "jerry@disruptiveventures.com"
10
+ p.ignore_pattern = []
11
+ p.runtime_dependencies = ["clearance >=0.8.8","formtastic >=0.9.10"]
12
+ p.development_dependencies = []
13
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.8.10
@@ -0,0 +1,106 @@
1
+ class Admin::UsersController < ApplicationController
2
+
3
+ before_filter :admin_only
4
+
5
+ def index
6
+ @users = User.all
7
+ end
8
+
9
+ def new
10
+ @user = User.new
11
+ end
12
+
13
+ def create
14
+ @user = User.new(params[:user])
15
+ respond_to do |format|
16
+ if @user.save
17
+ flash[:msg] = "User created."
18
+ format.html do
19
+ redirect_to admin_user_path(@user)
20
+ end
21
+ else
22
+ format.html do
23
+ render :action => :new
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ def edit
30
+ @user = User.find(params[:id])
31
+ end
32
+
33
+ def update
34
+ @user = User.find(params[:id])
35
+ if params[:user_admin] and params[:user_admin] == 1
36
+ @user.activate_admin!
37
+ else
38
+ @user.deactivate_admin!
39
+ end
40
+ respond_to do |format|
41
+ if @user.update_attributes(params[:user])
42
+ flash[:msg] = "User #{@user.email} was successfully updated."
43
+ format.html do
44
+ redirect_to admin_users_path
45
+ end
46
+ else
47
+ format.html do
48
+ render :action => :edit
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ def activate_admin
55
+ @user = User.find(params[:id])
56
+ respond_to do |format|
57
+ if @user.activate_admin!
58
+ flash[:msg] = "User #{@user.email} was promoted to Admin."
59
+ format.html do
60
+ redirect_to edit_admin_user_path(@user)
61
+ end
62
+ else
63
+ format.html do
64
+ flash[:msg] = "User #{@user.email} could not be promoted to Admin."
65
+ render :action => :edit
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ def deactivate_admin
72
+ @user = User.find(params[:id])
73
+ respond_to do |format|
74
+ if @user.deactivate_admin!
75
+ flash[:msg] = "User #{@user.email} was demoted from Admin."
76
+ format.html do
77
+ redirect_to edit_admin_user_path(@user)
78
+ end
79
+ else
80
+ format.html do
81
+ flash[:msg] = "User #{@user.email} could not be demoted from Admin."
82
+ render :action => :edit
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ def show
89
+ @user = User.find(params[:id])
90
+ end
91
+
92
+ def destroy
93
+ @user = User.find(params[:id])
94
+ respond_to do |format|
95
+ if current_user.id != @user.id && @user.destroy
96
+ flash[:msg] = "User deleted."
97
+ else
98
+ flash[:msg] = "User could not be deleted."
99
+ end
100
+ format.html do
101
+ redirect_to admin_users_path
102
+ end
103
+ end
104
+ end
105
+
106
+ end
@@ -0,0 +1,12 @@
1
+ <% semantic_form_for [:admin, @user] do |form| %>
2
+ <% form.inputs do %>
3
+ <%= form.input :email, :label => 'Email' %>
4
+ <%= form.input :password, :label => 'Password' %>
5
+ <%= form.input :password_confirmation, :label => 'Confirm Password' %>
6
+ <%= form.input :admin, :label => 'Admin' %>
7
+ <%= form.input :email_confirmed, :label => 'Email confirmed' %>
8
+ <% end %>
9
+ <% form.buttons do %>
10
+ <%= form.commit_button %>
11
+ <% end %>
12
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <h1>Edit User <%= @user.id %></h1>
2
+ <%= render(:partial => "form") %>
3
+
4
+ <%= button_to "Activate Admin", { :action => "activate_admin", :id => @user.id }, { :confirm => "Are you sure?", :id => "activate_admin_user_#{@user.id}" } %>
5
+
6
+ <%= button_to "Deactivate Admin", { :action => "deactivate_admin", :id => @user.id }, { :confirm => "Are you sure?", :id => "deactivate_admin_user_#{@user.id}" } %>
@@ -0,0 +1,12 @@
1
+ <h1>User Management Home Page</h1>
2
+
3
+ <ul>
4
+ <% @users.each do |u| %>
5
+ <li class='users'><%= link_to u.email, admin_user_path(u), :id => "show_user_#{u.id}" %><br>
6
+ <%= link_to "Edit", edit_admin_user_path(u), :id => "edit_user_#{u.id}" %>
7
+ <%= button_to "Delete", { :action => "destroy", :id => u.id }, :confirm => "Are you sure?", :method => :delete, :id => "delete_user_#{u.id}" %>
8
+ </li>
9
+ <% end %>
10
+ </ul>
11
+
12
+ <p><%= link_to "Add a new user", new_admin_user_path %></p>
@@ -0,0 +1,2 @@
1
+ <h1>Create a New User</h1>
2
+ <%= render(:partial => "form") %>
@@ -0,0 +1,4 @@
1
+ <h1>Admin::Users#show</h1>
2
+
3
+
4
+ <p>Email: <%= @user.email %></p>
@@ -0,0 +1,39 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{captain_oveur}
5
+ s.version = "0.8.10"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Jerry Richardson, Zachery Maloney"]
9
+ s.cert_chain = ["/users/jerry/.ssh/gem-public_cert.pem"]
10
+ s.date = %q{2010-07-05}
11
+ s.description = %q{Admins for Clearance}
12
+ s.email = %q{jerry@disruptiveventures.com}
13
+ s.extra_rdoc_files = ["CHANGELOG.textile", "LICENSE", "README", "README.textile", "lib/captain_oveur.rb", "lib/captain_oveur/authentication.rb", "lib/captain_oveur/routes.rb", "lib/captain_oveur/user.rb"]
14
+ s.files = ["CHANGELOG.textile", "LICENSE", "Manifest", "README", "README.textile", "Rakefile", "VERSION", "app/controllers/admin/users_controller.rb", "app/views/admin/users/_form.erb", "app/views/admin/users/edit.html.erb", "app/views/admin/users/index.html.erb", "app/views/admin/users/new.html.erb", "app/views/admin/users/show.html.erb", "generators/captain_oveur/README", "generators/captain_oveur/USAGE", "generators/captain_oveur/captain_oveur_generator.rb", "generators/captain_oveur/lib/insert_commands.rb", "generators/captain_oveur/lib/rake_commands.rb", "generators/captain_oveur/templates/admins.rb", "generators/captain_oveur/templates/migrations/update_admins.rb", "generators/captain_oveur_features/USAGE", "generators/captain_oveur_features/captain_oveur_features_generator.rb", "generators/captain_oveur_features/templates/features/administration.feature", "generators/captain_oveur_features/templates/features/step_definitions/administration_steps.rb", "generators/captain_oveur_features/templates/features/support/paths.rb", "lib/captain_oveur.rb", "lib/captain_oveur/authentication.rb", "lib/captain_oveur/routes.rb", "lib/captain_oveur/user.rb", "test/captain_oveur_test.rb", "test/factories/admins.rb", "test/test_helper.rb", "captain_oveur.gemspec"]
15
+ s.homepage = %q{http://disruptive.github.com/captain_oveur}
16
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Captain_oveur", "--main", "README"]
17
+ s.require_paths = ["lib"]
18
+ s.rubyforge_project = %q{captain_oveur}
19
+ s.rubygems_version = %q{1.3.7}
20
+ s.signing_key = %q{/users/jerry/.ssh/gem-private_key.pem}
21
+ s.summary = %q{Admins for Clearance}
22
+ s.test_files = ["test/captain_oveur_test.rb", "test/test_helper.rb"]
23
+
24
+ if s.respond_to? :specification_version then
25
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
26
+ s.specification_version = 3
27
+
28
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
29
+ s.add_runtime_dependency(%q<clearance>, [">= 0.8.8"])
30
+ s.add_runtime_dependency(%q<formtastic>, [">= 0.9.10"])
31
+ else
32
+ s.add_dependency(%q<clearance>, [">= 0.8.8"])
33
+ s.add_dependency(%q<formtastic>, [">= 0.9.10"])
34
+ end
35
+ else
36
+ s.add_dependency(%q<clearance>, [">= 0.8.8"])
37
+ s.add_dependency(%q<formtastic>, [">= 0.9.10"])
38
+ end
39
+ end
@@ -0,0 +1,6 @@
1
+
2
+ *******************************************************************************
3
+
4
+ Roger, Roger. What's our vector, Victor?
5
+
6
+ *******************************************************************************
@@ -0,0 +1 @@
1
+ script/generate captain_oveur
@@ -0,0 +1,55 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/lib/insert_commands.rb")
2
+ require File.expand_path(File.dirname(__FILE__) + "/lib/rake_commands.rb")
3
+
4
+ class CaptainOveurGenerator < Rails::Generator::Base
5
+
6
+ def manifest
7
+ record do |m|
8
+ # m.directory File.join("config", "initializers")
9
+ # m.file "captain_oveur.rb", "config/initializers/captain_oveur.rb"
10
+
11
+ m.insert_into "app/controllers/application_controller.rb",
12
+ "include CaptainOveur::Authentication"
13
+
14
+
15
+ m.insert_into "config/routes.rb",
16
+ "CaptainOveur::Routes.draw(map)"
17
+
18
+ m.directory File.join("test", "factories")
19
+ m.file "admins.rb", "test/factories/clearance_admins.rb"
20
+
21
+ m.migration_template "migrations/update_admins.rb",
22
+ 'db/migrate',
23
+ :migration_file_name => "captain_oveur_#{migration_target_name}"
24
+
25
+ m.readme "../README"
26
+ end
27
+ end
28
+
29
+ def schema_version_constant
30
+ # if upgrading_clearance_again?
31
+ # "To#{schema_version.gsub('_', '')}"
32
+ # end
33
+ ""
34
+ end
35
+
36
+ private
37
+
38
+ def migration_target_name
39
+ # if upgrading_captain_oveur_again?
40
+ # "update_admins_to_#{schema_version}"
41
+ # else
42
+ # 'update_admins'
43
+ # end
44
+ "update_admins"
45
+ end
46
+
47
+ def schema_version
48
+ IO.read(File.join(File.dirname(__FILE__), '..', '..', 'VERSION')).strip.gsub(/[^\d]/, '_')
49
+ end
50
+
51
+ # def upgrading_clearance_again?
52
+ # ActiveRecord::Base.connection.table_exists?(:users)
53
+ # end
54
+
55
+ end
@@ -0,0 +1,33 @@
1
+ # Mostly pinched from http://github.com/ryanb/nifty-generators/tree/master
2
+
3
+ Rails::Generator::Commands::Base.class_eval do
4
+ def file_contains?(relative_destination, line)
5
+ File.read(destination_path(relative_destination)).include?(line)
6
+ end
7
+ end
8
+
9
+ Rails::Generator::Commands::Create.class_eval do
10
+ def insert_into(file, line)
11
+ logger.insert "#{line} into #{file}"
12
+ unless options[:pretend] || file_contains?(file, line)
13
+ gsub_file file, /^(class|module|.*Routes).*$/ do |match|
14
+ "#{match}\n #{line}"
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ Rails::Generator::Commands::Destroy.class_eval do
21
+ def insert_into(file, line)
22
+ logger.remove "#{line} from #{file}"
23
+ unless options[:pretend]
24
+ gsub_file file, "\n #{line}", ''
25
+ end
26
+ end
27
+ end
28
+
29
+ Rails::Generator::Commands::List.class_eval do
30
+ def insert_into(file, line)
31
+ logger.insert "#{line} into #{file}"
32
+ end
33
+ end
@@ -0,0 +1,22 @@
1
+ Rails::Generator::Commands::Create.class_eval do
2
+ def rake_db_migrate
3
+ logger.rake "db:migrate"
4
+ unless system("rake db:migrate")
5
+ logger.rake "db:migrate failed. Rolling back"
6
+ command(:destroy).invoke!
7
+ end
8
+ end
9
+ end
10
+
11
+ Rails::Generator::Commands::Destroy.class_eval do
12
+ def rake_db_migrate
13
+ logger.rake "db:rollback"
14
+ system "rake db:rollback"
15
+ end
16
+ end
17
+
18
+ Rails::Generator::Commands::List.class_eval do
19
+ def rake_db_migrate
20
+ logger.rake "db:migrate"
21
+ end
22
+ end
@@ -0,0 +1,4 @@
1
+ Factory.define :admin_user, :parent => :email_confirmed_user do |user|
2
+ user.email_confirmed { true }
3
+ user.admin { true }
4
+ end
@@ -0,0 +1,23 @@
1
+ class CaptainOveurUpdateAdmins<%= schema_version_constant %> < ActiveRecord::Migration
2
+ def self.up
3
+ <%
4
+ existing_columns = ActiveRecord::Base.connection.columns(:users).collect { |each| each.name }
5
+ columns = [
6
+ [:admin, 't.boolean :admin, :default => false, :null => false']
7
+ ].delete_if {|c| existing_columns.include?(c.first.to_s)}
8
+ -%>
9
+ change_table(:users) do |t|
10
+ <% columns.each do |c| -%>
11
+ <%= c.last %>
12
+ <% end -%>
13
+ end
14
+ end
15
+
16
+ def self.down
17
+ change_table(:users) do |t|
18
+ <% unless columns.empty? -%>
19
+ t.remove <%= columns.collect { |each| ":#{each.first}" }.join(',') %>
20
+ <% end -%>
21
+ end
22
+ end
23
+ end
@@ -0,0 +1 @@
1
+ script/generate captain_oveur_features
@@ -0,0 +1,16 @@
1
+ class CaptainOveurFeaturesGenerator < Rails::Generator::Base
2
+
3
+ def manifest
4
+ record do |m|
5
+ m.directory File.join("features", "step_definitions")
6
+ m.directory File.join("features", "support")
7
+
8
+ ["features/step_definitions/administration_steps.rb",
9
+ "features/support/paths.rb",
10
+ "features/administration.feature"].each do |file|
11
+ m.file file, file
12
+ end
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,82 @@
1
+ Feature: Administrate Site Users
2
+ In order to manage the site
3
+ Administrators should be able to
4
+ administrate site users
5
+
6
+ Scenario: Administrator should be able to manage users
7
+ Given I am an admin signed in as "ken@tacostorm.dev/password"
8
+ And there are 5 users
9
+ And I go to the user administration home page
10
+ Then I should see "User Management Home Page"
11
+ And I should see 6 listings of users
12
+ And I should see "user1@jerryr.dev"
13
+
14
+ Scenario: Non-Admin User should not be able to manage users
15
+ Given I have signed in with "jerry@jerryr.dev/password"
16
+ When I go to the user administration home page
17
+ Then I should see "Please Login as an administrator to Access that Feature."
18
+
19
+ Scenario: Visitors should not be able to manage users
20
+ When I go to the user administration home page
21
+ Then I should see "Please Login as an administrator to Access that Feature."
22
+
23
+ Scenario: Administrator should be able to add a new User
24
+ Given I am an admin signed in as "ken@tacostorm.dev/password"
25
+ And I go to the user administration home page
26
+ And I follow "Add a new user"
27
+ And I fill in "Email" with "user@jerryr.dev"
28
+ And I fill in "Password" with "password"
29
+ And I fill in "Confirm password" with "password"
30
+ And I press "Create User"
31
+ Then I should see "User created."
32
+ And I should see "user@jerryr.dev"
33
+
34
+ Scenario: Administrator should be able to delete a User
35
+ Given I am an admin signed in as "ken@tacostorm.dev/password"
36
+ And there are 5 users
37
+ And an id-specific user signed up "zachery@jerryr.dev/password/90210"
38
+ And go to the user administration home page
39
+ And I press "delete_user_90210"
40
+ Then I should see "User deleted."
41
+ And I should not see "zachery@jerryr.dev"
42
+ And I should see 6 listings of users
43
+ # And show me the page
44
+
45
+ Scenario: Administrator should be not able to delete his own account
46
+ Given I am an admin signed in as "ken@tacostorm.dev/password"
47
+ And I go to the user administration home page
48
+ And I press "Delete"
49
+ Then I should see "User could not be deleted."
50
+ And I should see "ken@tacostorm.dev"
51
+
52
+ Scenario: Administrator should be able to edit a User
53
+ Given I am an admin signed in as "ken@tacostorm.dev/password"
54
+ And an id-specific user signed up "zachery@jerryr.dev/password/90210"
55
+ And go to the user administration home page
56
+ And I follow "edit_user_90210"
57
+ And I fill in "user_email" with "zachery2@jerryr.dev"
58
+ And I press "Update User"
59
+ Then I should see "User zachery2@jerryr.dev was successfully updated."
60
+
61
+ Scenario: Administrator should be able to view a User
62
+ Given I am an admin signed in as "ken@tacostorm.dev/password"
63
+ And an id-specific user signed up "zachery@jerryr.dev/password/90210"
64
+ And go to the user administration home page
65
+ And I follow "show_user_90210"
66
+ Then I should see "zachery@jerryr.dev"
67
+
68
+ Scenario: Administrator can identify a User as a Admin
69
+ Given I am an admin signed in as "ken@tacostorm.dev/password"
70
+ And an id-specific user signed up "zachery@disruptive.dev/password/90211"
71
+ And go to the user administration home page
72
+ And I follow "edit_user_90211"
73
+ And I press "Activate Admin"
74
+ Then the "admin" checkbox should be checked
75
+
76
+ Scenario: Administrator can remove a User from Admin status
77
+ Given an id-specific admin user signed up and confirmed as "zachery@disruptive.dev/password/90211"
78
+ And I am an admin signed in as "ken@tacostorm.dev/password"
79
+ And go to the user administration home page
80
+ And I follow "edit_user_90211"
81
+ And I press "Deactivate Admin"
82
+ Then the "admin" checkbox should not be checked
@@ -0,0 +1,49 @@
1
+ Given /^an id-specific user signed up "(.*)\/(.*)\/(.*)"$/ do |email, password, id|
2
+ user = Factory :email_confirmed_user,
3
+ :id => id,
4
+ :email => email,
5
+ :password => password,
6
+ :password_confirmation => password
7
+ end
8
+
9
+ Given /^a user signed up and confirmed as "(.*)\/(.*)"$/ do |email, password|
10
+ Given %{I am signed up and confirmed as a specific user "#{email}/#{password}"}
11
+ end
12
+
13
+ Given /^an id-specific admin user signed up and confirmed as "(.*)\/(.*)\/(.*)"$/ do |email, password, id|
14
+ user = Factory :admin_user,
15
+ :id => id,
16
+ :email => email,
17
+ :password => password,
18
+ :password_confirmation => password
19
+ end
20
+
21
+ Given /^I am an admin signed up as "(.*)\/(.*)"$/ do |email, password|
22
+ user = Factory :admin_user,
23
+ :email => email,
24
+ :password => password,
25
+ :password_confirmation => password
26
+ end
27
+
28
+ Given /^an admin user signed up and confirmed as "(.*)\/(.*)"$/ do |email, password|
29
+ Given %{I am an admin signed up as "#{email}/#{password}"}
30
+ end
31
+
32
+ Given /^I am an admin signed in as "(.*)\/(.*)"$/ do |email, password|
33
+ Given %{I am an admin signed up as "#{email}/#{password}"}
34
+ And %{I sign in as "#{email}/#{password}"}
35
+ end
36
+
37
+ Given /^there are (\d+) users$/ do |n|
38
+ n.to_i.times{|i| Given %{I am signed up and confirmed as "user#{i}@jerryr.dev/password"} }
39
+ end
40
+
41
+ Then /^I should see (.*) listings of (.*)$/ do |count, list_class|
42
+ assert_select "li[class=#{list_class}]", :count => count.to_i
43
+ end
44
+
45
+ When /^I follow the "([^\"]*)" link for "([^\"]*)"$/ do |link, cell_value|
46
+ within "//*[.//text()='#{cell_value}' and .//a[text()='#{link}']]" do |scope|
47
+ scope.click_link link
48
+ end
49
+ end
@@ -0,0 +1,42 @@
1
+ module NavigationHelpers
2
+ # Maps a name to a path. Used by the
3
+ #
4
+ # When /^I go to (.+)$/ do |page_name|
5
+ #
6
+ # step definition in web_steps.rb
7
+ #
8
+ def path_to(page_name)
9
+ case page_name
10
+
11
+ when /the home\s?page/
12
+ '/'
13
+ when /the sign up page/i
14
+ sign_up_path
15
+ when /the sign in page/i
16
+ sign_in_path
17
+ when /the password reset request page/i
18
+ new_password_path
19
+ when /the administration home page/i
20
+ admin_panel_path
21
+ when /the user administration home page/i
22
+ admin_users_path
23
+ # Add more mappings here.
24
+ # Here is an example that pulls values out of the Regexp:
25
+ #
26
+ # when /^(.*)'s profile page$/i
27
+ # user_profile_path(User.find_by_login($1))
28
+
29
+ else
30
+ begin
31
+ page_name =~ /the (.*) page/
32
+ path_components = $1.split(/\s+/)
33
+ self.send(path_components.push('path').join('_').to_sym)
34
+ rescue Object => e
35
+ raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
36
+ "Now, go and add a mapping in #{__FILE__}"
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ World(NavigationHelpers)
@@ -0,0 +1,3 @@
1
+ require 'captain_oveur/routes.rb'
2
+ require 'captain_oveur/authentication.rb'
3
+ require 'captain_oveur/user.rb'
@@ -0,0 +1,27 @@
1
+ module CaptainOveur
2
+ module Authentication
3
+
4
+ def self.included(controller)
5
+ controller.send(:include, InstanceMethods)
6
+ controller.extend(ClassMethods)
7
+ end
8
+
9
+ module ClassMethods
10
+ def self.extended(controller)
11
+ controller.helper_method :admin?
12
+ controller.hide_action :admin?, :admin_only
13
+ end
14
+ end
15
+
16
+ module InstanceMethods
17
+ def admin?
18
+ current_user && current_user.admin
19
+ end
20
+
21
+ def admin_only
22
+ deny_access("Please Login as an administrator to Access that Feature.") unless admin?
23
+ end
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ module CaptainOveur
2
+ class Routes
3
+
4
+ # In your application's config/routes.rb, draw CaptainOveur's
5
+ # Routes right after Clearance's routes:
6
+ #
7
+ # @example
8
+ # map.resources :posts
9
+ # Clearance::Routes.draw(map)
10
+ # CaptainOveur::Routes.draw(map)
11
+ def self.draw(map)
12
+
13
+ map.namespace :admin do |admin|
14
+ admin.resources :users
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ require 'digest/sha1'
2
+
3
+ module CaptainOveur
4
+ module User
5
+
6
+ def self.included(model)
7
+ model.send(:include, InstanceMethods)
8
+ end
9
+
10
+ module InstanceMethods
11
+ def activate_admin!
12
+ return self.update_attribute("admin", true)
13
+ end
14
+
15
+ def deactivate_admin!
16
+ return self.update_attribute("admin", false)
17
+ end
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class CaptainOveurTest < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ Factory.define :admin_user, :parent => :email_confirmed_user do |user|
2
+ user.email_confirmed { true }
3
+ user.admin { true }
4
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'captain_oveur'
8
+
9
+ class Test::Unit::TestCase
10
+ end
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: captain_oveur
3
+ version: !ruby/object:Gem::Version
4
+ hash: 43
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 8
9
+ - 10
10
+ version: 0.8.10
11
+ platform: ruby
12
+ authors:
13
+ - Jerry Richardson, Zachery Maloney
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain:
17
+ - |
18
+ -----BEGIN CERTIFICATE-----
19
+ MIIDRjCCAi6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBJMQ4wDAYDVQQDDAVqZXJy
20
+ eTEiMCAGCgmSJomT8ixkARkWEmRpc3J1cHRpdmV2ZW50dXJlczETMBEGCgmSJomT
21
+ 8ixkARkWA2NvbTAeFw0xMDA3MDMwMzIxMThaFw0xMTA3MDMwMzIxMThaMEkxDjAM
22
+ BgNVBAMMBWplcnJ5MSIwIAYKCZImiZPyLGQBGRYSZGlzcnVwdGl2ZXZlbnR1cmVz
23
+ MRMwEQYKCZImiZPyLGQBGRYDY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
24
+ CgKCAQEApGoL2172SQsohHPmC5uWskpMJxdEFNYsLkh02pEpkL3xtdYRKnYeYXJ6
25
+ 6OzAwc1gxHSDvlKMNOzs8cAv48pjrEnEgiwkQ2RV1LjCgxKODs3xJr/q7m/96A8P
26
+ v32Nk783IxjPUQjd6dkeeSoyH8b1fZT0qDV+vthzBLvmNNKHCboZrmlw9NKVhdDp
27
+ Hrvik+hseFTyRBFBnYP4H8zWY3jwBW/dq1dEWEAH55Jjb86quTNsp4UEt7kQ86nH
28
+ fces3O8CDTbGAsb5oHB4E/JjPOG/sFMao0QAH5EVdx+m1vhrrTKmxE8EMEVetSV1
29
+ W5KDjklkZH7lQMWoo1Ktr1WiGLiMcQIDAQABozkwNzAJBgNVHRMEAjAAMAsGA1Ud
30
+ DwQEAwIEsDAdBgNVHQ4EFgQUQYUunQvey42EFLspsNHGUQbxLVAwDQYJKoZIhvcN
31
+ AQEFBQADggEBAEJICcZD0dNBobtNyRZ8ygj1WFMycpVcjUm2DKNWC5PZZG4GPX6B
32
+ ird6DHAnhgZ9aEHuBK0UMQboA0SXHk69LseZuTIbbIhorTPpF1vfnl+D98C/Y5ou
33
+ PTKGqqNhcAmv3v+r9EpRayQsP7HSbrKMtgPlEkqVQY2St7VQu3qKciFV1qJXJYPd
34
+ xbwowofGcVamEdKGpyX54opfSrmSZXfRUPYeJ25/d6dS+G3tvvnTYa9QgYWS2gJE
35
+ /eC3ArwUSNMnuP5i+2xXPsu7c82zIauU01bv3ywlC5C8KwmX8UjcIwsHtPnaGesF
36
+ MULeaT9wztQIvRS+mr/QYLKBA08UERlaUm4=
37
+ -----END CERTIFICATE-----
38
+
39
+ date: 2010-07-05 00:00:00 -04:00
40
+ default_executable:
41
+ dependencies:
42
+ - !ruby/object:Gem::Dependency
43
+ name: clearance
44
+ prerelease: false
45
+ requirement: &id001 !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ hash: 47
51
+ segments:
52
+ - 0
53
+ - 8
54
+ - 8
55
+ version: 0.8.8
56
+ type: :runtime
57
+ version_requirements: *id001
58
+ - !ruby/object:Gem::Dependency
59
+ name: formtastic
60
+ prerelease: false
61
+ requirement: &id002 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ hash: 47
67
+ segments:
68
+ - 0
69
+ - 9
70
+ - 10
71
+ version: 0.9.10
72
+ type: :runtime
73
+ version_requirements: *id002
74
+ description: Admins for Clearance
75
+ email: jerry@disruptiveventures.com
76
+ executables: []
77
+
78
+ extensions: []
79
+
80
+ extra_rdoc_files:
81
+ - CHANGELOG.textile
82
+ - LICENSE
83
+ - README
84
+ - README.textile
85
+ - lib/captain_oveur.rb
86
+ - lib/captain_oveur/authentication.rb
87
+ - lib/captain_oveur/routes.rb
88
+ - lib/captain_oveur/user.rb
89
+ files:
90
+ - CHANGELOG.textile
91
+ - LICENSE
92
+ - Manifest
93
+ - README
94
+ - README.textile
95
+ - Rakefile
96
+ - VERSION
97
+ - app/controllers/admin/users_controller.rb
98
+ - app/views/admin/users/_form.erb
99
+ - app/views/admin/users/edit.html.erb
100
+ - app/views/admin/users/index.html.erb
101
+ - app/views/admin/users/new.html.erb
102
+ - app/views/admin/users/show.html.erb
103
+ - generators/captain_oveur/README
104
+ - generators/captain_oveur/USAGE
105
+ - generators/captain_oveur/captain_oveur_generator.rb
106
+ - generators/captain_oveur/lib/insert_commands.rb
107
+ - generators/captain_oveur/lib/rake_commands.rb
108
+ - generators/captain_oveur/templates/admins.rb
109
+ - generators/captain_oveur/templates/migrations/update_admins.rb
110
+ - generators/captain_oveur_features/USAGE
111
+ - generators/captain_oveur_features/captain_oveur_features_generator.rb
112
+ - generators/captain_oveur_features/templates/features/administration.feature
113
+ - generators/captain_oveur_features/templates/features/step_definitions/administration_steps.rb
114
+ - generators/captain_oveur_features/templates/features/support/paths.rb
115
+ - lib/captain_oveur.rb
116
+ - lib/captain_oveur/authentication.rb
117
+ - lib/captain_oveur/routes.rb
118
+ - lib/captain_oveur/user.rb
119
+ - test/captain_oveur_test.rb
120
+ - test/factories/admins.rb
121
+ - test/test_helper.rb
122
+ - captain_oveur.gemspec
123
+ has_rdoc: true
124
+ homepage: http://disruptive.github.com/captain_oveur
125
+ licenses: []
126
+
127
+ post_install_message:
128
+ rdoc_options:
129
+ - --line-numbers
130
+ - --inline-source
131
+ - --title
132
+ - Captain_oveur
133
+ - --main
134
+ - README
135
+ require_paths:
136
+ - lib
137
+ required_ruby_version: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ hash: 3
143
+ segments:
144
+ - 0
145
+ version: "0"
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ none: false
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ hash: 11
152
+ segments:
153
+ - 1
154
+ - 2
155
+ version: "1.2"
156
+ requirements: []
157
+
158
+ rubyforge_project: captain_oveur
159
+ rubygems_version: 1.3.7
160
+ signing_key:
161
+ specification_version: 3
162
+ summary: Admins for Clearance
163
+ test_files:
164
+ - test/captain_oveur_test.rb
165
+ - test/test_helper.rb
metadata.gz.sig ADDED
Binary file