devise_invitable 0.3.5 → 0.3.6

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 (49) hide show
  1. data/app/controllers/devise/invitations_controller.rb~ +48 -0
  2. data/config/locales/en.yml +1 -1
  3. data/lib/devise_invitable/model.rb +5 -0
  4. data/lib/devise_invitable/model.rb~ +129 -0
  5. data/lib/devise_invitable/version.rb +3 -0
  6. metadata +42 -104
  7. data/.document +0 -5
  8. data/.gitignore +0 -22
  9. data/Gemfile +0 -3
  10. data/Gemfile.lock +0 -117
  11. data/Rakefile +0 -55
  12. data/VERSION +0 -1
  13. data/devise_invitable.gemspec +0 -146
  14. data/test/generators_test.rb +0 -45
  15. data/test/integration/invitable_test.rb +0 -109
  16. data/test/integration_tests_helper.rb +0 -58
  17. data/test/mailers/invitation_test.rb +0 -62
  18. data/test/model_tests_helper.rb +0 -41
  19. data/test/models/invitable_test.rb +0 -188
  20. data/test/models_test.rb +0 -31
  21. data/test/rails_app/app/controllers/admins_controller.rb +0 -6
  22. data/test/rails_app/app/controllers/application_controller.rb +0 -3
  23. data/test/rails_app/app/controllers/home_controller.rb +0 -4
  24. data/test/rails_app/app/controllers/users_controller.rb +0 -12
  25. data/test/rails_app/app/helpers/application_helper.rb +0 -2
  26. data/test/rails_app/app/models/octopussy.rb +0 -11
  27. data/test/rails_app/app/models/user.rb +0 -4
  28. data/test/rails_app/app/views/home/index.html.erb +0 -0
  29. data/test/rails_app/app/views/layouts/application.html.erb +0 -15
  30. data/test/rails_app/app/views/users/invitations/new.html.erb +0 -15
  31. data/test/rails_app/config.ru +0 -4
  32. data/test/rails_app/config/application.rb +0 -46
  33. data/test/rails_app/config/boot.rb +0 -13
  34. data/test/rails_app/config/database.yml +0 -22
  35. data/test/rails_app/config/environment.rb +0 -5
  36. data/test/rails_app/config/environments/development.rb +0 -26
  37. data/test/rails_app/config/environments/production.rb +0 -49
  38. data/test/rails_app/config/environments/test.rb +0 -35
  39. data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
  40. data/test/rails_app/config/initializers/devise.rb +0 -144
  41. data/test/rails_app/config/initializers/inflections.rb +0 -10
  42. data/test/rails_app/config/initializers/mime_types.rb +0 -5
  43. data/test/rails_app/config/initializers/secret_token.rb +0 -7
  44. data/test/rails_app/config/initializers/session_store.rb +0 -8
  45. data/test/rails_app/config/locales/en.yml +0 -5
  46. data/test/rails_app/config/routes.rb +0 -4
  47. data/test/rails_app/script/rails +0 -6
  48. data/test/routes_test.rb +0 -20
  49. data/test/test_helper.rb +0 -30
@@ -1,41 +0,0 @@
1
- class ActiveSupport::TestCase
2
- def setup_mailer
3
- ActionMailer::Base.deliveries = []
4
- end
5
-
6
- def store_translations(locale, translations, &block)
7
- begin
8
- I18n.backend.store_translations locale, translations
9
- yield
10
- ensure
11
- I18n.reload!
12
- end
13
- end
14
-
15
- # Helpers for creating new users
16
- #
17
- def generate_unique_email
18
- @@email_count ||= 0
19
- @@email_count += 1
20
- "test#{@@email_count}@email.com"
21
- end
22
-
23
- def valid_attributes(attributes={})
24
- { :email => generate_unique_email,
25
- :password => '123456',
26
- :password_confirmation => '123456' }.update(attributes)
27
- end
28
-
29
- def new_user(attributes={})
30
- User.new(valid_attributes(attributes))
31
- end
32
-
33
- def create_user_with_invitation(invitation_token, attributes={})
34
- user = new_user({:password => nil, :password_confirmation => nil}.update(attributes))
35
- user.skip_confirmation!
36
- user.invitation_token = invitation_token
37
- user.invitation_sent_at = Time.now.utc
38
- user.save(:validate => false)
39
- user
40
- end
41
- end
@@ -1,188 +0,0 @@
1
- require 'test/test_helper'
2
- require 'test/model_tests_helper'
3
-
4
- class InvitableTest < ActiveSupport::TestCase
5
-
6
- def setup
7
- setup_mailer
8
- end
9
-
10
- test 'should not generate invitation token after creating a record' do
11
- assert_nil new_user.invitation_token
12
- end
13
-
14
- test 'should regenerate invitation token each time' do
15
- user = new_user
16
- 3.times do
17
- token = user.invitation_token
18
- user.invite!
19
- assert_not_equal token, user.invitation_token
20
- end
21
- end
22
-
23
- test 'should test invitation sent at with invite_for configuration value' do
24
- user = create_user_with_invitation('token')
25
-
26
- User.stubs(:invite_for).returns(nil)
27
- user.invitation_sent_at = Time.now.utc
28
- assert user.valid_invitation?
29
-
30
- User.stubs(:invite_for).returns(nil)
31
- user.invitation_sent_at = 1.year.ago
32
- assert user.valid_invitation?
33
-
34
- User.stubs(:invite_for).returns(0)
35
- user.invitation_sent_at = Time.now.utc
36
- assert user.valid_invitation?
37
-
38
- User.stubs(:invite_for).returns(0)
39
- user.invitation_sent_at = 1.day.ago
40
- assert user.valid_invitation?
41
-
42
- User.stubs(:invite_for).returns(1.day)
43
- user.invitation_sent_at = Time.now.utc
44
- assert user.valid_invitation?
45
-
46
- User.stubs(:invite_for).returns(1.day)
47
- user.invitation_sent_at = 1.day.ago
48
- assert !user.valid_invitation?
49
- end
50
-
51
- test 'should never generate the same invitation token for different users' do
52
- invitation_tokens = []
53
- 3.times do
54
- user = new_user
55
- user.invite!
56
- token = user.invitation_token
57
- assert !invitation_tokens.include?(token)
58
- invitation_tokens << token
59
- end
60
- end
61
-
62
- test 'should set password and password confirmation from params' do
63
- create_user_with_invitation('valid_token', :password => nil, :password_confirmation => nil)
64
- user = User.accept_invitation!(:invitation_token => 'valid_token', :password => '123456789', :password_confirmation => '123456789')
65
- assert user.valid_password?('123456789')
66
- end
67
-
68
- test 'should set password and save the record' do
69
- user = create_user_with_invitation('valid_token', :password => nil, :password_confirmation => nil)
70
- old_encrypted_password = user.encrypted_password
71
- user = User.accept_invitation!(:invitation_token => 'valid_token', :password => '123456789', :password_confirmation => '123456789')
72
- assert_not_equal old_encrypted_password, user.encrypted_password
73
- end
74
-
75
- test 'should clear invitation token while setting the password' do
76
- user = new_user
77
- user.skip_confirmation!
78
- user.update_attribute(:invitation_token, 'valid_token')
79
- assert_present user.invitation_token
80
- assert user.accept_invitation!
81
- assert_nil user.invitation_token
82
- end
83
-
84
- test 'should not clear invitation token if record is invalid' do
85
- user = new_user
86
- user.skip_confirmation!
87
- user.update_attribute(:invitation_token, 'valid_token')
88
- assert_present user.invitation_token
89
- User.any_instance.stubs(:valid?).returns(false)
90
- User.accept_invitation!(:invitation_token => 'valid_token', :password => '123456789', :password_confirmation => '987654321')
91
- user.reload
92
- assert_present user.invitation_token
93
- end
94
-
95
- test 'should reset invitation token and send invitation by email' do
96
- user = new_user
97
- assert_difference('ActionMailer::Base.deliveries.size') do
98
- token = user.invitation_token
99
- user.invite!
100
- assert_not_equal token, user.invitation_token
101
- end
102
- end
103
-
104
- test 'should return a record with invitation token and no errors to send invitation by email' do
105
- invited_user = User.invite!(:email => "valid@email.com")
106
- assert invited_user.errors.blank?
107
- assert_present invited_user.invitation_token
108
- assert_equal 'valid@email.com', invited_user.email
109
- assert invited_user.persisted?
110
- end
111
-
112
- test 'should set all attributes with no errors' do
113
- invited_user = User.invite!(:email => "valid@email.com", :username => 'first name')
114
- assert invited_user.errors.blank?
115
- assert_equal 'first name', invited_user.username
116
- assert invited_user.persisted?
117
- end
118
-
119
- test 'should return a record with errors if user was found by e-mail' do
120
- user = create_user_with_invitation('')
121
- user.update_attribute(:invitation_token, nil)
122
- invited_user = User.invite!(:email => user.email)
123
- assert_equal invited_user, user
124
- assert_equal ['has already been taken'], invited_user.errors[:email]
125
- end
126
-
127
- test 'should return a new record with errors if e-mail is blank' do
128
- invited_user = User.invite!(:email => '')
129
- assert invited_user.new_record?
130
- assert_equal ["can't be blank"], invited_user.errors[:email]
131
- end
132
-
133
- test 'should return a new record with errors if e-mail is invalid' do
134
- invited_user = User.invite!(:email => 'invalid_email')
135
- assert invited_user.new_record?
136
- assert_equal ["is invalid"], invited_user.errors[:email]
137
- end
138
-
139
- test 'should set all attributes with errors if e-mail is invalid' do
140
- invited_user = User.invite!(:email => "invalid_email.com", :username => 'first name')
141
- assert invited_user.new_record?
142
- assert_equal 'first name', invited_user.username
143
- assert invited_user.errors.present?
144
- end
145
-
146
- test 'should find a user to set his password based on invitation_token' do
147
- user = new_user
148
- user.invite!
149
-
150
- invited_user = User.accept_invitation!(:invitation_token => user.invitation_token)
151
- assert_equal invited_user, user
152
- end
153
-
154
- test 'should return a new record with errors if no invitation_token is found' do
155
- invited_user = User.accept_invitation!(:invitation_token => 'invalid_token')
156
- assert invited_user.new_record?
157
- assert_equal ['is invalid'], invited_user.errors[:invitation_token]
158
- end
159
-
160
- test 'should return a new record with errors if invitation_token is blank' do
161
- invited_user = User.accept_invitation!(:invitation_token => '')
162
- assert invited_user.new_record?
163
- assert_equal ["can't be blank"], invited_user.errors[:invitation_token]
164
- end
165
-
166
- test 'should return record with errors if invitation_token has expired' do
167
- user = create_user_with_invitation('valid_token')
168
- user.update_attribute(:invitation_sent_at, 1.day.ago)
169
- User.stubs(:invite_for).returns(10.hours)
170
- invited_user = User.accept_invitation!(:invitation_token => 'valid_token')
171
- assert_equal user, invited_user
172
- assert_equal ["is invalid"], invited_user.errors[:invitation_token]
173
- end
174
-
175
- test 'should set successfully user password given the new password and confirmation' do
176
- user = new_user(:password => nil, :password_confirmation => nil)
177
- user.invite!
178
-
179
- invited_user = User.accept_invitation!(
180
- :invitation_token => user.invitation_token,
181
- :password => 'new_password',
182
- :password_confirmation => 'new_password'
183
- )
184
- user.reload
185
-
186
- assert user.valid_password?('new_password')
187
- end
188
- end
@@ -1,31 +0,0 @@
1
- require 'test/test_helper'
2
-
3
- class Invitable < User
4
- devise :database_authenticatable, :invitable, :invite_for => 5.days
5
- end
6
-
7
- class ActiveRecordTest < ActiveSupport::TestCase
8
- def include_module?(klass, mod)
9
- klass.devise_modules.include?(mod) &&
10
- klass.included_modules.include?(Devise::Models::const_get(mod.to_s.classify))
11
- end
12
-
13
- def assert_include_modules(klass, *modules)
14
- modules.each do |mod|
15
- assert include_module?(klass, mod), "#{klass} not include #{mod}"
16
- end
17
- end
18
-
19
- test 'add invitable module only' do
20
- assert_include_modules Invitable, :invitable
21
- end
22
-
23
- test 'set a default value for invite_for' do
24
- assert_equal 5.days, Invitable.invite_for
25
- end
26
-
27
- test 'invitable attributes' do
28
- assert_not_nil Invitable.columns_hash['invitation_token']
29
- assert_not_nil Invitable.columns_hash['invitation_sent_at']
30
- end
31
- end
@@ -1,6 +0,0 @@
1
- class AdminsController < ApplicationController
2
- before_filter :authenticate_admin!
3
-
4
- def index
5
- end
6
- end
@@ -1,3 +0,0 @@
1
- class ApplicationController < ActionController::Base
2
- protect_from_forgery
3
- end
@@ -1,4 +0,0 @@
1
- class HomeController < ApplicationController
2
- def index
3
- end
4
- end
@@ -1,12 +0,0 @@
1
- class UsersController < ApplicationController
2
- before_filter :authenticate_user!
3
-
4
- def index
5
- user_session[:cart] = "Cart"
6
- end
7
-
8
- def expire
9
- user_session['last_request_at'] = 31.minutes.ago.utc
10
- render :text => 'User will be expired on next request'
11
- end
12
- end
@@ -1,2 +0,0 @@
1
- module ApplicationHelper
2
- end
@@ -1,11 +0,0 @@
1
- # This model is here for the generators' specs
2
- if DEVISE_ORM == :active_record
3
- class Octopussy < ActiveRecord::Base
4
- devise :database_authenticatable, :validatable, :confirmable
5
- end
6
- elsif DEVISE_ORM == :mongoid
7
- class Octopussy
8
- include Mongoid::Document
9
- devise :database_authenticatable, :validatable, :confirmable
10
- end
11
- end
@@ -1,4 +0,0 @@
1
- class User < ActiveRecord::Base
2
- devise :database_authenticatable, :confirmable, :invitable, :validatable
3
- attr_accessible :username, :email, :password, :password_confirmation
4
- end
@@ -1,15 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>RailsApp</title>
5
- <%= stylesheet_link_tag :all %>
6
- <%= javascript_include_tag :defaults %>
7
- <%= csrf_meta_tag %>
8
- </head>
9
- <body>
10
-
11
- <%= content_tag :p, flash[:notice], :id => 'notice' unless flash[:notice].blank? %>
12
- <%= yield %>
13
-
14
- </body>
15
- </html>
@@ -1,15 +0,0 @@
1
- <h2>Send an invitation</h2>
2
-
3
- <%= form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => { :method => :post } do |f| %>
4
- <%= devise_error_messages! %>
5
-
6
- <p><%= f.label :username %></p>
7
- <p><%= f.text_field :username %></p>
8
-
9
- <p><%= f.label :email %></p>
10
- <p><%= f.text_field :email %></p>
11
-
12
- <p><%= f.submit "Send an invitation" %></p>
13
- <% end %>
14
-
15
- <%= link_to "Home", after_sign_in_path_for(resource_name) %><br />
@@ -1,4 +0,0 @@
1
- # This file is used by Rack-based servers to start the application.
2
-
3
- require ::File.expand_path('../config/environment', __FILE__)
4
- run TestApp::Application
@@ -1,46 +0,0 @@
1
- require File.expand_path('../boot', __FILE__)
2
- DEVISE_ORM = (ENV["DEVISE_ORM"] || :active_record).to_sym unless defined? DEVISE_ORM
3
-
4
- require 'rails/all'
5
-
6
- # If you have a Gemfile, require the gems listed there, including any gems
7
- # you've limited to :test, :development, or :production.
8
- Bundler.require(:default, Rails.env) if defined?(Bundler)
9
-
10
- require 'devise'
11
- require 'devise_invitable'
12
-
13
- module RailsApp
14
- class Application < Rails::Application
15
- # Settings in config/environments/* take precedence over those specified here.
16
- # Application configuration should go into files in config/initializers
17
- # -- all .rb files in that directory are automatically loaded.
18
-
19
- # Custom directories with classes and modules you want to be autoloadable.
20
- # config.autoload_paths += %W(#{config.root}/extras)
21
-
22
- # Only load the plugins named here, in the order given (default is alphabetical).
23
- # :all can be used as a placeholder for all plugins not explicitly named.
24
- # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
25
-
26
- # Activate observers that should always be running.
27
- # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
28
-
29
- # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
30
- # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
31
- # config.time_zone = 'Central Time (US & Canada)'
32
-
33
- # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
34
- # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
35
- # config.i18n.default_locale = :de
36
-
37
- # JavaScript files you want as :defaults (application.js is always included).
38
- # config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
39
-
40
- # Configure the default encoding used in templates for Ruby 1.9.
41
- config.encoding = "utf-8"
42
-
43
- # Configure sensitive parameters which will be filtered from the log file.
44
- config.filter_parameters += [:password]
45
- end
46
- end
@@ -1,13 +0,0 @@
1
- require 'rubygems'
2
-
3
- # Set up gems listed in the Gemfile.
4
- gemfile = File.expand_path('../../Gemfile', __FILE__)
5
- begin
6
- ENV['BUNDLE_GEMFILE'] = gemfile
7
- require 'bundler'
8
- Bundler.setup
9
- rescue Bundler::GemNotFound => e
10
- STDERR.puts e.message
11
- STDERR.puts "Try running `bundle install`."
12
- exit!
13
- end if File.exist?(gemfile)
@@ -1,22 +0,0 @@
1
- # SQLite version 3.x
2
- # gem install sqlite3-ruby (not necessary on OS X Leopard)
3
- development:
4
- adapter: sqlite3
5
- database: ":memory:"
6
- pool: 5
7
- timeout: 5000
8
-
9
- # Warning: The database defined as "test" will be erased and
10
- # re-generated from your development database when you run "rake".
11
- # Do not set this db to the same as development or production.
12
- test:
13
- adapter: sqlite3
14
- database: ":memory:"
15
- pool: 5
16
- timeout: 5000
17
-
18
- production:
19
- adapter: sqlite3
20
- database: db/production.sqlite3
21
- pool: 5
22
- timeout: 5000
@@ -1,5 +0,0 @@
1
- # Load the rails application
2
- require File.expand_path('../application', __FILE__)
3
-
4
- # Initialize the rails application
5
- RailsApp::Application.initialize!