devisable 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/Devisable.gemspec +117 -0
  2. data/Gemfile +13 -0
  3. data/LICENSE.txt +20 -0
  4. data/README.rdoc +111 -0
  5. data/Rakefile +56 -0
  6. data/VERSION +1 -0
  7. data/lib/generators/devisable/USAGE +57 -0
  8. data/lib/generators/devisable/devisable_generator.rb +484 -0
  9. data/lib/generators/devisable/templates/app/controllers/registrations_controller.erb +19 -0
  10. data/lib/generators/devisable/templates/app/controllers/users_controller.erb +152 -0
  11. data/lib/generators/devisable/templates/app/controllers/welcome_controller.erb +11 -0
  12. data/lib/generators/devisable/templates/app/helpers/roles_helper.erb +63 -0
  13. data/lib/generators/devisable/templates/app/models/permission.erb +12 -0
  14. data/lib/generators/devisable/templates/app/models/role.erb +5 -0
  15. data/lib/generators/devisable/templates/app/views/roles/_form.erb +29 -0
  16. data/lib/generators/devisable/templates/app/views/roles/edit.erb +6 -0
  17. data/lib/generators/devisable/templates/app/views/roles/index.erb +28 -0
  18. data/lib/generators/devisable/templates/app/views/roles/new.erb +5 -0
  19. data/lib/generators/devisable/templates/app/views/roles/show.erb +10 -0
  20. data/lib/generators/devisable/templates/app/views/shared/_admin_nav.erb +7 -0
  21. data/lib/generators/devisable/templates/app/views/users/_form.erb +23 -0
  22. data/lib/generators/devisable/templates/app/views/users/edit.erb +6 -0
  23. data/lib/generators/devisable/templates/app/views/users/index.erb +27 -0
  24. data/lib/generators/devisable/templates/app/views/users/new.erb +5 -0
  25. data/lib/generators/devisable/templates/app/views/users/show.erb +55 -0
  26. data/lib/generators/devisable/templates/app/views/welcome/welcome_index.erb +3 -0
  27. data/lib/generators/devisable/templates/config/initializers/devise_initializer.erb +239 -0
  28. data/lib/generators/devisable/templates/cucumber/_rake_partial.rb +19 -0
  29. data/lib/generators/devisable/templates/cucumber/devise.feature +78 -0
  30. data/lib/generators/devisable/templates/cucumber/role.feature +79 -0
  31. data/lib/generators/devisable/templates/cucumber/step_definitions/authentication_steps.rb +33 -0
  32. data/lib/generators/devisable/templates/cucumber/step_definitions/generic_steps.rb +23 -0
  33. data/lib/generators/devisable/templates/cucumber/step_definitions/role_steps.rb +32 -0
  34. data/lib/generators/devisable/templates/cucumber/step_definitions/user_steps.rb +30 -0
  35. data/lib/generators/devisable/templates/cucumber/support/_env_partial.rb +57 -0
  36. data/lib/generators/devisable/templates/cucumber/support/_paths_partial.rb +20 -0
  37. data/lib/generators/devisable/templates/cucumber/user.feature +45 -0
  38. data/lib/generators/devisable/templates/partials/_ability_class.rb +53 -0
  39. data/lib/generators/devisable/templates/partials/_access_denied_flash.rb +4 -0
  40. data/lib/generators/devisable/templates/partials/_accessible_permissions_controller.rb +8 -0
  41. data/lib/generators/devisable/templates/partials/_accessible_permissions_model.rb +43 -0
  42. data/lib/generators/devisable/templates/partials/_application_controller_methods.erb +3 -0
  43. data/lib/generators/devisable/templates/partials/_application_controller_methods2.erb +11 -0
  44. data/lib/generators/devisable/templates/partials/_application_current_tab.rb +8 -0
  45. data/lib/generators/devisable/templates/partials/_application_flash.html.erb +4 -0
  46. data/lib/generators/devisable/templates/partials/_environments_development.erb +10 -0
  47. data/lib/generators/devisable/templates/partials/_login_links.erb +18 -0
  48. data/lib/generators/devisable/templates/partials/_migration_down.rb +2 -0
  49. data/lib/generators/devisable/templates/partials/_migration_up.rb +7 -0
  50. data/lib/generators/devisable/templates/partials/_oauth_user_table_fields.erb +1 -0
  51. data/lib/generators/devisable/templates/partials/_permission_equals.rb +8 -0
  52. data/lib/generators/devisable/templates/partials/_permission_manage.js +18 -0
  53. data/lib/generators/devisable/templates/partials/_role_permission.rb +72 -0
  54. data/lib/generators/devisable/templates/partials/_roles_index_delete.erb +7 -0
  55. data/lib/generators/devisable/templates/partials/_user_model_methods.erb +21 -0
  56. data/lib/generators/devisable/templates/partials/_user_role.rb +7 -0
  57. data/lib/generators/devisable/templates/spec/helpers/roles_helper_spec.erb +50 -0
  58. data/lib/generators/devisable/templates/spec/models/ability_spec.erb +69 -0
  59. data/lib/generators/devisable/templates/spec/models/permission_spec.erb +22 -0
  60. data/lib/generators/devisable/templates/spec/models/role_spec.erb +45 -0
  61. data/lib/generators/devisable/templates/spec/models/user_spec.erb +65 -0
  62. data/pkg/devisable-0.1.0.gem +0 -0
  63. data/pkg/devise_generator-0.1.0.gem +0 -0
  64. data/test/helper.rb +18 -0
  65. data/test/test_devise_generator.rb +7 -0
  66. metadata +169 -0
@@ -0,0 +1,7 @@
1
+ <td>
2
+ <%% if role.users.length > 0 %>
3
+ <span title="Roles with associated users cannot be deleted">Delete</span>
4
+ <%% else %>
5
+ <%%= link_to_if(can?(:delete, Role), 'Destroy', role, :confirm => 'Are you sure?', :method => :delete) %></td>
6
+ <%% end %>
7
+ </td>
@@ -0,0 +1,21 @@
1
+ validate :username_or_email_exists
2
+
3
+ # Used for validation. Validates whether a username or email exists because one is required.
4
+ def username_or_email_exists
5
+ if username.blank? && email.blank?
6
+ self.errors.add(:email, "or Username is required.")
7
+ end
8
+ end
9
+
10
+ # Returns the user's email or username depending on which is set
11
+ # @return [String] Return username unless it is blank, then return email
12
+ def display_name
13
+ return self.username.blank? ? self.email : self.username
14
+ end
15
+
16
+ class << self
17
+ # Join to the user role habtm table that restricts output to super admins
18
+ def superadmins
19
+ joins("join roles_users on users.id = roles_users.user_id").where("roles_users.role_id = (select id from roles where name = 'SuperAdmin')");
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ # Determines whether or not a user has a role
2
+ #
3
+ # @param role Name of the role to search for
4
+ # @return [Boolean] True if the user has the specified role
5
+ def role?(role)
6
+ return !!self.roles.find_by_name(role.to_s.camelize)
7
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ # Specs in this file have access to a helper object that includes
4
+ # the RolesHelper. For example:
5
+ #
6
+ # describe RolesHelper do
7
+ # describe "string concat" do
8
+ # it "concats two strings with spaces" do
9
+ # helper.concat_strings("this","that").should == "this that"
10
+ # end
11
+ # end
12
+ # end
13
+ describe RolesHelper do
14
+ #pending "add some examples to (or delete) #{__FILE__}"
15
+
16
+ describe "#permission_checkboxes" do
17
+ it "should contain a model that has controllers" do
18
+ @role = Role.new
19
+ output = permissions_checkboxes(@role, :permission_ids, Role.accessible_permissions, @role.id)
20
+ output['<th>Roles</th>'].should_not == nil
21
+ output['<th>Users</th>'].should_not == nil
22
+ end
23
+
24
+ it "should not contain a model that does not have a controller" do
25
+ @role = Role.new
26
+ output = permissions_checkboxes(@role, :permission_ids, Role.accessible_permissions, @role.id)
27
+ output['<th>Ability</th>'].should == nil
28
+ end
29
+
30
+ it "should not contain a model that does not have a controller" do
31
+ @role = Role.new
32
+ output = permissions_checkboxes(@role, :permission_ids, Role.accessible_permissions, @role.id)
33
+ output['<th>Ability</th>'].should == nil
34
+ end
35
+ end
36
+
37
+ describe "#habtm_checkboxes" do
38
+ it "should contain all roles" do
39
+ Role.new({:name => 'SuperAdmin'}).save
40
+ Role.new({:name => 'Admin'}).save
41
+ Role.new({:name => 'GeneralUser'}).save
42
+ @user = User.new({:email => 'test@tester.com'})
43
+ @accessible_roles = Role.all
44
+ output = habtm_checkboxes(@user, :role_ids, @accessible_roles, :name)
45
+ output['SuperAdmin</label>'].should_not == nil
46
+ output['Admin</label>'].should_not == nil
47
+ output['GeneralUser</label>'].should_not == nil
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ability do
4
+
5
+ before(:each) do
6
+ @role = Role.new({
7
+ :name => 'SuperAdmin'
8
+ })
9
+
10
+ @role2 = Role.new({
11
+ :name => 'RoleUser'
12
+ })
13
+
14
+ @user = User.new({:email => 'fred@testsite.com'})
15
+ @user2 = User.new({:email => 'terry@testsite.com'})
16
+ @user.roles << @role
17
+ @user2.roles << @role2
18
+
19
+ @role.permissions << Permission.new({:model => 'Role',:ability => 'Add'})
20
+ @role.permissions << Permission.new({:model => 'Role',:ability => 'Edit'})
21
+ @role.permissions << Permission.new({:model => 'Role',:ability => 'Delete'})
22
+ @role.permissions << Permission.new({:model => 'Role',:ability => 'View'})
23
+ @role.save
24
+ @user.save
25
+ @user_ability = Ability.new(@user)
26
+
27
+ @role2 = Role.new({
28
+ :name => 'RoleUser'
29
+ })
30
+
31
+ @user2 = User.new({:email => 'terry@testsite.com'})
32
+ @user2.roles << @role2
33
+ @role2.permissions << Permission.new({:model => 'Role',:ability => 'add'})
34
+ @role2.permissions << Permission.new({:model => 'Role',:ability => 'edit'})
35
+ @role2.permissions << Permission.new({:model => 'Role',:ability => 'delete'})
36
+ @role2.permissions << Permission.new({:model => 'Role',:ability => 'View'})
37
+ @role2.save
38
+ @user2.save
39
+ @user_ability2 = Ability.new(@user2)
40
+
41
+ end
42
+
43
+ it "SuperAdmin Can Edit/add/delete/ Roles and Users" do
44
+ @user_ability.can?(:view, Role).should be_true
45
+ @user_ability.can?(:add, Role).should be_true
46
+ @user_ability.can?(:edit, Role).should be_true
47
+ @user_ability.can?(:delete, Role).should be_true
48
+
49
+ @user_ability.can?(:view, User).should be_true
50
+ @user_ability.can?(:add, User).should be_true
51
+ @user_ability.can?(:edit, User).should be_true
52
+ @user_ability.can?(:delete, User).should be_true
53
+ end
54
+
55
+ it "User with Role Permissions Can Edit/add/delete/ Roles" do
56
+ @user_ability2.can?(:view, Role).should be_true
57
+ @user_ability2.can?(:add, Role).should be_true
58
+ @user_ability2.can?(:edit, Role).should be_true
59
+ @user_ability2.can?(:delete, Role).should be_true
60
+ end
61
+
62
+ it "User with Role Permissions Can NOT Edit/add/delete/ User" do
63
+ @user_ability2.can?(:view, User).should be_false
64
+ @user_ability2.can?(:add, User).should be_false
65
+ @user_ability2.can?(:edit, User).should be_false
66
+ @user_ability2.can?(:delete, User).should be_false
67
+ end
68
+
69
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Permission do
4
+ before(:each) do
5
+ @permission_1 = Permission.new({:role_id => 1,:model => 'Role'})
6
+ @permission_2 = Permission.new({:role_id => 1,:model => 'Role'})
7
+ @permission_3 = Permission.new({:role_id => 2,:model => 'Role'})
8
+ @permission_4 = Permission.new({:role_id => 1,:model => 'User'})
9
+ end
10
+
11
+ it "should be equal if the role and model are the same" do
12
+ (@permission_1 == @permission_2).should be_true
13
+ end
14
+
15
+ it "should NOT be equal if the roles are different" do
16
+ (@permission_1 == @permission_3).should be_false
17
+ end
18
+
19
+ it "should NOT be equal if the models are different" do
20
+ (@permission_1 == @permission_4).should be_false
21
+ end
22
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ module RoleSpecHelper
4
+ def valid_role_attributes
5
+ {
6
+ :name => "Super Admin"
7
+ }
8
+ end
9
+ end
10
+
11
+ describe Role do
12
+ include RoleSpecHelper
13
+
14
+ before(:each) do
15
+ @role = Role.new
16
+ @role2 = Role.new({
17
+ :name => 'Scott'
18
+ })
19
+ @user = User.new({:email => 'fred@testsite.com'})
20
+ @permission = Permission.new({:model => 'User',:ability => 'Add'})
21
+ end
22
+
23
+ it "should require a name" do
24
+ @role.should_not be_valid
25
+ end
26
+
27
+ it "should be valid with a name" do
28
+ @role2.should be_valid
29
+ end
30
+
31
+ it "should have many users" do
32
+ @role2.users << @user
33
+ @role2.save
34
+ (@role2.users.length > 0).should be_true
35
+ end
36
+
37
+ it "should have many permissions" do
38
+ @role2.permissions << @permission
39
+ @role2.save
40
+ (@role2.permissions.length > 0).should be_true
41
+ end
42
+
43
+
44
+
45
+ end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+
3
+ describe User do
4
+ before(:each) do
5
+ @role = Role.new({
6
+ :name => 'Admin'
7
+ })
8
+ @role2 = Role.new({
9
+ :name => 'SuperAdmin'
10
+ })
11
+ @role.save
12
+ @role2.save
13
+ @user = User.new({:email => 'fred@testsite.com'})
14
+ @user2 = User.new({:email => 'fred2@testsite.com',:username => 'fred2'})
15
+ @user3 = User.new({:username => 'fred3'})
16
+ @user4 = User.new()
17
+ @user.roles << @role
18
+ @user.save
19
+ @user2.roles << @role2
20
+ @user2.save
21
+ end
22
+
23
+ it "should have the role Admin if assigned the Admin Role" do
24
+ @user.role?('Admin').should be_true
25
+ end
26
+
27
+ it "should not have the role SuperAdmin if assigned the Admin Role" do
28
+ @user.role?('SuperAdmin').should be_false
29
+ end
30
+
31
+ it "should have username fred@testsite.com if there is no username" do
32
+ (@user.display_name == 'fred@testsite.com').should be_true
33
+ end
34
+
35
+ it "should have username fred if there is a username and an email" do
36
+ (@user2.display_name == 'fred2').should be_true
37
+ end
38
+
39
+ it "should have username fred if there is a username and no email" do
40
+ @user2.email = ''
41
+ (@user2.display_name == 'fred2').should be_true
42
+ end
43
+
44
+ it "should only show Fred2 for the superadmins" do
45
+ User.superadmins.include?(@user2).should be_true
46
+ User.superadmins.include?(@user).should be_false
47
+ end
48
+
49
+ it "should require a username or email" do
50
+ @user4.should_not be_valid
51
+ end
52
+
53
+ it "should be valid with a username" do
54
+ @user3.should be_valid
55
+ end
56
+
57
+ it "should be valid with an email" do
58
+ @user.should be_valid
59
+ end
60
+
61
+ it "should be valid with a username and email" do
62
+ @user2.should be_valid
63
+ end
64
+
65
+ end
Binary file
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'devise_generator'
16
+
17
+ class Test::Unit::TestCase
18
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestDeviseGenerator < 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
metadata ADDED
@@ -0,0 +1,169 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: devisable
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - Scott Sampson
9
+ - Jeremiah Hemphill
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2011-03-23 00:00:00 -04:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: shoulda
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :development
26
+ prerelease: false
27
+ version_requirements: *id001
28
+ - !ruby/object:Gem::Dependency
29
+ name: bundler
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: 1.0.0
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: *id002
39
+ - !ruby/object:Gem::Dependency
40
+ name: jeweler
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 1.5.2
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: *id003
50
+ - !ruby/object:Gem::Dependency
51
+ name: rcov
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ type: :development
59
+ prerelease: false
60
+ version_requirements: *id004
61
+ description: Generates initial code for a devise install. Gives the options for oauth, using cancan, and creating a user tool to manage the users.
62
+ email: scott@cloudspace.com
63
+ executables: []
64
+
65
+ extensions: []
66
+
67
+ extra_rdoc_files:
68
+ - LICENSE.txt
69
+ - README.rdoc
70
+ files:
71
+ - Devisable.gemspec
72
+ - Gemfile
73
+ - LICENSE.txt
74
+ - README.rdoc
75
+ - Rakefile
76
+ - VERSION
77
+ - lib/generators/devisable/USAGE
78
+ - lib/generators/devisable/devisable_generator.rb
79
+ - lib/generators/devisable/templates/app/controllers/registrations_controller.erb
80
+ - lib/generators/devisable/templates/app/controllers/users_controller.erb
81
+ - lib/generators/devisable/templates/app/controllers/welcome_controller.erb
82
+ - lib/generators/devisable/templates/app/helpers/roles_helper.erb
83
+ - lib/generators/devisable/templates/app/models/permission.erb
84
+ - lib/generators/devisable/templates/app/models/role.erb
85
+ - lib/generators/devisable/templates/app/views/roles/_form.erb
86
+ - lib/generators/devisable/templates/app/views/roles/edit.erb
87
+ - lib/generators/devisable/templates/app/views/roles/index.erb
88
+ - lib/generators/devisable/templates/app/views/roles/new.erb
89
+ - lib/generators/devisable/templates/app/views/roles/show.erb
90
+ - lib/generators/devisable/templates/app/views/shared/_admin_nav.erb
91
+ - lib/generators/devisable/templates/app/views/users/_form.erb
92
+ - lib/generators/devisable/templates/app/views/users/edit.erb
93
+ - lib/generators/devisable/templates/app/views/users/index.erb
94
+ - lib/generators/devisable/templates/app/views/users/new.erb
95
+ - lib/generators/devisable/templates/app/views/users/show.erb
96
+ - lib/generators/devisable/templates/app/views/welcome/welcome_index.erb
97
+ - lib/generators/devisable/templates/config/initializers/devise_initializer.erb
98
+ - lib/generators/devisable/templates/cucumber/_rake_partial.rb
99
+ - lib/generators/devisable/templates/cucumber/devise.feature
100
+ - lib/generators/devisable/templates/cucumber/role.feature
101
+ - lib/generators/devisable/templates/cucumber/step_definitions/authentication_steps.rb
102
+ - lib/generators/devisable/templates/cucumber/step_definitions/generic_steps.rb
103
+ - lib/generators/devisable/templates/cucumber/step_definitions/role_steps.rb
104
+ - lib/generators/devisable/templates/cucumber/step_definitions/user_steps.rb
105
+ - lib/generators/devisable/templates/cucumber/support/_env_partial.rb
106
+ - lib/generators/devisable/templates/cucumber/support/_paths_partial.rb
107
+ - lib/generators/devisable/templates/cucumber/user.feature
108
+ - lib/generators/devisable/templates/partials/_ability_class.rb
109
+ - lib/generators/devisable/templates/partials/_access_denied_flash.rb
110
+ - lib/generators/devisable/templates/partials/_accessible_permissions_controller.rb
111
+ - lib/generators/devisable/templates/partials/_accessible_permissions_model.rb
112
+ - lib/generators/devisable/templates/partials/_application_controller_methods.erb
113
+ - lib/generators/devisable/templates/partials/_application_controller_methods2.erb
114
+ - lib/generators/devisable/templates/partials/_application_current_tab.rb
115
+ - lib/generators/devisable/templates/partials/_application_flash.html.erb
116
+ - lib/generators/devisable/templates/partials/_environments_development.erb
117
+ - lib/generators/devisable/templates/partials/_login_links.erb
118
+ - lib/generators/devisable/templates/partials/_migration_down.rb
119
+ - lib/generators/devisable/templates/partials/_migration_up.rb
120
+ - lib/generators/devisable/templates/partials/_oauth_user_table_fields.erb
121
+ - lib/generators/devisable/templates/partials/_permission_equals.rb
122
+ - lib/generators/devisable/templates/partials/_permission_manage.js
123
+ - lib/generators/devisable/templates/partials/_role_permission.rb
124
+ - lib/generators/devisable/templates/partials/_roles_index_delete.erb
125
+ - lib/generators/devisable/templates/partials/_user_model_methods.erb
126
+ - lib/generators/devisable/templates/partials/_user_role.rb
127
+ - lib/generators/devisable/templates/spec/helpers/roles_helper_spec.erb
128
+ - lib/generators/devisable/templates/spec/models/ability_spec.erb
129
+ - lib/generators/devisable/templates/spec/models/permission_spec.erb
130
+ - lib/generators/devisable/templates/spec/models/role_spec.erb
131
+ - lib/generators/devisable/templates/spec/models/user_spec.erb
132
+ - pkg/devisable-0.1.0.gem
133
+ - pkg/devise_generator-0.1.0.gem
134
+ - test/helper.rb
135
+ - test/test_devise_generator.rb
136
+ has_rdoc: true
137
+ homepage: http://github.com/scottsampson/devisable
138
+ licenses:
139
+ - MIT
140
+ post_install_message:
141
+ rdoc_options: []
142
+
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ hash: -2899734110513776136
151
+ segments:
152
+ - 0
153
+ version: "0"
154
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
+ none: false
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: "0"
160
+ requirements: []
161
+
162
+ rubyforge_project:
163
+ rubygems_version: 1.6.2
164
+ signing_key:
165
+ specification_version: 3
166
+ summary: Generates a complete devise install including cancan, and oauth
167
+ test_files:
168
+ - test/helper.rb
169
+ - test/test_devise_generator.rb