merbful_authentication 0.9.0 → 0.9.1
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.
- data/README +15 -10
- data/Rakefile +1 -1
- data/merb_generators/authenticated/authenticated_generator.rb +23 -0
- data/merb_generators/authenticated/templates/app/mailers/%singular_name%_mailer.rb +0 -1
- data/merb_generators/authenticated/templates/lib/authenticated_system/authenticated_dependencies.rb +4 -1
- data/merb_generators/authenticated/templates/lib/authenticated_system/authenticated_routes.rb +10 -6
- data/rspec_generators/merbful_authentication_tests/templates/spec/authenticated_system_spec_helper.rb +0 -4
- data/test_unit_generators/merbful_authentication_tests/merbful_authentication_tests_generator.rb +8 -2
- data/test_unit_generators/merbful_authentication_tests/templates/test/authenticated_system_test_helper.rb +1 -5
- data/test_unit_generators/merbful_authentication_tests/templates/test/functional/%controller_file_path%_test.rb +32 -28
- data/test_unit_generators/merbful_authentication_tests/templates/test/functional/%model_controller_file_path%_test.rb +10 -16
- metadata +2 -2
data/README
CHANGED
@@ -3,7 +3,7 @@ merbful_authentication
|
|
3
3
|
|
4
4
|
This is a port of the rails plugin "restful_authentication" by Rick Olson to the Merb Web Framework.
|
5
5
|
|
6
|
-
|
6
|
+
Please report any bugs / patches to
|
7
7
|
has.sox /at/ gmail /dot/ com
|
8
8
|
|
9
9
|
You can find the original at http://svn.techno-weenie.net/projects/plugins/restful_authentication/
|
@@ -30,19 +30,24 @@ Datamapper
|
|
30
30
|
|
31
31
|
=== Required Routes
|
32
32
|
|
33
|
-
|
34
|
-
lib/authenticated_system/authenticated_routes.rb
|
35
|
-
|
36
|
-
In config/router.rb
|
37
|
-
|
38
|
-
r.resources :users
|
39
|
-
r.match("/login").to(:controller => "Sessions", :action => "create").name(:login)
|
40
|
-
r.match("/logout").to(:controller => "Sessions", :action => "destroy").name(:logout)
|
41
|
-
r.match("/users/activate/:activation_code").to(:controller => "Users", :action => "activate").name(:user_activation)
|
33
|
+
There are some routes required to use this plugin. The actual path is unimportant but the _NAME_ of the route is.
|
42
34
|
|
35
|
+
These are located in
|
36
|
+
lib/authenticated_system/authenticated_system_routes.rb
|
37
|
+
|
38
|
+
A method is appended to routes.rb to call Authenticated.add_routes
|
43
39
|
|
44
40
|
Note:
|
45
41
|
When using activation don't forget to setup your mailer.
|
42
|
+
|
43
|
+
=== Dependencies
|
44
|
+
|
45
|
+
There is a list of dependencies for merbful_authentication and these are loaded automatically.
|
46
|
+
|
47
|
+
the dependencies are required in
|
48
|
+
lib/authentication_system/authentication_system_dependencies.rb
|
49
|
+
|
50
|
+
Some requiring code is appended to init.rb if it is not already required.
|
46
51
|
|
47
52
|
|
48
53
|
Copyright of original project
|
data/Rakefile
CHANGED
@@ -131,6 +131,29 @@ class AuthenticatedGenerator < Merb::GeneratorBase
|
|
131
131
|
copy_files
|
132
132
|
|
133
133
|
|
134
|
+
# Add the call to include authenticated_dependencies in init.rb
|
135
|
+
dr = @destination_root
|
136
|
+
init_path = File.join(dr,"config","init.rb")
|
137
|
+
if File.open(init_path){ |f| f.read !~ /authenticated_dependencies/ }
|
138
|
+
File.open(init_path, "a") do |f|
|
139
|
+
o =<<-END
|
140
|
+
|
141
|
+
begin
|
142
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'authenticated_system/authenticated_dependencies')
|
143
|
+
rescue LoadError
|
144
|
+
end
|
145
|
+
END
|
146
|
+
f << o
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
# Add the routes to routes.rb
|
151
|
+
rp = File.join(dr,"config","router.rb")
|
152
|
+
if File.open(rp){|f| f.read !~ /AuthenticatedSystem/ }
|
153
|
+
File.open(rp, 'a') do |f|
|
154
|
+
f << "\n\nAuthenticatedSystem.add_routes rescue nil\n"
|
155
|
+
end
|
156
|
+
end
|
134
157
|
|
135
158
|
end
|
136
159
|
|
data/merb_generators/authenticated/templates/lib/authenticated_system/authenticated_routes.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
# Put the correct routes in place
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
module AuthenticatedSystem
|
3
|
+
def self.add_routes
|
4
|
+
Merb::BootLoader.after_app_loads do
|
5
|
+
Merb::Router.prepend do |r|
|
6
|
+
r.match("/login").to(:controller => "<%= controller_class_name %>", :action => "create").name(:login)
|
7
|
+
r.match("/logout").to(:controller => "<%= controller_class_name %>", :action => "destroy").name(:logout)
|
8
|
+
r.match("/<%= plural_name %>/activate/:activation_code").to(:controller => "<%= model_controller_class_name %>", :action => "activate").name(:<%= singular_name %>_activation)
|
9
|
+
r.resources :users
|
10
|
+
end
|
11
|
+
end
|
8
12
|
end
|
9
13
|
end
|
@@ -2,10 +2,6 @@ Merb::Config.use do |c|
|
|
2
2
|
c[:session_store] = "memory"
|
3
3
|
end
|
4
4
|
|
5
|
-
[Merb::Test::ControllerHelper, Merb::Test::ViewHelper, Merb::Test::RouteHelper].each do |m|
|
6
|
-
Merb::Test::Helpers.send(:include, m)
|
7
|
-
end
|
8
|
-
|
9
5
|
<% if include_activation -%>
|
10
6
|
class Merb::Mailer
|
11
7
|
self.delivery_method = :test_send
|
data/test_unit_generators/merbful_authentication_tests/merbful_authentication_tests_generator.rb
CHANGED
@@ -42,8 +42,14 @@ class MerbfulAuthenticationTestsGenerator < Merb::GeneratorBase
|
|
42
42
|
@m = m
|
43
43
|
|
44
44
|
@choices = []
|
45
|
-
@choices <<
|
46
|
-
|
45
|
+
@choices << "test/mailers"
|
46
|
+
Dir[File.join(@base, "test", "mailers", "**", "*")].each do |f|
|
47
|
+
@choices << relative(f)
|
48
|
+
end
|
49
|
+
|
50
|
+
@choices.each do |f|
|
51
|
+
options[f] = include_activation ? true : false
|
52
|
+
end
|
47
53
|
|
48
54
|
@assigns = {
|
49
55
|
:name => name,
|
@@ -2,10 +2,6 @@ Merb::Config.use do |c|
|
|
2
2
|
c[:session_store] = "memory"
|
3
3
|
end
|
4
4
|
|
5
|
-
[Merb::Test::ControllerHelper, Merb::Test::ViewHelper, Merb::Test::RouteHelper].each do |m|
|
6
|
-
Merb::Test::Helpers.send(:include, m)
|
7
|
-
end
|
8
|
-
|
9
5
|
<% if include_activation -%>
|
10
6
|
class Merb::Mailer
|
11
7
|
self.delivery_method = :test_send
|
@@ -40,7 +36,7 @@ def assert_no_difference(expressions, message = nil, &block)
|
|
40
36
|
end
|
41
37
|
|
42
38
|
|
43
|
-
def assert_response(code = :success)
|
39
|
+
def assert_response(code = :success, controller = (@controller || nil))
|
44
40
|
case code
|
45
41
|
when :success
|
46
42
|
assert_equal 200, controller.status
|
@@ -10,9 +10,8 @@ class <%= controller_class_name %>ControllerTest < Test::Unit::TestCase
|
|
10
10
|
|
11
11
|
def setup
|
12
12
|
<%= class_name %>.clear_database_table
|
13
|
-
@controller = <%= controller_class_name %>.
|
14
|
-
@
|
15
|
-
@response = @controller.response
|
13
|
+
@controller = <%= controller_class_name %>.new(fake_request)
|
14
|
+
@controller.setup_session
|
16
15
|
|
17
16
|
@<%= singular_name %> = <%= class_name %>.new(valid_<%= singular_name %>_hash.with(:login => 'quentin', :password => 'test', :password_confirmation => 'test'))
|
18
17
|
@<%= singular_name %>.save
|
@@ -20,67 +19,72 @@ class <%= controller_class_name %>ControllerTest < Test::Unit::TestCase
|
|
20
19
|
@<%= singular_name %>.activate
|
21
20
|
<% end -%>
|
22
21
|
end
|
22
|
+
|
23
|
+
def test_helper_login_as_method
|
24
|
+
login_as :quentin
|
25
|
+
assert @controller.send(:logged_in?)
|
26
|
+
end
|
23
27
|
|
24
28
|
def test_should_login_and_redirect
|
25
|
-
controller.params.merge!(:login => 'quentin', :password => 'test')
|
26
|
-
controller.
|
27
|
-
assert controller.session[:<%= singular_name %>]
|
29
|
+
@controller.params.merge!(:login => 'quentin', :password => 'test')
|
30
|
+
@controller._dispatch(:create)
|
31
|
+
assert @controller.session[:<%= singular_name %>]
|
28
32
|
assert_response :redirect
|
29
33
|
end
|
30
34
|
|
31
35
|
def test_should_fail_login_and_not_redirect
|
32
|
-
controller.params.merge!(:login => 'quentin', :password => 'bad password')
|
33
|
-
controller.
|
34
|
-
assert_nil controller.session[:<%= file_name %>]
|
36
|
+
@controller.params.merge!(:login => 'quentin', :password => 'bad password')
|
37
|
+
@controller._dispatch(:create)
|
38
|
+
assert_nil @controller.session[:<%= file_name %>]
|
35
39
|
assert_response :success
|
36
40
|
end
|
37
41
|
|
38
42
|
def test_should_logout
|
39
43
|
login_as :quentin
|
40
|
-
controller.
|
41
|
-
assert_nil controller.session[:<%= file_name %>]
|
44
|
+
@controller._dispatch(:destroy)
|
45
|
+
assert_nil @controller.session[:<%= file_name %>]
|
42
46
|
assert_response :redirect
|
43
47
|
end
|
44
48
|
|
45
49
|
def test_should_remember_me
|
46
|
-
controller.params.merge!(:login => 'quentin', :password => 'test', :remember_me => '1')
|
47
|
-
controller.
|
48
|
-
assert_not_nil controller.cookies["auth_token"]
|
50
|
+
@controller.params.merge!(:login => 'quentin', :password => 'test', :remember_me => '1')
|
51
|
+
@controller._dispatch(:create)
|
52
|
+
assert_not_nil @controller.cookies["auth_token"]
|
49
53
|
end
|
50
54
|
|
51
55
|
def test_should_not_remember_me
|
52
|
-
controller.params.merge!(:login => 'quentin', :password => 'test', :remember_me => '0')
|
53
|
-
controller.
|
54
|
-
assert_nil controller.cookies["auth_token"]
|
56
|
+
@controller.params.merge!(:login => 'quentin', :password => 'test', :remember_me => '0')
|
57
|
+
@controller._dispatch(:create)
|
58
|
+
assert_nil @controller.cookies["auth_token"]
|
55
59
|
end
|
56
60
|
|
57
61
|
def test_should_delete_token_on_logout
|
58
62
|
login_as :quentin
|
59
|
-
controller.
|
60
|
-
assert_nil controller.cookies["auth_token"]
|
63
|
+
@controller._dispatch(:destroy)
|
64
|
+
assert_nil @controller.cookies["auth_token"]
|
61
65
|
end
|
62
66
|
|
63
67
|
def test_should_login_with_cookie
|
64
68
|
@user.remember_me
|
65
|
-
controller.cookies["auth_token"] = @<%= singular_name %>.remember_token
|
66
|
-
controller.
|
67
|
-
assert controller.send(:logged_in?)
|
69
|
+
@controller.cookies["auth_token"] = @<%= singular_name %>.remember_token
|
70
|
+
@controller._dispatch(:new)
|
71
|
+
assert @controller.send(:logged_in?)
|
68
72
|
end
|
69
73
|
|
70
74
|
def test_should_fail_expired_cookie_login
|
71
75
|
@<%= singular_name %>.remember_me
|
72
76
|
@<%= singular_name %>.remember_token_expires_at = (Time.now - (5 * 60))
|
73
77
|
@<%= singular_name %>.save
|
74
|
-
controller.cookies["auth_token"] = @<%= singular_name %>.remember_token
|
75
|
-
controller.
|
76
|
-
assert !(controller.send(:logged_in?))
|
78
|
+
@controller.cookies["auth_token"] = @<%= singular_name %>.remember_token
|
79
|
+
@controller._dispatch(:new)
|
80
|
+
assert !(@controller.send(:logged_in?))
|
77
81
|
end
|
78
82
|
|
79
83
|
def test_should_fail_cookie_login
|
80
84
|
@<%= singular_name %>.remember_me
|
81
|
-
controller.cookies["auth_token"] = 'invalid_auth_token'
|
82
|
-
controller.
|
83
|
-
assert
|
85
|
+
@controller.cookies["auth_token"] = 'invalid_auth_token'
|
86
|
+
@controller._dispatch(:new)
|
87
|
+
assert !@controller.send(:logged_in?)
|
84
88
|
end
|
85
89
|
|
86
90
|
protected
|
@@ -10,22 +10,20 @@ class <%= model_controller_class_name %>Test < Test::Unit::TestCase
|
|
10
10
|
|
11
11
|
def setup
|
12
12
|
<%= class_name %>.clear_database_table
|
13
|
-
@controller = <%= model_controller_class_name %>.
|
14
|
-
@request = @controller.request
|
15
|
-
@response = @controller.response
|
13
|
+
@controller = <%= model_controller_class_name %>.new(fake_request)
|
16
14
|
end
|
17
15
|
|
18
16
|
def test_should_allow_signup
|
19
17
|
assert_difference '<%= class_name %>.count', 1 do
|
20
18
|
create_<%= file_name %>
|
21
|
-
assert_equal 302, controller.status
|
19
|
+
assert_equal 302, @controller.status
|
22
20
|
end
|
23
21
|
end
|
24
22
|
|
25
23
|
def test_should_require_login_on_signup
|
26
24
|
assert_no_difference '<%= class_name %>.count' do
|
27
25
|
create_<%= file_name %>(:login => nil)
|
28
|
-
assert controller.assigns(:<%= file_name %>).errors.on(:login)
|
26
|
+
assert @controller.assigns(:<%= file_name %>).errors.on(:login)
|
29
27
|
assert_response :success
|
30
28
|
end
|
31
29
|
end
|
@@ -33,7 +31,7 @@ class <%= model_controller_class_name %>Test < Test::Unit::TestCase
|
|
33
31
|
def test_should_require_password_on_signup
|
34
32
|
assert_no_difference '<%= class_name %>.count' do
|
35
33
|
create_<%= file_name %>(:password => nil)
|
36
|
-
assert controller.assigns(:<%= file_name %>).errors.on(:password)
|
34
|
+
assert @controller.assigns(:<%= file_name %>).errors.on(:password)
|
37
35
|
assert_response :success
|
38
36
|
end
|
39
37
|
end
|
@@ -41,7 +39,7 @@ class <%= model_controller_class_name %>Test < Test::Unit::TestCase
|
|
41
39
|
def test_should_require_password_confirmation_on_signup
|
42
40
|
assert_no_difference '<%= class_name %>.count' do
|
43
41
|
create_<%= file_name %>(:password_confirmation => nil)
|
44
|
-
assert controller.assigns(:<%= file_name %>).errors.on(:password_confirmation)
|
42
|
+
assert @controller.assigns(:<%= file_name %>).errors.on(:password_confirmation)
|
45
43
|
assert_response :success
|
46
44
|
end
|
47
45
|
end
|
@@ -49,7 +47,7 @@ class <%= model_controller_class_name %>Test < Test::Unit::TestCase
|
|
49
47
|
def test_should_require_email_on_signup
|
50
48
|
assert_no_difference '<%= class_name %>.count' do
|
51
49
|
create_<%= file_name %>(:email => nil)
|
52
|
-
assert controller.assigns(:<%= file_name %>).errors.on(:email)
|
50
|
+
assert @controller.assigns(:<%= file_name %>).errors.on(:email)
|
53
51
|
assert_response :success
|
54
52
|
end
|
55
53
|
end
|
@@ -59,8 +57,8 @@ class <%= model_controller_class_name %>Test < Test::Unit::TestCase
|
|
59
57
|
@<%= singular_name %> = <%= class_name %>.find_with_conditions( :login => 'aaron' )
|
60
58
|
assert_not_nil @<%= singular_name %>
|
61
59
|
assert_nil <%= class_name %>.authenticate('aaron', 'test')
|
62
|
-
get url(:<%= singular_name %>_activation, :activation_code => @<%= singular_name %>.activation_code )
|
63
|
-
assert_equal '/', controller.headers['Location']
|
60
|
+
@controller = get @controller.url(:<%= singular_name %>_activation, :activation_code => @<%= singular_name %>.activation_code )
|
61
|
+
assert_equal '/', @controller.headers['Location']
|
64
62
|
assert_response :redirect
|
65
63
|
end
|
66
64
|
|
@@ -69,10 +67,6 @@ class <%= model_controller_class_name %>Test < Test::Unit::TestCase
|
|
69
67
|
@<%= singular_name %> = <%= class_name %>.find_with_conditions( :login => 'aaron' )
|
70
68
|
assert_not_nil @<%= singular_name %>
|
71
69
|
assert_nil <%= class_name %>.authenticate('aaron', 'test')
|
72
|
-
assert_raise ArgumentError do
|
73
|
-
@controller = <%= model_controller_class_name %>.build(fake_request)
|
74
|
-
controller.dispatch(:activate)
|
75
|
-
end
|
76
70
|
assert_nil User.authenticate('aaron', 'test')
|
77
71
|
end
|
78
72
|
|
@@ -81,12 +75,12 @@ class <%= model_controller_class_name %>Test < Test::Unit::TestCase
|
|
81
75
|
@<%= singular_name %> = <%= class_name %>.find_with_conditions( :login => 'aaron' )
|
82
76
|
assert_not_nil @<%= singular_name %>
|
83
77
|
assert_nil <%= class_name %>.authenticate('aaron', 'test')
|
84
|
-
get url(:user_activation, :activation_code => "")
|
78
|
+
@controller = get @controller.url(:user_activation, :activation_code => " ")
|
85
79
|
assert_nil <%= class_name %>.authenticate('aaron', 'test')
|
86
80
|
end<% end %>
|
87
81
|
|
88
82
|
protected
|
89
83
|
def create_<%= singular_name %>(options = {})
|
90
|
-
post "/<%=
|
84
|
+
@controller = post "/<%= model_controller_singular_name %>", :<%= singular_name %> => valid_<%= singular_name %>_hash.merge(options)
|
91
85
|
end
|
92
86
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: merbful_authentication
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Neighman
|
@@ -9,7 +9,7 @@ autorequire: merbful_authentication
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-03-05 00:00:00 +11:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|