ubiquitous_user 0.1.0

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/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+ *.gemspec
21
+
22
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 J. Pablo Fernández
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,150 @@
1
+ = ubiquitous_user
2
+
3
+ Many web applications required you to log in before being able to interact with
4
+ them; which poses a real barer of entry for new users. You need users to have
5
+ accounts for many tasks, but you don't need those accounts to be any more than
6
+ an id. No username, no password, no profile.
7
+
8
+ This library is an implementation of that. You add the Usable mixin to your
9
+ ApplicationController and after that call user to get a user, or user! to get a
10
+ user that exists on the database (it'll be stored if needed).
11
+
12
+ When a user log ins what you have to do is set the user, which is just doing
13
+ user = userObject.
14
+
15
+ This library also provides an authorize method, to use as a filter for those
16
+ actions that really require a logged in user.
17
+
18
+ An important consideration is that users should be mergeable now. If you have
19
+ a user with an account, and that user comes back a month latter, he may start
20
+ to operate your site with the new ghost account and only log in latter on. At
21
+ that moment the ghost account and the real account will be merged, basically by
22
+ calling real_account.merge(ghost_account_id)
23
+
24
+ == Installation
25
+
26
+ This gem is provided through Gemcutter so you need to have gem configured to
27
+ pull gems from Gemcutter.
28
+
29
+ === Enabling Gemcutter
30
+
31
+ A properly configured environment would be like this:
32
+
33
+ $ gem sources
34
+ *** CURRENT SOURCES ***
35
+
36
+ http://gemcutter.org
37
+ http://gems.rubyforge.org/
38
+ http://gems.github.com
39
+
40
+ If you don't have http://gemcutter.org in your sources then you need to add. I
41
+ know two ways to do. One is installing Gemcutter and running gem tumble:
42
+
43
+ $ sudo gem install gemcutter
44
+ $ gem tumble
45
+
46
+ Be careful that gem tumble will remove Gemcutter from your repositories if it's
47
+ already there.
48
+
49
+ The other way is by hand like this:
50
+
51
+ $ gem source -a http://gemcutter.org
52
+
53
+ I'm not sure if there's any difference. I think there isn't one.
54
+
55
+ === Installing ubiquitous_user manually
56
+
57
+ It's simple a matter of running:
58
+
59
+ $ gem install ubiquitous_user
60
+
61
+ and that's it. Let me know if something breaks.
62
+
63
+ === Installing through your Ruby on Rails project
64
+
65
+ In the +environment.rb+ file of your Ruby on Rails project you'll have some
66
+ commented out lines like this:
67
+
68
+ # config.gem "bj"
69
+ # config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
70
+ # config.gem "sqlite3-ruby", :lib => "sqlite3"
71
+ # config.gem "aws-s3", :lib => "aws/s3"
72
+
73
+ After those you can just add
74
+
75
+ config.gem "ubiquitous_user"
76
+
77
+ and then run
78
+
79
+ $ rake gems:install
80
+
81
+ and you'll get this and all the gems your Rails project need installed.
82
+ Configuring your Rails project like that is something you'll need anyway, so
83
+ this is my recommended way.
84
+
85
+ == How to use it
86
+
87
+ In your application_controller.rb be sure to add the mixin to
88
+ ApplicationController, like this:
89
+
90
+ class ApplicationController < ActionController::Base
91
+ include Usable
92
+
93
+ #...
94
+ end
95
+
96
+ After that you can use user and user! anywhere, for example:
97
+
98
+ @item.recommender = user!
99
+
100
+ <%=h user.name %>
101
+
102
+ You can use user= and authorize in the controllers, for example:
103
+
104
+ class SessionsController < ApplicationController
105
+ def destroy
106
+ self.user = nil
107
+ # ...
108
+ end
109
+
110
+ def create
111
+ # ...
112
+ self.user = user
113
+ end
114
+
115
+ # ...
116
+ end
117
+
118
+ class ProfilesController < ApplicationController
119
+ before_filter :authorize
120
+ # ...
121
+ end
122
+
123
+ == Customize
124
+
125
+ ubiquitous_user expects your user model to be named User. That's not
126
+ configurable yet. What is configurable is the two methods it calls on user. You
127
+ can do this kind of configuration in config/initializers/ubiquitous_user.rb for
128
+ example:
129
+
130
+ Usable::UserModelSave = :save_bypassing_non_essential_validation
131
+ Usable::UserModelName = :name_or_else
132
+
133
+ == API Documentation
134
+
135
+ Up to date api documentation should be automatically generated on
136
+ http://rdoc.info/projects/pupeno/ubiquitous_user
137
+
138
+ == Note on Patches/Pull Requests
139
+
140
+ * Fork the project.
141
+ * Make your feature addition or bug fix.
142
+ * Add tests for it. This is important so I don't break it in a
143
+ future version unintentionally.
144
+ * Commit, do not mess with rakefile, version, or history.
145
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
146
+ * Send me a pull request. Bonus points for topic branches.
147
+
148
+ == Copyright
149
+
150
+ Copyright (c) 2009 J. Pablo Fernández. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,55 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "ubiquitous_user"
8
+ gem.summary = "Helpers to get and retrieve users ubiquitously"
9
+ gem.description = "Create accounts for users right away, even when they are anonymous."
10
+ gem.email = "pupeno@pupeno.com"
11
+ gem.homepage = "http://github.com/pupeno/ubiquitous_user"
12
+ gem.authors = ["J. Pablo Fernández"]
13
+ gem.add_dependency "actionpack", ">= 2.0.0"
14
+ #gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
15
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
+ end
21
+
22
+ require 'rake/testtask'
23
+ Rake::TestTask.new(:test) do |test|
24
+ test.libs << 'lib' << 'test'
25
+ test.pattern = 'test/**/test_*.rb'
26
+ test.verbose = true
27
+ end
28
+
29
+ begin
30
+ require 'rcov/rcovtask'
31
+ Rcov::RcovTask.new do |test|
32
+ test.libs << 'test'
33
+ test.pattern = 'test/**/test_*.rb'
34
+ test.verbose = true
35
+ end
36
+ rescue LoadError
37
+ task :rcov do
38
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
39
+ end
40
+ end
41
+
42
+ task :test => :check_dependencies
43
+
44
+ task :default => :test
45
+
46
+ require 'rake/rdoctask'
47
+ Rake::RDocTask.new do |rdoc|
48
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
49
+
50
+ rdoc.rdoc_dir = 'rdoc'
51
+ rdoc.title = "Ubiquitous User #{version}"
52
+ rdoc.rdoc_files.include('README*')
53
+ rdoc.rdoc_files.include('LICENSE')
54
+ rdoc.rdoc_files.include('lib/**/*.rb')
55
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,52 @@
1
+ module UsableHelpers
2
+ # Helper method to get the current user. It will always return a user but the
3
+ # user may not be in the database. If options[:create] is true, then the user
4
+ # will be in the database (although it may be a ghost user).
5
+ def user(options = {:create => false})
6
+ # If we already have a user object, return that.
7
+ return @ubiquitous_user if @ubiquitous_user != nil
8
+
9
+ # Try to find the user in the database if session[:user_id] is defined.
10
+ @ubiquitous_user = User.find(session[:user_id]) if session[:user_id] != nil
11
+ return @ubiquitous_user if @ubiquitous_user != nil
12
+
13
+ # Create a new user object.
14
+ @ubiquitous_user = User.new()
15
+ if options[:create]
16
+ # Save the user in the database and set the session user_id for latter.
17
+ # TODO use UsableConfig::UserModelSave
18
+ @ubiquitous_user.send(Usable::UserModelSave)
19
+ session[:user_id] = @ubiquitous_user.id
20
+ end
21
+ return @ubiquitous_user
22
+ end
23
+
24
+ # Helper method to get a user that for sure exists on the database.
25
+ def user!
26
+ return user(:create => true)
27
+ end
28
+ end
29
+
30
+ ActionController::Base.class_eval do
31
+ helper UsableHelpers
32
+ end
33
+
34
+ module Usable
35
+ include UsableHelpers
36
+
37
+ UserModelSave = :save
38
+ UserModelName = :name
39
+
40
+ def user=(u)
41
+ session[:user_id] = u != nil ? u.id : nil
42
+ session[:user_name] = u != nil ? u.send(UserModelName) : nil
43
+ user
44
+ end
45
+
46
+ def authorize
47
+ unless User.find_by_id(session[:user_id]) and session[:user_name] != nil
48
+ flash[:notice] = "Please log in."
49
+ redirect_to new_session_url
50
+ end
51
+ end
52
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ require 'active_support'
6
+ require 'action_pack'
7
+
8
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
9
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
10
+ require 'ubiquitous_user'
11
+
12
+ class Test::Unit::TestCase
13
+ end
@@ -0,0 +1,7 @@
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
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ubiquitous_user
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - "J. Pablo Fern\xC3\xA1ndez"
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-29 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: actionpack
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.0.0
24
+ version:
25
+ description: Create accounts for users right away, even when they are anonymous.
26
+ email: pupeno@pupeno.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - LICENSE
33
+ - README.rdoc
34
+ files:
35
+ - .document
36
+ - .gitignore
37
+ - LICENSE
38
+ - README.rdoc
39
+ - Rakefile
40
+ - VERSION
41
+ - lib/ubiquitous_user.rb
42
+ - test/helper.rb
43
+ - test/test_ubiquitous-user.rb
44
+ has_rdoc: true
45
+ homepage: http://github.com/pupeno/ubiquitous_user
46
+ licenses: []
47
+
48
+ post_install_message:
49
+ rdoc_options:
50
+ - --charset=UTF-8
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ version:
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
65
+ requirements: []
66
+
67
+ rubyforge_project:
68
+ rubygems_version: 1.3.5
69
+ signing_key:
70
+ specification_version: 3
71
+ summary: Helpers to get and retrieve users ubiquitously
72
+ test_files:
73
+ - test/helper.rb
74
+ - test/test_ubiquitous-user.rb