ateam-merb-auth-old 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. data/LICENSE +44 -0
  2. data/README +212 -0
  3. data/Rakefile +50 -0
  4. data/TODO +14 -0
  5. data/activerecord_generators/ma_migration/ma_migration_generator.rb +41 -0
  6. data/activerecord_generators/ma_migration/templates/schema/migrations/%time_stamp%_add_ma_user.rb +21 -0
  7. data/app/controllers/application.rb +7 -0
  8. data/app/controllers/sessions.rb +3 -0
  9. data/app/controllers/users.rb +3 -0
  10. data/app/helpers/application_helper.rb +64 -0
  11. data/app/mailers/user_mailer.rb +24 -0
  12. data/app/mailers/views/user_mailer/activation.text.erb +1 -0
  13. data/app/mailers/views/user_mailer/forgot_password.text.erb +5 -0
  14. data/app/mailers/views/user_mailer/signup.text.erb +7 -0
  15. data/app/views/layout/merb_auth.html.erb +16 -0
  16. data/app/views/sessions/new.html.erb +13 -0
  17. data/app/views/users/new.html.erb +21 -0
  18. data/datamapper_generators/ma_migration/ma_migration_generator.rb +38 -0
  19. data/datamapper_generators/ma_migration/templates/schema/migrations/add_ma_user.rb +21 -0
  20. data/lib/ateam-merb-auth-old.rb +1 -0
  21. data/lib/merb-auth.rb +184 -0
  22. data/lib/merb-auth/adapters/activerecord/init.rb +26 -0
  23. data/lib/merb-auth/adapters/activerecord/map.rb +44 -0
  24. data/lib/merb-auth/adapters/activerecord/model.rb +81 -0
  25. data/lib/merb-auth/adapters/common.rb +161 -0
  26. data/lib/merb-auth/adapters/datamapper/init.rb +28 -0
  27. data/lib/merb-auth/adapters/datamapper/map.rb +35 -0
  28. data/lib/merb-auth/adapters/datamapper/model.rb +72 -0
  29. data/lib/merb-auth/adapters/map.rb +0 -0
  30. data/lib/merb-auth/adapters/sequel/init.rb +26 -0
  31. data/lib/merb-auth/adapters/sequel/map.rb +36 -0
  32. data/lib/merb-auth/adapters/sequel/model.rb +86 -0
  33. data/lib/merb-auth/controller/controller.rb +113 -0
  34. data/lib/merb-auth/controller/sessions_base.rb +41 -0
  35. data/lib/merb-auth/controller/users_base.rb +58 -0
  36. data/lib/merb-auth/initializer.rb +47 -0
  37. data/lib/merb-auth/merbtasks.rb +168 -0
  38. data/lib/merb-auth/slicetasks.rb +102 -0
  39. data/plugins/forgotten_password/app/controllers/passwords.rb +90 -0
  40. data/plugins/forgotten_password/app/models/user.rb +52 -0
  41. data/plugins/forgotten_password/app/views/passwords/edit.html.erb +9 -0
  42. data/plugins/forgotten_password/app/views/passwords/new.html.erb +4 -0
  43. data/plugins/forgotten_password/forgotten_password.rb +6 -0
  44. data/plugins/forgotten_password/init.rb +8 -0
  45. data/plugins/forgotten_password/spec/controller_spec.rb +236 -0
  46. data/plugins/forgotten_password/spec/model_spec.rb +52 -0
  47. data/plugins/forgotten_password/spec/spec_helper.rb +36 -0
  48. data/public/javascripts/master.js +0 -0
  49. data/public/stylesheets/master.css +2 -0
  50. data/spec/controllers/plugins/test_plugin.rb +17 -0
  51. data/spec/controllers/sessions_spec.rb +118 -0
  52. data/spec/controllers/users_spec.rb +119 -0
  53. data/spec/mailers/user_mailer_spec.rb +75 -0
  54. data/spec/merb_auth_spec.rb +231 -0
  55. data/spec/models/ar_model_spec.rb +50 -0
  56. data/spec/models/common_spec.rb +0 -0
  57. data/spec/models/model_spec.rb +23 -0
  58. data/spec/models/sq_model_spec.rb +50 -0
  59. data/spec/shared_specs/shared_model_spec.rb +445 -0
  60. data/spec/spec_helper.rb +114 -0
  61. data/spec/spec_helpers/helpers.rb +18 -0
  62. data/spec/spec_helpers/valid_model_hashes.rb +10 -0
  63. data/stubs/app/controllers/application.rb +2 -0
  64. data/stubs/app/controllers/main.rb +2 -0
  65. data/stubs/app/mailers/views/activation.text.erb +1 -0
  66. data/stubs/app/mailers/views/signup.text.erb +7 -0
  67. data/stubs/app/views/sessions/new.html.erb +14 -0
  68. data/stubs/app/views/users/new.html.erb +18 -0
  69. metadata +120 -0
@@ -0,0 +1,36 @@
1
+ dir = File.dirname(__FILE__)
2
+
3
+ require 'rubygems'
4
+ require 'spec'
5
+ require 'merb-core'
6
+ require 'merb-slices'
7
+
8
+ Merb::BootLoader.before_app_loads do
9
+ Merb::Slices::config[:merb_auth][:forgotten_password] = true
10
+ end
11
+
12
+ require File.join(File.expand_path(dir), "..", "..", "..", "spec", "spec_helper.rb")
13
+
14
+
15
+ module Merb
16
+ def self.orm_generator_scope
17
+ "datamapper"
18
+ end
19
+ end
20
+
21
+
22
+ DataMapper.setup(:default, 'sqlite3::memory:')
23
+ adapter_path = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "lib", "merb-auth", "adapters"))
24
+ MA.register_adapter :datamapper, "#{adapter_path}/datamapper"
25
+ MA.register_adapter :activerecord, "#{adapter_path}/activerecord"
26
+ MA.load_slice
27
+
28
+ class User
29
+ include MA::Adapter::DataMapper
30
+ end
31
+
32
+ User.auto_migrate!
33
+ MA.activate
34
+ Merb::Router.prepare{|r| r.add_slice(:MerbAuth)}
35
+ MA.load_plugins!
36
+
File without changes
@@ -0,0 +1,2 @@
1
+ html, body { margin: 0; padding: 0; }
2
+ #container { width: 800px; margin: 4em auto; padding: 4em 4em 6em 4em; background: #DDDDDD; }
@@ -0,0 +1,17 @@
1
+ module MerbAuth
2
+ module Controller
3
+ module Tester
4
+ def self.included(base)
5
+ base.send(:include, InstanceMethods)
6
+ end
7
+
8
+ module InstanceMethods
9
+ def new
10
+ "NEW TEST"
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+ Users.send(:include, Controller::Tester) # include the plugin into the Users controller to override the behaviour
17
+ end
@@ -0,0 +1,118 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe MA::Sessions, "Index action" do
4
+
5
+ before(:all) do
6
+ Object.class_eval do
7
+ remove_const("User") if defined?(User)
8
+ end
9
+
10
+ MA[:use_activation] = true
11
+
12
+ DataMapper.setup(:default, 'sqlite3::memory:')
13
+ Merb.stub!(:orm_generator_scope).and_return("datamapper")
14
+
15
+ adapter_path = File.join( File.dirname(__FILE__), "..", "..", "lib", "merb-auth", "adapters")
16
+ MA.register_adapter :datamapper, "#{adapter_path}/datamapper"
17
+ MA.register_adapter :activerecord, "#{adapter_path}/activerecord"
18
+ MA.load_slice
19
+
20
+ class User
21
+ include MA::Adapter::DataMapper
22
+ include MerbAuth::Adapter::DataMapper::DefaultModelSetup
23
+ end
24
+
25
+ end
26
+
27
+ before(:each) do
28
+ User.clear_database_table
29
+ u = User.new
30
+ u.valid?
31
+ @quentin = User.create(valid_user_hash.with(:email => "quentin@example.com", :password => "test", :password_confirmation => "test"))
32
+ @controller = MA::Sessions.new(fake_request)
33
+ @quentin.activate
34
+ end
35
+
36
+ it "should have a route to Sessions#new from '/login'" do
37
+ request_to("/merb-auth/login") do |params|
38
+ params[:controller].should == "Sessions"
39
+ params[:action].should == "create"
40
+ end
41
+ end
42
+
43
+ it "should route to Sessions#create from '/login' via post" do
44
+ request_to("/merb-auth/login", :post) do |params|
45
+ params[:controller].should == "Sessions"
46
+ params[:action].should == "create"
47
+ end
48
+ end
49
+
50
+ it "should have a named route :login" do
51
+ @controller.url(:login).should == "/merb-auth/login"
52
+ end
53
+
54
+ it "should have route to Sessions#destroy from '/logout' via delete" do
55
+ request_to("/merb-auth/logout", :delete) do |params|
56
+ params[:controller].should == "Sessions"
57
+ params[:action].should == "destroy"
58
+ end
59
+ end
60
+
61
+ it "should route to Sessions#destroy from '/logout' via get" do
62
+ request_to("/merb-auth/logout") do |params|
63
+ params[:controller].should == "Sessions"
64
+ params[:action].should == "destroy"
65
+ end
66
+ end
67
+
68
+ it 'logins and redirects' do
69
+ controller = post "/merb-auth/login", :email => 'quentin@example.com', :password => 'test'
70
+ controller.session[:user].should_not be_nil
71
+ controller.session[:user].should == @quentin.id
72
+ controller.should redirect_to("/")
73
+ end
74
+
75
+ it 'fails login and does not redirect' do
76
+ controller = post "/merb-auth/login", :email => 'quentin@example.com', :password => 'bad password'
77
+ controller.session[:user].should be_nil
78
+ controller.should be_successful
79
+ end
80
+
81
+ it 'logs out' do
82
+ controller = get("/merb-auth/logout"){|controller| controller.stub!(:current_user).and_return(@quentin) }
83
+ controller.session[:user].should be_nil
84
+ controller.should redirect
85
+ end
86
+
87
+ it 'remembers me' do
88
+ controller = post "/merb-auth/login", :email => 'quentin@example.com', :password => 'test', :remember_me => "1"
89
+ controller.cookies["auth_token"].should_not be_nil
90
+ end
91
+
92
+ it 'does not remember me' do
93
+ controller = post "/merb-auth/login", :email => 'quentin@example.com', :password => 'test', :remember_me => "0"
94
+ controller.cookies["auth_token"].should be_nil
95
+ end
96
+
97
+ it 'deletes token on logout' do
98
+ controller = get("/merb-auth/logout") {|request| request.stub!(:current_user).and_return(@quentin) }
99
+ controller.cookies["auth_token"].should == nil
100
+ end
101
+
102
+
103
+ it 'logs in with cookie' do
104
+ @quentin.remember_me
105
+ controller = get "/merb-auth/login" do |c|
106
+ c.request.env[Merb::Const::HTTP_COOKIE] = "auth_token=#{@quentin.remember_token}"
107
+ end
108
+ controller.should be_logged_in
109
+ end
110
+
111
+ def auth_token(token)
112
+ CGI::Cookie.new('name' => 'auth_token', 'value' => token)
113
+ end
114
+
115
+ def cookie_for(user)
116
+ auth_token user.remember_token
117
+ end
118
+ end
@@ -0,0 +1,119 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe MA::Users do
4
+
5
+ before(:all) do
6
+
7
+
8
+ MA[:use_activation] = true
9
+
10
+ DataMapper.setup(:default, 'sqlite3::memory:')
11
+ Merb.stub!(:orm_generator_scope).and_return("datamapper")
12
+
13
+ adapter_path = File.join( File.dirname(__FILE__), "..", "..", "lib", "merb-auth", "adapters")
14
+ MA.register_adapter :datamapper, "#{adapter_path}/datamapper"
15
+ MA.register_adapter :activerecord, "#{adapter_path}/activerecord"
16
+ MA.load_slice
17
+ MA.activate
18
+
19
+ class User
20
+ include MA::Adapter::DataMapper
21
+ include MerbAuth::Adapter::DataMapper::DefaultModelSetup
22
+ end
23
+ end
24
+
25
+ before(:each) do
26
+ User.clear_database_table
27
+ end
28
+
29
+ it "should have MixinSessionContainer mixed into the User Controller" do
30
+ Merb::Controller.should include(::Merb::SessionMixin)
31
+ end
32
+
33
+ it "should provide a current_ma_user method" do
34
+ MA::Users.new({}).should respond_to(:current_ma_user)
35
+ MA::Users.new({}).should respond_to(:current_user)
36
+ end
37
+
38
+ it "should provide a current_user method" do
39
+ MA::Users.new({}).should respond_to(:current_ma_user=)
40
+ MA::Users.new({}).should respond_to(:current_user=)
41
+ end
42
+
43
+ it 'allows signup' do
44
+ # lambda do
45
+ users = User.count
46
+ controller = create_user
47
+ controller.should redirect
48
+ User.count.should == (users + 1)
49
+ # end.should change(User, :count).by(1)
50
+ end
51
+
52
+ it 'requires password on signup' do
53
+ lambda do
54
+ controller = create_user(:password => nil)
55
+ controller.assigns(:user).errors.on(:password).should_not be_nil
56
+ controller.should respond_successfully
57
+ end.should_not change(User, :count)
58
+ end
59
+
60
+ it 'requires password confirmation on signup' do
61
+ lambda do
62
+ controller = create_user(:password_confirmation => nil)
63
+ controller.assigns(:user).errors.should_not be_empty
64
+ controller.should respond_successfully
65
+ end.should_not change(User, :count)
66
+ end
67
+
68
+ it 'requires email on signup' do
69
+ lambda do
70
+ controller = create_user(:email => nil)
71
+ controller.assigns(:user).errors.on(:email).should_not be_nil
72
+ controller.should respond_successfully
73
+ end.should_not change(User, :count)
74
+ end
75
+
76
+ it "should have a route for user activation" do
77
+ request_to("/merb-auth/users/activate/1234") do |params|
78
+ params[:controller].should == "Users"
79
+ params[:action].should == "activate"
80
+ params[:activation_code].should == "1234"
81
+ end
82
+ end
83
+
84
+ it 'activates user' do
85
+ controller = create_user(:email => "aaron@example.com", :password => "test", :password_confirmation => "test")
86
+ @user = controller.assigns(:user)
87
+ User.authenticate('aaron@example.com', 'test').should be_nil
88
+ controller = get "/merb-auth/users/activate/#{@user.activation_code}"
89
+ controller.should redirect_to("/")
90
+ User.authenticate('aaron@example.com', 'test').should_not be_nil
91
+ end
92
+
93
+ it "should log the user in automatically on creation if :use_activation is false" do
94
+ MA[:use_activation] = false
95
+ dispatch_to(MA::Users, :create, :user => {:email => "aaron@example.com", :password => "test", :password_confirmation => "test"}) do |c|
96
+ u = mock("user")
97
+ User.should_receive(:new).and_return(u)
98
+ u.should_receive(:save).and_return(true)
99
+ c.should_receive(:current_ma_user=).with(u)
100
+ end
101
+ end
102
+
103
+ it "should not log the user in automatically on creation if :use_activation is true" do
104
+ MA[:use_activation] = true
105
+ dispatch_to(MA::Users, :create, :user => {:email => "aaron@example.com", :password => "test", :password_confirmation => "test"}) do |c|
106
+ u = mock("user")
107
+ User.should_receive(:new).and_return(u)
108
+ u.should_receive(:save).and_return(true)
109
+ c.should_not_receive(:current_ma_user=)
110
+ end
111
+ end
112
+
113
+
114
+
115
+
116
+ def create_user(options = {})
117
+ post "/merb-auth/users/", :user => valid_user_hash.merge(options)
118
+ end
119
+ end
@@ -0,0 +1,75 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe MA::UserMailer do
4
+
5
+ before(:all) do
6
+ MA[:use_activation] = true
7
+
8
+ DataMapper.setup(:default, 'sqlite3::memory:')
9
+ Merb.stub!(:orm_generator_scope).and_return("datamapper")
10
+
11
+ adapter_path = File.join( File.dirname(__FILE__), "..", "..", "lib", "merb-auth", "adapters")
12
+ MA.register_adapter :datamapper, "#{adapter_path}/datamapper"
13
+ MA.register_adapter :activerecord, "#{adapter_path}/activerecord"
14
+ MA.loaded
15
+
16
+ class User
17
+ include MA::Adapter::DataMapper
18
+ include MerbAuth::Adapter::DataMapper::DefaultModelSetup
19
+ end
20
+ end
21
+
22
+ def deliver(action, mail_opts= {},opts = {})
23
+ MA::UserMailer.dispatch_and_deliver action, mail_opts, opts
24
+ @delivery = Merb::Mailer.deliveries.last
25
+ end
26
+
27
+ before(:each) do
28
+ @u = MA[:user].new(:email => "homer@simpsons.com", :login => "homer", :activation_code => "12345")
29
+ @mailer_params = { :from => "info@mysite.com",
30
+ :to => @u.email,
31
+ :subject => "Welcome to MySite.com" }
32
+ end
33
+
34
+ after(:each) do
35
+ Merb::Mailer.deliveries.clear
36
+ end
37
+
38
+ it "should send mail to homer@simpsons.com for the signup email" do
39
+ deliver(:signup, @mailer_params, :user => @u)
40
+ @delivery.assigns(:headers).should include("to: homer@simpsons.com")
41
+ end
42
+
43
+ it "should send the mail from 'info@mysite.com' for the signup email" do
44
+ deliver(:signup, @mailer_params, :user => @u)
45
+ @delivery.assigns(:headers).should include("from: info@mysite.com")
46
+ end
47
+
48
+ it "should mention the users login in the text signup mail" do
49
+ deliver(:signup, @mailer_params, :user => @u)
50
+ @delivery.text.should include(@u.email)
51
+ end
52
+
53
+ it "should mention the activation link in the signup emails" do
54
+ deliver(:signup, @mailer_params, :user => @u)
55
+ the_url = MA::UserMailer.new.url(:user_activation, :activation_code => @u.activation_code)
56
+ the_url.should_not be_nil
57
+ @delivery.text.should include( the_url )
58
+ end
59
+
60
+ it "should send mail to homer@simpson.com for the activation email" do
61
+ deliver(:activation, @mailer_params, :user => @u)
62
+ @delivery.assigns(:headers).should include("to: homer@simpsons.com")
63
+ end
64
+
65
+ it "should send the mail from 'info@mysite.com' for the activation email" do
66
+ deliver(:activation, @mailer_params, :user => @u)
67
+ @delivery.assigns(:headers).should include("from: info@mysite.com")
68
+ end
69
+
70
+ it "should mention ther users login in the text activation mail" do
71
+ deliver(:activation, @mailer_params, :user => @u)
72
+ @delivery.text.should include(@u.email)
73
+ end
74
+
75
+ end
@@ -0,0 +1,231 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+ require 'activerecord'
3
+ require 'dm-core'
4
+
5
+ # For note purposes
6
+ # Merb::Slices.register_and_load(../../lib/merb-auth.rb)
7
+
8
+ describe MerbAuth do
9
+
10
+ before(:all) do
11
+ @adapter_path = File.dirname(__FILE__) / ".." / "lib" / "merb-auth" / "adapters"
12
+ @ar_path = @adapter_path / "activerecord"
13
+ @config = Merb::Slices::config[:merb_auth]
14
+ DataMapper.setup(:default, 'sqlite3::memory:')
15
+ end
16
+
17
+ before(:each) do
18
+ register_activerecord!
19
+ register_datamapper!
20
+ register_sequel!
21
+ end
22
+
23
+ after(:each) do
24
+ MA.clear_adapter_list!
25
+ MA[:user] = nil
26
+ ::DataMapper::Resource.descendants.delete(User) if defined?(User)
27
+ Object.class_eval do
28
+ remove_const("User") if defined?(User)
29
+ end
30
+ MA::Adapter.module_eval do
31
+ remove_const("DataMapper") if defined?(MA::Adapter::DataMapper)
32
+ end if defined?(MA::Adapter)
33
+ end
34
+
35
+ def stub_orm_scope(scope = "datamapper")
36
+ Merb.stub!(:orm_generator_scope).and_return(scope)
37
+ end
38
+
39
+ def register_activerecord!
40
+ MA.register_adapter :activerecord, "#{@adapter_path}/activerecord"
41
+ end
42
+
43
+ def register_datamapper!
44
+ MA.register_adapter :datamapper, "#{@adapter_path}/datamapper"
45
+ end
46
+
47
+ def register_sequel!
48
+ MA.register_adapter :sequel, "#{@adapter_path}/sequel"
49
+ end
50
+
51
+ describe "Adapter Loading" do
52
+
53
+ it "should allow adapters to register themselves" do
54
+ MA.adapters[:activerecord][:path].should == @ar_path
55
+ end
56
+
57
+ it "should clear the registered adapters (for specs only)" do
58
+ MA.adapters.should_not be_empty
59
+ MA.clear_adapter_list!
60
+ MA.adapters.should be_empty
61
+ end
62
+
63
+ it "should return a hash of registered adapters" do
64
+ MA.adapters.should be_a_kind_of(Hash)
65
+ MA.adapters.keys.should include(:activerecord)
66
+ MA.adapters.keys.should include(:datamapper)
67
+ MA.adapters.keys.should include(:sequel)
68
+ end
69
+
70
+ it "should load the adapter" do
71
+ defined?(MA::Adapter::DataMapper).should be_nil
72
+ MA.load_adapter!(:datamapper)
73
+ defined?(MA::Adapter::DataMapper).should_not be_nil
74
+ end
75
+
76
+ it "should raise an error if an adapter is loaded that has not been registered" do
77
+ lambda do
78
+ MA.load_adapter!(:no_adapter)
79
+ end.should raise_error(RuntimeError, "MerbAuth: Adapter Not Registered - no_adapter")
80
+ end
81
+
82
+ it "should load the adapter scope as the type if there is no specified adapter type" do
83
+ Merb.should_receive(:orm_generator_scope).and_return("datamapper")
84
+ MA.load_adapter!
85
+ end
86
+
87
+ it "should load the correct adapter in the loaded hook" do
88
+ stub_orm_scope
89
+ defined?(MA::Adapter::DataMapper).should be_nil
90
+ MA.loaded
91
+ defined?(MA::Adapter::DataMapper).should_not be_nil
92
+ end
93
+
94
+ it "should expose the adapter model class via the configuration" do
95
+ stub_orm_scope
96
+ MA.load_adapter!
97
+ class User
98
+ include MA::Adapter::DataMapper
99
+ end
100
+ MA[:user].should == User
101
+ end
102
+
103
+ it "should allow DM to create it's table correctly" do
104
+ stub_orm_scope
105
+ MA[:user] = nil
106
+ MA.load_adapter!
107
+ class User
108
+ include MA::Adapter::DataMapper
109
+ include MA::Adapter::DataMapper::DefaultModelSetup
110
+ end
111
+
112
+ results = DataMapper.auto_migrate!
113
+ results.should include(User)
114
+ end
115
+
116
+ end
117
+
118
+ describe "controller Plugin loading" do
119
+
120
+ def add_test_plugin!
121
+ MA.plugins["Tester"] = File.join(File.dirname(__FILE__), "controllers", "plugins", "test_plugin.rb")
122
+ end
123
+
124
+ before(:each) do
125
+ reload_ma!
126
+ end
127
+
128
+ after(:all) do
129
+ reload_ma!
130
+ end
131
+
132
+ it "should allow for registration" do
133
+ defined?(MA::Controller::Tester).should be_nil
134
+ reload_ma!("User"){ add_test_plugin! }
135
+ defined?(MA::Controller::Tester).should_not be_nil
136
+ MA::Users.should include(MA::Controller::Tester)
137
+ end
138
+
139
+ it "should overwrite the new method" do
140
+ Object.class_eval <<-EOS
141
+ class User
142
+ include MerbAuth::Adapter::DataMapper
143
+ include MerbAuth::Adapter::DataMapper::DefaultModelSetup
144
+ end
145
+ EOS
146
+ controller = dispatch_to(MA::Users, :new)
147
+ controller.body.should_not == "NEW TEST"
148
+ reload_ma!("User"){ add_test_plugin!}
149
+ controller = dispatch_to(MA::Users, :new)
150
+ controller.body.should == "NEW TEST"
151
+ end
152
+ end
153
+
154
+ end
155
+
156
+ describe "MerbAuth (module)" do
157
+
158
+ # Feel free to remove the specs below
159
+
160
+ it "should be registered in Merb::Slices.slices" do
161
+ Merb::Slices.slices.should include(MerbAuth)
162
+ end
163
+
164
+ it "should have an :identifier property" do
165
+ MerbAuth.identifier.should == "merb-auth"
166
+ end
167
+
168
+ it "should have an :identifier_sym property" do
169
+ MerbAuth.identifier_sym.should == :merb_auth
170
+ end
171
+
172
+ it "should have a :root property" do
173
+ MerbAuth.root.should == current_slice_root
174
+ MerbAuth.root_path('app').should == current_slice_root / 'app'
175
+ end
176
+
177
+ it "should have metadata properties" do
178
+ MerbAuth.description.should == "MerbAuth is a Merb slice that provides authentication"
179
+ MerbAuth.version.should == "0.1.0"
180
+ MerbAuth.author.should == "Merb Core"
181
+ end
182
+
183
+ it "should have a config property (Hash)" do
184
+ MerbAuth.config.should be_kind_of(Hash)
185
+ end
186
+
187
+ it "should have a :layout config option set" do
188
+ MerbAuth.config[:layout].should == :merb_auth
189
+ end
190
+
191
+ it "should have a dir_for method" do
192
+ app_path = MerbAuth.dir_for(:application)
193
+ app_path.should == current_slice_root / 'app'
194
+ [:view, :model, :controller, :helper, :mailer, :part].each do |type|
195
+ MerbAuth.dir_for(type).should == app_path / "#{type}s"
196
+ end
197
+ public_path = MerbAuth.dir_for(:public)
198
+ public_path.should == current_slice_root / 'public'
199
+ [:stylesheet, :javascript, :image].each do |type|
200
+ MerbAuth.dir_for(type).should == public_path / "#{type}s"
201
+ end
202
+ end
203
+
204
+ it "should have a app_dir_for method" do
205
+ root_path = MerbAuth.app_dir_for(:root)
206
+ root_path.should == Merb.root / 'slices' / 'merb-auth'
207
+ app_path = MerbAuth.app_dir_for(:application)
208
+ app_path.should == root_path / 'app'
209
+ [:view, :model, :controller, :helper, :mailer, :part].each do |type|
210
+ MerbAuth.app_dir_for(type).should == app_path / "#{type}s"
211
+ end
212
+ public_path = MerbAuth.app_dir_for(:public)
213
+ public_path.should == Merb.dir_for(:public) / 'slices' / 'merb-auth'
214
+ [:stylesheet, :javascript, :image].each do |type|
215
+ MerbAuth.app_dir_for(type).should == public_path / "#{type}s"
216
+ end
217
+ end
218
+
219
+ it "should have a public_dir_for method" do
220
+ public_path = MerbAuth.public_dir_for(:public)
221
+ public_path.should == '/slices' / 'merb-auth'
222
+ [:stylesheet, :javascript, :image].each do |type|
223
+ MerbAuth.public_dir_for(type).should == public_path / "#{type}s"
224
+ end
225
+ end
226
+
227
+ it "should keep a list of path component types to use when copying files" do
228
+ (MerbAuth.mirrored_components & MerbAuth.slice_paths.keys).length.should == MerbAuth.mirrored_components.length
229
+ end
230
+
231
+ end