authentication 0.0.1 → 0.0.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2a79cf272b8049c3c5c4079363518bea601ef966
4
+ data.tar.gz: ebcdb430bc467c2586e1ac3d9adc2787c3a25996
5
+ SHA512:
6
+ metadata.gz: 1504438b306f6a02d00b1aab3122fa95833b0a74bfe03b6187ef70974ed37850e220d47106cb4ed77ea06e1ae3077ee2c55c596aa811aa65fcf5365a348958de
7
+ data.tar.gz: 2597a069244ef5ffde178d66d2005ce1f037447f3e690747e61448b9e4ea90d65b6b1a1abf84497cfdb63f63b9c3174bd7c0bfcbd5cfe6ff0b378e632c0753c5
@@ -1,5 +1,10 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
- - jruby-19mode # JRuby in 1.9 mode
4
+ - 2.0.0
5
+ - 2.1
6
+ - 2.2
7
+ - jruby-19mode
5
8
  - rbx-19mode
9
+
10
+ sudo: false
@@ -1,21 +1,26 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- authentication (0.0.1)
4
+ authentication (0.0.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
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)
9
+ diff-lcs (1.2.5)
10
+ rake (10.4.2)
11
+ rspec (3.4.0)
12
+ rspec-core (~> 3.4.0)
13
+ rspec-expectations (~> 3.4.0)
14
+ rspec-mocks (~> 3.4.0)
15
+ rspec-core (3.4.1)
16
+ rspec-support (~> 3.4.0)
17
+ rspec-expectations (3.4.0)
18
+ diff-lcs (>= 1.2.0, < 2.0)
19
+ rspec-support (~> 3.4.0)
20
+ rspec-mocks (3.4.0)
21
+ diff-lcs (>= 1.2.0, < 2.0)
22
+ rspec-support (~> 3.4.0)
23
+ rspec-support (3.4.0)
19
24
 
20
25
  PLATFORMS
21
26
  ruby
@@ -24,3 +29,6 @@ DEPENDENCIES
24
29
  authentication!
25
30
  rake
26
31
  rspec
32
+
33
+ BUNDLED WITH
34
+ 1.10.6
data/README.md CHANGED
@@ -2,19 +2,34 @@
2
2
 
3
3
  ## Minimalist authentication library for Ruby
4
4
 
5
- ## How to use
5
+ ## Install
6
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)
7
+ ```
8
+ $ gem install authentication
9
+ ```
8
10
 
9
- ## Requirements
11
+ or add ```gem 'authentication'``` to your Gemfile.
10
12
 
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
+ ## How to use in a Rails app
14
+
15
+ 0. Include `Authentication` to your controller.
16
+ 1. Define `#find_current_user` in your controller.
17
+ 2. That's all. You can use the method below in the controller:
18
+ - `#login!` and `#logout!` to log in/out.
19
+ - `#current_user` and `#current_user_id` to get current user or its id.
20
+ - `#logged_in?` to ask logged in or not.
21
+
22
+ [Example](https://github.com/fujimura/authentication_rails_example) and [spec](https://github.com/fujimura/authentication/blob/master/spec/lib/authentication_spec.rb) might be also helpful.
23
+
24
+ ## Advanced usage
25
+
26
+ Under the hood, methods above(`current_user` etc.) are delegated to the instance of `Authentication::Authenticator`, which is built for "current_user". So, it's possible to create custom authenticator for a client which isn't a current user.
13
27
 
14
28
  ## Side-effects
15
29
 
16
- * ```session[:current_user_id]``` in included module will be changed.
17
- * ```@current_user``` in included module will be changed.
30
+ * ```session[:current_user_id]``` of the class includes `Authentication` will be changed.
31
+ * The class includes `Authentication` will include `Forwardable`.
32
+ * The class includes `Authentication` will have a method called `current_user_authenticator`.
18
33
 
19
34
  ## Goal
20
35
 
@@ -1,45 +1,30 @@
1
1
  require "authentication/version"
2
+ require "authentication/authenticator"
2
3
 
4
+ # Top-level namespace of this library, also works as a convenient module to supply authentication-related methods for Rails controller etc.
5
+ #
6
+ # By including this, the class will have methods like "login!" or "current_user!". See method list for the documentation of Authenticator.
7
+ #
8
+ # To find current_user, this module uses "find_current_user" method defined in included module to find current user, and "current_user_id" as the session key.
3
9
  module Authentication
4
-
10
+ # Raised when authentication was failed.
5
11
  class Unauthenticated < StandardError; end
6
12
 
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?
13
+ def self.included(base)
14
+ base.class_eval do
15
+ extend Forwardable
16
+ def_delegators :current_user_authenticator, :login!, :current_user, :current_user_id, :logged_in?, :logout!
17
+ end
37
18
  end
38
19
 
39
- # Delete current_user from database and session.
20
+ # Return authenticator for current_user.
40
21
  #
41
- def logout!
42
- return unless current_user
43
- @current_user = session[:current_user_id] = nil
22
+ # @return [Authentication::Authenticator]
23
+ def current_user_authenticator
24
+ @__authenticator ||= Authentication::Authenticator.new(
25
+ session: session,
26
+ session_key: :current_user_id,
27
+ finder: -> { find_current_user }
28
+ )
44
29
  end
45
30
  end
@@ -0,0 +1,56 @@
1
+ module Authentication
2
+ # A object to authenticate client.
3
+ # @since 0.0.2
4
+ class Authenticator
5
+ # @param [Hash] options the options to create a authenticator with.
6
+ # @option options [Hash] :session Hash-like session object.
7
+ # @option options [Symbol] :session_key Key of session_id.
8
+ # @option options [Proc] :finder A proc which returns client to authenticate.
9
+ def initialize(options)
10
+ @session = options.fetch :session
11
+ @session_key = options.fetch :session_key
12
+ @finder = options.fetch :finder
13
+ end
14
+
15
+ # Set current_client.
16
+ #
17
+ # @raise [Unauthenticated] Raised when given client doesn't exist.
18
+ def login!(client)
19
+ raise Unauthenticated unless client
20
+ @current_client = client
21
+ @session[@session_key] = client.id
22
+ end
23
+
24
+ # Return current_client.
25
+ # If it does not exist, returns nil.
26
+ #
27
+ # @return [Object] The object stored as client or nil
28
+ def current_client
29
+ @current_client ||= @finder.call
30
+ end
31
+ alias current_user current_client
32
+
33
+ # Return id of given current_client.
34
+ # If it does not exist, returns nil.
35
+ #
36
+ # @return [Object] The id of object stored as client or nil
37
+ def current_client_id
38
+ @session[@session_key]
39
+ end
40
+ alias current_user_id current_client_id
41
+
42
+ # Return current_client exists or not.
43
+ #
44
+ # @return [Boolean]
45
+ def logged_in?
46
+ not current_client.nil?
47
+ end
48
+
49
+ # Delete current_client from database and session.
50
+ #
51
+ def logout!
52
+ return unless current_client
53
+ @current_client = @session[@session_key] = nil
54
+ end
55
+ end
56
+ end
@@ -1,3 +1,3 @@
1
1
  module Authentication
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -8,7 +8,7 @@ class Controller
8
8
  self.session = {}
9
9
  end
10
10
 
11
- def find_current_user success = true
11
+ def find_current_user
12
12
  if session[:current_user_id]
13
13
  true
14
14
  else
@@ -44,13 +44,13 @@ describe Authentication do
44
44
  context 'when logged in' do
45
45
  it "should return user" do
46
46
  controller.login! user
47
- controller.current_user.should == user
47
+ expect(controller.current_user).to eq user
48
48
  end
49
49
  end
50
50
  context 'when not logged in' do
51
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"
52
+ expect(controller).to receive(:find_current_user).and_return "something"
53
+ expect(controller.current_user). to eq "something"
54
54
  end
55
55
  end
56
56
  end
@@ -59,12 +59,12 @@ describe Authentication do
59
59
  context 'when logged in' do
60
60
  it "should return user_id" do
61
61
  controller.login! user
62
- controller.current_user_id.should == user.id
62
+ expect(controller.current_user_id).to eq user.id
63
63
  end
64
64
  end
65
65
  context 'when not logged in' do
66
66
  it "should return nil" do
67
- controller.current_user_id.should == nil
67
+ expect(controller.current_user_id).to eq nil
68
68
  end
69
69
  end
70
70
  end
@@ -73,7 +73,7 @@ describe Authentication do
73
73
  context 'when logged in' do
74
74
  it "should return true" do
75
75
  controller.login! user
76
- controller.logged_in?.should == true
76
+ expect(controller).to be_logged_in
77
77
  end
78
78
  end
79
79
  end
@@ -83,8 +83,8 @@ describe Authentication do
83
83
  it "should set current_user to nil" do
84
84
  controller.login! user
85
85
  controller.logout!
86
- controller.current_user.should == nil
87
- controller.session[:current_user_id].should == nil
86
+ expect(controller.current_user).to eq nil
87
+ expect(controller.session[:current_user_id]).to eq nil
88
88
  end
89
89
  end
90
90
  end
metadata CHANGED
@@ -1,46 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authentication
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Fujimura Daisuke
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-11-07 00:00:00.000000000 Z
11
+ date: 2015-11-24 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rake
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  description: Minimalist authentication library for Ruby
@@ -50,8 +45,8 @@ executables: []
50
45
  extensions: []
51
46
  extra_rdoc_files: []
52
47
  files:
53
- - .gitignore
54
- - .travis.yml
48
+ - ".gitignore"
49
+ - ".travis.yml"
55
50
  - Gemfile
56
51
  - Gemfile.lock
57
52
  - LICENSE.txt
@@ -59,34 +54,33 @@ files:
59
54
  - Rakefile
60
55
  - authentication.gemspec
61
56
  - lib/authentication.rb
57
+ - lib/authentication/authenticator.rb
62
58
  - lib/authentication/version.rb
63
59
  - spec/lib/authentication_spec.rb
64
60
  - spec/spec_helper.rb
65
61
  homepage: https://github.com/fujimura/authentication
66
62
  licenses: []
63
+ metadata: {}
67
64
  post_install_message:
68
65
  rdoc_options: []
69
66
  require_paths:
70
67
  - lib
71
68
  required_ruby_version: !ruby/object:Gem::Requirement
72
- none: false
73
69
  requirements:
74
- - - ! '>='
70
+ - - ">="
75
71
  - !ruby/object:Gem::Version
76
72
  version: '0'
77
73
  required_rubygems_version: !ruby/object:Gem::Requirement
78
- none: false
79
74
  requirements:
80
- - - ! '>='
75
+ - - ">="
81
76
  - !ruby/object:Gem::Version
82
77
  version: '0'
83
78
  requirements: []
84
79
  rubyforge_project: authentication
85
- rubygems_version: 1.8.23
80
+ rubygems_version: 2.4.5.1
86
81
  signing_key:
87
- specification_version: 3
82
+ specification_version: 4
88
83
  summary: Minimalist authentication library for Ruby
89
84
  test_files:
90
85
  - spec/lib/authentication_spec.rb
91
86
  - spec/spec_helper.rb
92
- has_rdoc: