ubiquitous_user 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -119,6 +119,24 @@ You can use user= and authorize in the controllers, for example:
119
119
  # ...
120
120
  end
121
121
 
122
+ Another interesting method is the authorize generator, which allows you to
123
+ specify the message you want to give the authorization is not granted. For
124
+ example:
125
+
126
+ class ProfilesController < ApplicationController
127
+ before_filter :only => [:edit, :update], &authorize("You gotta log in to do that!")
128
+ # ...
129
+ end
130
+
131
+ But for that you also need to add an "extend", like this:
132
+
133
+ class ApplicationController < ActionController::Base
134
+ include Usable
135
+ extend UsableClass
136
+
137
+ #...
138
+ end
139
+
122
140
  == The model
123
141
 
124
142
  Ubiquitous User expects you to have a model for your users called User
@@ -147,6 +165,11 @@ example:
147
165
  Up to date api documentation should be automatically generated on
148
166
  http://rdoc.info/projects/pupeno/ubiquitous_user
149
167
 
168
+ == Metrics
169
+
170
+ You con find the metrics for this gem automatically generated at
171
+ http://getcaliper.com/caliper/project?repo=git%3A%2F%2Fgithub.com%2Fpupeno%2Fubiquitous_user.git
172
+
150
173
  == Note on Patches/Pull Requests
151
174
 
152
175
  * Fork the project.
data/Rakefile CHANGED
@@ -54,3 +54,40 @@ Rake::RDocTask.new do |rdoc|
54
54
  rdoc.rdoc_files.include('LICENSE')
55
55
  rdoc.rdoc_files.include('lib/**/*.rb')
56
56
  end
57
+
58
+ begin
59
+ require 'metric_fu'
60
+ MetricFu::Configuration.run do |config|
61
+ #define which metrics you want to use
62
+ # config.metrics = [:churn, :saikuro, :stats, :flog, :flay, :reek, :roodi, :rcov]
63
+ config.metrics = [:rcov]
64
+ # config.graphs = [:flog, :flay, :reek, :roodi, :rcov]
65
+ config.graphs = [:rcov]
66
+
67
+ # config.flay = { :dirs_to_flay => ['app', 'lib'] }
68
+ # config.flog = { :dirs_to_flog => ['app', 'lib'] }
69
+ # config.reek = { :dirs_to_reek => ['app', 'lib'] }
70
+ # config.roodi = { :dirs_to_roodi => ['app', 'lib'] }
71
+ # config.saikuro = { :output_directory => 'scratch_directory/saikuro',
72
+ # :input_directory => ['app', 'lib'],
73
+ # :cyclo => "",
74
+ # :filter_cyclo => "0",
75
+ # :warn_cyclo => "5",
76
+ # :error_cyclo => "7",
77
+ # :formater => "text"} #this needs to be set to "text"
78
+ # config.churn = { :start_date => "1 year ago", :minimum_churn_count => 10}
79
+ config.rcov = { :test_files => ['test/**/test_*.rb'],
80
+ :rcov_opts => ["--text-report"
81
+ #"--sort coverage",
82
+ #"--no-html",
83
+ # "--text-coverage",
84
+ # "--no-color",
85
+ # "--profile",
86
+ # "--rails",
87
+ # "--exclude /gems/,/Library/,spec"
88
+ ]
89
+ }
90
+ end
91
+ rescue LoadError
92
+ puts "Metric fu not available"
93
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.3.0
@@ -1,7 +1,7 @@
1
1
  module UsableConfig
2
2
  @user_model = :User
3
3
  @user_model_new = :new
4
- @user_model_save = :save
4
+ @user_model_save = :save!
5
5
  @user_model_name = :name
6
6
 
7
7
  # Class that defines the user model.
@@ -29,13 +29,13 @@ module UsableHelpers
29
29
  # will be in the database (although it may be a ghost user).
30
30
  def user(options = {:save => false})
31
31
  # Find the user in the database if session[:user_id] is defined and @ubiquitous_user is not.
32
- @ubiquitous_user = UsableConfig::user_model_class.find(session[:user_id]) if session[:user_id] != nil and @ubiquitous_user == nil
32
+ @ubiquitous_user = UsableConfig::user_model_class.find_by_id(session[:user_id]) if session[:user_id] != nil and @ubiquitous_user == nil
33
33
 
34
34
  # Create a new user object if @ubiquitous_user is not defined.
35
- @ubiquitous_user = UsableConfig::user_model_class.send(UsableConfig::user_model_new) if @ubiquitous_user == nil
35
+ @ubiquitous_user = UsableConfig::user_model_class.send(UsableConfig::user_model_new) if @ubiquitous_user == nil
36
36
 
37
37
  # If the object is new and we are asked to save, do it.
38
- if @ubiquitous_user.new_record? and options[:save]
38
+ if options[:save] and @ubiquitous_user.new_record?
39
39
  # Save the user in the database and set the session user_id for latter.
40
40
  @ubiquitous_user.send(UsableConfig::user_model_save)
41
41
  session[:user_id] = @ubiquitous_user.id
@@ -48,25 +48,45 @@ module UsableHelpers
48
48
  def user!
49
49
  return user(:save => true)
50
50
  end
51
+
52
+ # Helper method to check whether a user is logged in or not
53
+ def user_logged_in?
54
+ user_id = session[:user_id]
55
+ user_id != nil and UsableConfig::user_model_class.find_by_id(user_id) != nil and session[:user_name] != nil
56
+ end
51
57
  end
52
58
 
53
59
  ActionController::Base.class_eval do
54
60
  helper UsableHelpers
55
61
  end
56
62
 
63
+ module UsableClass
64
+ def authorize(message = "Please log in.", key = :warning)
65
+ Proc.new do |controller|
66
+ unless controller.user_logged_in?
67
+ # flash, redirect_to and new_session_url are protected. Thank god this is Ruby, not Java.
68
+ controller.send(:flash)[key] = message
69
+ begin
70
+ controller.send(:redirect_to, :back)
71
+ rescue ActionController::RedirectBackError
72
+ controller.send(:redirect_to, controller.send(:new_session_url))
73
+ end
74
+ end
75
+ end
76
+ end
77
+ module_function :authorize
78
+ end
79
+
57
80
  module Usable
58
81
  include UsableHelpers
59
82
 
60
- def user=(u)
61
- session[:user_id] = u != nil ? u.id : nil
62
- session[:user_name] = u != nil ? u.send(UsableConfig::user_model_name) : nil
63
- user
83
+ def user=(new_user)
84
+ session[:user_id] = new_user != nil ? new_user.id : nil
85
+ session[:user_name] = new_user != nil ? new_user.send(UsableConfig::user_model_name) : nil
86
+ @ubiquitous_user = new_user
64
87
  end
65
88
 
66
89
  def authorize
67
- unless UsableConfig::user_model_class.find_by_id(session[:user_id]) and session[:user_name] != nil
68
- flash[:notice] = "Please log in."
69
- redirect_to new_session_url
70
- end
90
+ ::UsableClass.authorize().call(self)
71
91
  end
72
92
  end
data/test/helper.rb CHANGED
@@ -1,10 +1,48 @@
1
1
  require 'rubygems'
2
2
  require 'test/unit'
3
3
  require 'shoulda'
4
+ require 'mocha'
5
+ require 'ruby-debug'
4
6
 
5
7
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
8
  $LOAD_PATH.unshift(File.dirname(__FILE__))
7
- require 'ubiquitous_user'
8
9
 
9
- class Test::Unit::TestCase
10
+ # Minimum set ActionController required to test ubiquitous_user
11
+ module ActionController
12
+ class Base
13
+ @@helpers = []
14
+
15
+ def self.helper(h)
16
+ @@helpers << h
17
+ end
18
+ end
19
+
20
+ class RedirectBackError < Exception
21
+ end
22
+ end
23
+
24
+ # Default user model.
25
+ class User
26
+ end
27
+
28
+ # An alternative user model.
29
+ class Person
10
30
  end
31
+
32
+ require 'ubiquitous_user'
33
+
34
+ class Controller
35
+ include Usable
36
+ extend UsableClass
37
+
38
+ # Simulate session and flash
39
+ def initialize
40
+ @session = {}
41
+ @flash = {}
42
+ end
43
+ attr_accessor :session
44
+ attr_accessor :flash
45
+
46
+ # Allow access to @ubiquitous_user, only for testing purposes.
47
+ attr_accessor :ubiquitous_user
48
+ end
@@ -0,0 +1,213 @@
1
+ require 'helper'
2
+
3
+ class TestUbiquitousUser < Test::Unit::TestCase
4
+ context "A controller and a mock user" do
5
+ setup do
6
+ @controller = Controller.new
7
+ @user = mock("User")
8
+
9
+ # Just to be sure we are starting from scratch
10
+ assert_nil @controller.ubiquitous_user
11
+ end
12
+
13
+ should "create a new user object on Controller#user" do
14
+ User.expects(:new).returns(@user)
15
+
16
+ user = @controller.user
17
+
18
+ assert_equal @user, user
19
+ assert_equal @user, @controller.ubiquitous_user
20
+ end
21
+
22
+ should "should return previous user object on Controller#user" do
23
+ @controller.ubiquitous_user = @user
24
+
25
+ user = @controller.user
26
+
27
+ assert_equal @user, user
28
+ end
29
+
30
+ should "find a user on Controller#user if there's a user_id on session" do
31
+ user_id = 42
32
+ @controller.session[:user_id] = user_id
33
+ User.expects(:find_by_id).with(user_id).returns(@user)
34
+
35
+ user = @controller.user
36
+
37
+ assert_equal @user, user
38
+ assert_equal @user, @controller.ubiquitous_user
39
+ end
40
+
41
+ should "save a new user when requested on Controller#user" do
42
+ user_id = 43
43
+ User.expects(:new).returns(@user)
44
+ @user.expects(:new_record?).returns(true)
45
+ @user.expects(:save!)
46
+ @user.expects(:id).returns(user_id)
47
+
48
+ user = @controller.user!
49
+
50
+ assert_equal @user, user
51
+ assert_equal @user, @controller.ubiquitous_user
52
+ assert_equal user_id, @controller.session[:user_id]
53
+ end
54
+
55
+ should "not save an existing user even when requested on Controller#user" do
56
+ user_id = 44
57
+ @controller.session[:user_id] = user_id
58
+ User.expects(:find_by_id).with(user_id).returns(@user)
59
+ @user.expects(:new_record?).returns(false)
60
+
61
+ user = @controller.user!
62
+
63
+ assert_equal @user, user
64
+ assert_equal @user, @controller.ubiquitous_user
65
+ end
66
+
67
+ should "set user on Controller#user=" do
68
+ user_id = 45
69
+ user_name = "Alex"
70
+ @user.expects(:id).returns(user_id)
71
+ @user.expects(:name).returns(user_name)
72
+
73
+ @controller.user = @user
74
+
75
+ assert_equal @user, @controller.ubiquitous_user
76
+ assert_equal user_id, @controller.session[:user_id]
77
+ assert_equal user_name, @controller.session[:user_name]
78
+ end
79
+
80
+ should "unset user on Controller#user=(nil)" do
81
+ @controller.user = nil
82
+
83
+ assert_equal nil, @controller.ubiquitous_user
84
+ assert_equal nil, @controller.session[:user_id]
85
+ assert_equal nil, @controller.session[:user_name]
86
+ end
87
+
88
+ should "say no user is logged in when none is on Controller#user_logged_in?" do
89
+ user_logged_in = @controller.user_logged_in?
90
+
91
+ assert !user_logged_in
92
+ end
93
+
94
+ should "say no user is logged in when an anonymously registered user is in on Controller#user_logged_in?" do
95
+ user_id = 46
96
+ @controller.session[:user_id] = user_id
97
+ User.expects(:find_by_id).with(user_id).returns(@user)
98
+
99
+ user_logged_in = @controller.user_logged_in?
100
+
101
+ assert !user_logged_in
102
+ end
103
+
104
+ should "say a user is logged in when it is on Controller#user_logged_in?" do
105
+ user_id = 46
106
+ user_name = "Brad"
107
+ @controller.session[:user_id] = user_id
108
+ @controller.session[:user_name] = user_name
109
+ User.expects(:find_by_id).with(user_id).returns(@user)
110
+
111
+ user_logged_in = @controller.user_logged_in?
112
+
113
+ assert user_logged_in
114
+ end
115
+
116
+ should "redirect back with a flash message when user not logged in on Controller.authorize" do
117
+ msg = "Log in you user!"
118
+ key = :error
119
+
120
+ authorize = Controller.send(:authorize, msg, key)
121
+
122
+ assert authorize.instance_of? Proc
123
+
124
+ @controller.expects(:redirect_to).with(:back)
125
+
126
+ authorize.call(@controller)
127
+ assert_equal msg, @controller.flash[key]
128
+ end
129
+
130
+ should "redirect to new_session_url with a flash message when user not logged in and there's no :back on Controller.authorize" do
131
+ msg = "Log in you user!"
132
+ key = :error
133
+
134
+ authorize = Controller.send(:authorize, msg, key)
135
+
136
+ assert authorize.instance_of? Proc
137
+
138
+ new_session_url = "/login"
139
+ @controller.expects(:redirect_to).with(:back).raises(ActionController::RedirectBackError)
140
+ @controller.expects(:new_session_url).returns(new_session_url)
141
+ @controller.expects(:redirect_to).with(new_session_url)
142
+
143
+ authorize.call(@controller)
144
+ assert_equal msg, @controller.flash[key]
145
+ end
146
+
147
+ should "redirect back with a flash message when user not logged in on Controller#authorize" do
148
+ @controller.expects(:redirect_to).with(:back)
149
+
150
+ @controller.authorize
151
+ assert_equal "Please log in.", @controller.flash[:warning]
152
+ end
153
+
154
+ context "with custom usable config" do
155
+ setup do
156
+ @orig_config = UsableConfig.clone
157
+ UsableConfig.user_model = :Person
158
+ UsableConfig.user_model_new = :new_person
159
+ UsableConfig.user_model_save = :save_person!
160
+ UsableConfig.user_model_name = :full_name
161
+ end
162
+
163
+ teardown do
164
+ UsableConfig.user_model = @orig_config.user_model
165
+ UsableConfig.user_model_new = @orig_config.user_model_new
166
+ UsableConfig.user_model_save = @orig_config.user_model_save
167
+ UsableConfig.user_model_name = @orig_config.user_model_name
168
+ end
169
+
170
+ should "create a new user object on #user" do
171
+ Person.expects(:new_person).returns(@user)
172
+ assert_equal @user, @controller.user
173
+ assert_equal @user, @controller.ubiquitous_user
174
+ end
175
+
176
+ should "save a new user when requested on #user" do
177
+ user_id = 43
178
+ Person.expects(:new_person).returns(@user)
179
+ @user.expects(:new_record?).returns(true)
180
+ @user.expects(:save_person!)
181
+ @user.expects(:id).returns(user_id)
182
+ assert_equal @user, @controller.user!
183
+ assert_equal @user, @controller.ubiquitous_user
184
+ assert_equal user_id, @controller.session[:user_id]
185
+ end
186
+
187
+ should "set user on Controller#user=" do
188
+ user_id = 45
189
+ user_name = "Alex"
190
+ @user.expects(:id).returns(user_id)
191
+ @user.expects(:full_name).returns(user_name)
192
+
193
+ @controller.user = @user
194
+
195
+ assert_equal @user, @controller.ubiquitous_user
196
+ assert_equal user_id, @controller.session[:user_id]
197
+ assert_equal user_name, @controller.session[:user_name]
198
+ end
199
+
200
+ should "say a user is logged in when it is on #user_logged_in?" do
201
+ user_id = 46
202
+ user_name = "Brad"
203
+ @controller.session[:user_id] = user_id
204
+ @controller.session[:user_name] = user_name
205
+ Person.expects(:find_by_id).with(user_id).returns(@user)
206
+
207
+ user_logged_in = @controller.user_logged_in?
208
+
209
+ assert user_logged_in
210
+ end
211
+ end
212
+ end
213
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ubiquitous_user
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - "J. Pablo Fern\xC3\xA1ndez"
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-11 00:00:00 +01:00
12
+ date: 2009-12-26 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -70,4 +70,4 @@ specification_version: 3
70
70
  summary: Helpers to get and retrieve users ubiquitously
71
71
  test_files:
72
72
  - test/helper.rb
73
- - test/test_ubiquitous-user.rb
73
+ - test/test_ubiquitous_user.rb
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestUbiquitousUser < 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