authentication 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - jruby-19mode # JRuby in 1.9 mode
5
+ - rbx-19mode
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in authentication.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,26 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ authentication (0.0.1)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.1.3)
10
+ rake (0.9.2.2)
11
+ rspec (2.11.0)
12
+ rspec-core (~> 2.11.0)
13
+ rspec-expectations (~> 2.11.0)
14
+ rspec-mocks (~> 2.11.0)
15
+ rspec-core (2.11.1)
16
+ rspec-expectations (2.11.3)
17
+ diff-lcs (~> 1.1.3)
18
+ rspec-mocks (2.11.3)
19
+
20
+ PLATFORMS
21
+ ruby
22
+
23
+ DEPENDENCIES
24
+ authentication!
25
+ rake
26
+ rspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Fujimura Daisuke
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,21 @@
1
+ # Authentication [<img src="https://secure.travis-ci.org/fujimura/authentication.png"/>](http://travis-ci.org/fujimura/authentication) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/fujimura/authentication)
2
+
3
+ ## Minimalist authentication library for Ruby
4
+
5
+ ## How to use
6
+
7
+ See an [example](https://github.com/fujimura/authentication-rails-example) or [spec](https://github.com/fujimura/authentication/blob/master/spec/authentication_spec.rb)
8
+
9
+ ## Requirements
10
+
11
+ * Included class should have a method called `find_current_user` which returns the user object.
12
+ * Included class should have a method called `session` method which returns Hash-like object.
13
+
14
+ ## Side-effects
15
+
16
+ * ```session[:current_user_id]``` in included module will be changed.
17
+ * ```@current_user``` in included module will be changed.
18
+
19
+ ## Goal
20
+
21
+ The goal of this library is to provide standard authorization mechanism for web application with minimal dependency by short and concise code which can be understand easily.
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'authentication/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "authentication"
8
+ gem.version = Authentication::VERSION
9
+ gem.authors = ["Fujimura Daisuke"]
10
+ gem.email = ["me@fujimuradaisuke.com"]
11
+ gem.description = %q{Minimalist authentication library for Ruby}
12
+ gem.summary = %q{Minimalist authentication library for Ruby}
13
+ gem.homepage = "https://github.com/fujimura/authentication"
14
+
15
+ gem.rubyforge_project = "authentication"
16
+
17
+ gem.files = `git ls-files`.split($/)
18
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
19
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
20
+ gem.require_paths = ["lib"]
21
+
22
+ gem.add_development_dependency "rake"
23
+ gem.add_development_dependency "rspec"
24
+ end
@@ -0,0 +1,45 @@
1
+ require "authentication/version"
2
+
3
+ module Authentication
4
+
5
+ class Unauthenticated < StandardError; end
6
+
7
+ # Log in with given object.
8
+ #
9
+ # @param [Object] user The object you want to store as `current_user`.
10
+ def login!(user)
11
+ raise Unauthenticated unless user
12
+ @current_user = user
13
+ session[:current_user_id] = user.id
14
+ end
15
+
16
+ # Return current_user.
17
+ # If it does not exist, returns nil.
18
+ #
19
+ # @return [Object] The object stored as user or nil
20
+ def current_user
21
+ @current_user ||= find_current_user
22
+ end
23
+
24
+ # Return id of given current_user.
25
+ # If it does not exist, returns nil.
26
+ #
27
+ # @return [Object] The id of object stored as user or nil
28
+ def current_user_id
29
+ session[:current_user_id]
30
+ end
31
+
32
+ # Return current_user exists or not.
33
+ #
34
+ # @return [Boolean]
35
+ def logged_in?
36
+ not current_user.nil?
37
+ end
38
+
39
+ # Delete current_user from database and session.
40
+ #
41
+ def logout!
42
+ return unless current_user
43
+ @current_user = session[:current_user_id] = nil
44
+ end
45
+ end
@@ -0,0 +1,3 @@
1
+ module Authentication
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,91 @@
1
+ require 'spec_helper'
2
+
3
+ class Controller
4
+ include Authentication
5
+ attr_accessor :session
6
+
7
+ def initialize
8
+ self.session = {}
9
+ end
10
+
11
+ def find_current_user success = true
12
+ if session[:current_user_id]
13
+ true
14
+ else
15
+ nil
16
+ end
17
+ end
18
+ end
19
+
20
+ class User
21
+ def initialize(attributes)
22
+ @attributes = attributes
23
+ end
24
+ def id
25
+ @attributes[:id]
26
+ end
27
+ end
28
+
29
+ describe Authentication do
30
+ let(:controller) { Controller.new }
31
+ let(:user) { User.new(id: 300) }
32
+
33
+ describe '#login!' do
34
+ context 'with nil' do
35
+ it "should raise Unauthenticated" do
36
+ expect do
37
+ controller.login! nil
38
+ end.to raise_error Authentication::Unauthenticated
39
+ end
40
+ end
41
+ end
42
+
43
+ describe '#current_user' do
44
+ context 'when logged in' do
45
+ it "should return user" do
46
+ controller.login! user
47
+ controller.current_user.should == user
48
+ end
49
+ end
50
+ context 'when not logged in' do
51
+ it "should call #find_current_user and return its result" do
52
+ controller.should_receive(:find_current_user).and_return "something"
53
+ controller.current_user.should == "something"
54
+ end
55
+ end
56
+ end
57
+
58
+ describe '#current_user_id' do
59
+ context 'when logged in' do
60
+ it "should return user_id" do
61
+ controller.login! user
62
+ controller.current_user_id.should == user.id
63
+ end
64
+ end
65
+ context 'when not logged in' do
66
+ it "should return nil" do
67
+ controller.current_user_id.should == nil
68
+ end
69
+ end
70
+ end
71
+
72
+ describe '#logged_in?' do
73
+ context 'when logged in' do
74
+ it "should return true" do
75
+ controller.login! user
76
+ controller.logged_in?.should == true
77
+ end
78
+ end
79
+ end
80
+
81
+ describe '#logout!' do
82
+ context 'when logged in' do
83
+ it "should set current_user to nil" do
84
+ controller.login! user
85
+ controller.logout!
86
+ controller.current_user.should == nil
87
+ controller.session[:current_user_id].should == nil
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,8 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+
3
+ require 'rspec'
4
+ require File.expand_path(__FILE__ + './../../lib/authentication')
5
+
6
+ RSpec.configure do |config|
7
+ config.order = "random"
8
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: authentication
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Fujimura Daisuke
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: Minimalist authentication library for Ruby
47
+ email:
48
+ - me@fujimuradaisuke.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - .travis.yml
55
+ - Gemfile
56
+ - Gemfile.lock
57
+ - LICENSE.txt
58
+ - README.md
59
+ - Rakefile
60
+ - authentication.gemspec
61
+ - lib/authentication.rb
62
+ - lib/authentication/version.rb
63
+ - spec/lib/authentication_spec.rb
64
+ - spec/spec_helper.rb
65
+ homepage: https://github.com/fujimura/authentication
66
+ licenses: []
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ requirements: []
84
+ rubyforge_project: authentication
85
+ rubygems_version: 1.8.23
86
+ signing_key:
87
+ specification_version: 3
88
+ summary: Minimalist authentication library for Ruby
89
+ test_files:
90
+ - spec/lib/authentication_spec.rb
91
+ - spec/spec_helper.rb
92
+ has_rdoc: