remember_me 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.
- checksums.yaml +4 -4
- data/.rspec +0 -1
- data/README.md +10 -1
- data/lib/remember_me/model.rb +3 -2
- data/lib/remember_me/version.rb +1 -1
- data/remember_me.gemspec +3 -0
- data/spec/controllers/controller_spec.rb +69 -0
- data/spec/helper.rb +24 -0
- data/spec/models/model_spec.rb +103 -0
- metadata +48 -4
- data/spec/model_spec.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0281542a6847121ad78ac9b72222fe351b608ecf
|
4
|
+
data.tar.gz: 5d342eb5920dc0d3e2312a9c0a05f6af5cd3bd63
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fe1be06ee62cc36eb323a1179dbed0f9df7f0d0cfb32df908aa1afe0be71515e775910ef8e580385c794a3a51e301816b28c53a3042347ed0d6665d69bdcf3b
|
7
|
+
data.tar.gz: 0fe524909f0400291e44708af7d6ee023a190aaf66a04a726afa2808db46682c3d6099a4914120bbd295f899930a5dcffdd0a72aaf50f13dfc70845e6385f05d
|
data/.rspec
CHANGED
data/README.md
CHANGED
@@ -16,7 +16,7 @@ RememberMe
|
|
16
16
|
RememberMe is a simple remember-me login solution on Rails.
|
17
17
|
Manages generating and clearing a token for remembering the user from a saved cookie.
|
18
18
|
|
19
|
-

|
20
20
|
|
21
21
|
Installation
|
22
22
|
------------
|
@@ -46,8 +46,17 @@ end
|
|
46
46
|
|
47
47
|
models/user.rb:
|
48
48
|
|
49
|
+
```ruby
|
50
|
+
class User < ActiveRecord::Base
|
51
|
+
include RememberMe::Model
|
52
|
+
end
|
53
|
+
```
|
54
|
+
|
55
|
+
if mongoid
|
56
|
+
|
49
57
|
```ruby
|
50
58
|
class User
|
59
|
+
include Mongoid::Document
|
51
60
|
include RememberMe::Model
|
52
61
|
end
|
53
62
|
```
|
data/lib/remember_me/model.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'digest/sha1'
|
2
|
+
|
1
3
|
module RememberMe
|
2
4
|
module Model
|
3
5
|
extend ::ActiveSupport::Concern
|
@@ -10,9 +12,8 @@ module RememberMe
|
|
10
12
|
end
|
11
13
|
|
12
14
|
def forget_me!
|
13
|
-
return if self.remember_created_at.nil?
|
14
15
|
self.remember_created_at = nil
|
15
|
-
save(validate: false)
|
16
|
+
save(validate: false) if self.changed?
|
16
17
|
end
|
17
18
|
|
18
19
|
def remember_expired?
|
data/lib/remember_me/version.rb
CHANGED
data/remember_me.gemspec
CHANGED
@@ -21,8 +21,11 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
22
22
|
spec.add_development_dependency 'rake'
|
23
23
|
spec.add_development_dependency 'rspec'
|
24
|
+
spec.add_development_dependency 'rspec-rails'
|
24
25
|
spec.add_development_dependency 'simplecov'
|
25
26
|
spec.add_development_dependency 'coveralls'
|
27
|
+
spec.add_development_dependency 'pry'
|
28
|
+
spec.add_development_dependency 'awesome_print'
|
26
29
|
|
27
30
|
spec.add_dependency 'rails', '>= 3.2'
|
28
31
|
spec.add_dependency 'mongoid', '>= 3'
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class ApplicationController < ActionController::Base
|
4
|
+
include RememberMe::Controller
|
5
|
+
include Rails.application.routes.url_helpers
|
6
|
+
|
7
|
+
def current_user
|
8
|
+
@current_user ||= session[:user_id] ? User.find(session[:user_id]) : remember('user')
|
9
|
+
end
|
10
|
+
|
11
|
+
def current_user=(user)
|
12
|
+
@current_user = user
|
13
|
+
session[:user_id] = user.present? ? user.id : nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def authenticate_user!
|
17
|
+
redirect_to signin_path unless current_user
|
18
|
+
end
|
19
|
+
|
20
|
+
def user_signed_in?
|
21
|
+
!!current_user
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class SessionsController < ApplicationController
|
26
|
+
def create
|
27
|
+
current_user = User.new
|
28
|
+
remember_me(current_user) if remember_me?
|
29
|
+
redirect_to '/'
|
30
|
+
end
|
31
|
+
|
32
|
+
def destroy
|
33
|
+
forget_me(current_user)
|
34
|
+
self.current_user = nil
|
35
|
+
redirect_to '/signin'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class HomesController < ApplicationController
|
40
|
+
before_filter :authenticate_user!
|
41
|
+
|
42
|
+
def index
|
43
|
+
render nothing: true
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe SessionsController do
|
48
|
+
let(:remember_me) { true }
|
49
|
+
let(:attrs) { { remember_me: remember_me } }
|
50
|
+
|
51
|
+
describe 'POST #create' do
|
52
|
+
before do
|
53
|
+
controller.stub_chain(:cookies, :signed, :[]=) { '' }
|
54
|
+
post :create, attrs
|
55
|
+
end
|
56
|
+
|
57
|
+
it { response.status.should eq 302 }
|
58
|
+
end
|
59
|
+
|
60
|
+
describe 'GET #destroy' do
|
61
|
+
before do
|
62
|
+
controller.stub(:current_user) { User.new }
|
63
|
+
controller.stub_chain(:cookies, :delete) { nil }
|
64
|
+
get :destroy
|
65
|
+
end
|
66
|
+
|
67
|
+
it { response.status.should eq 302 }
|
68
|
+
end
|
69
|
+
end
|
data/spec/helper.rb
CHANGED
@@ -9,9 +9,33 @@ if ENV["CI"]
|
|
9
9
|
SimpleCov.start
|
10
10
|
end
|
11
11
|
|
12
|
+
require 'rails'
|
13
|
+
require 'action_controller'
|
12
14
|
require 'active_support/concern'
|
13
15
|
require 'active_record'
|
14
16
|
require 'mongoid'
|
15
17
|
require 'remember_me'
|
16
18
|
require 'rspec'
|
19
|
+
require 'rspec/rails'
|
17
20
|
|
21
|
+
RSpec.configure do |config|
|
22
|
+
config.mock_with :rspec
|
23
|
+
end
|
24
|
+
|
25
|
+
module Example
|
26
|
+
class Application < Rails::Application
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
Example::Application.routes.draw do
|
31
|
+
post 'signin', to: 'sessions#create'
|
32
|
+
get 'signout', to: 'sessions#destroy'
|
33
|
+
end
|
34
|
+
|
35
|
+
class User
|
36
|
+
include Mongoid::Document
|
37
|
+
include RememberMe::Model
|
38
|
+
def save(arg = {})
|
39
|
+
true
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe RememberMe::Model do
|
4
|
+
before { @model = User.new }
|
5
|
+
|
6
|
+
it { expect(@model.fields.has_key? 'remember_created_at').to be_true }
|
7
|
+
it { expect(@model.fields['remember_created_at'].options[:type]).to eq Time }
|
8
|
+
|
9
|
+
it { expect(@model.respond_to? :remember_me!).to be_true }
|
10
|
+
it { expect(@model.respond_to? :forget_me!).to be_true }
|
11
|
+
it { expect(@model.respond_to? :remember_expired?).to be_true }
|
12
|
+
it { expect(@model.respond_to? :remember_expires_at).to be_true }
|
13
|
+
it { expect(@model.respond_to? :rememberable_options).to be_true }
|
14
|
+
it { expect(@model.respond_to? :rememberable_value).to be_true }
|
15
|
+
|
16
|
+
describe '#remember_me!' do
|
17
|
+
before { @model.remember_me! }
|
18
|
+
it { expect(@model.remember_created_at.class).to eq Time }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#forget_me!' do
|
22
|
+
before do
|
23
|
+
@model.remember_created_at = Time.now.utc
|
24
|
+
@model.forget_me!
|
25
|
+
end
|
26
|
+
it { expect(@model.remember_created_at).to be_nil }
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#remember_expired?' do
|
30
|
+
before { @model.remember_created_at = remember_created_at }
|
31
|
+
subject { @model.remember_expired? }
|
32
|
+
|
33
|
+
context 'when remembered' do
|
34
|
+
context 'if expired' do
|
35
|
+
let(:remember_created_at) { Time.now - 2.weeks }
|
36
|
+
it { should be_true }
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'if not expired' do
|
40
|
+
let(:remember_created_at) { Time.now - 2.weeks + 1 }
|
41
|
+
it { should be_false }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'when not remembered' do
|
46
|
+
let(:remember_created_at) { nil }
|
47
|
+
it { should be_true }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#remember_expires_at' do
|
52
|
+
before { @model.remember_created_at = remember_created_at }
|
53
|
+
|
54
|
+
context 'when remembered' do
|
55
|
+
let(:remember_created_at) { Time.now - 2.weeks }
|
56
|
+
it { expect(@model.remember_expires_at).to eq (remember_created_at + 2.weeks) }
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'when not remembered' do
|
60
|
+
let(:remember_created_at) { nil }
|
61
|
+
it { expect { @model.remember_expires_at }.to raise_error }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '#rememberable_options' do
|
66
|
+
let(:options) { User.rememberable_options }
|
67
|
+
it { expect(@model.rememberable_options).to eq options }
|
68
|
+
end
|
69
|
+
|
70
|
+
describe '#rememberable_value' do
|
71
|
+
let(:hash) { Digest::SHA1.hexdigest "#{@model.id}" }
|
72
|
+
it { expect(@model.rememberable_value).to eq hash }
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '.serialize_into_cookie' do
|
76
|
+
subject { User.serialize_into_cookie @model }
|
77
|
+
it { expect(subject).to be_instance_of Array }
|
78
|
+
it { expect(subject[0]).to eq @model.id }
|
79
|
+
it { expect(subject[1]).to eq @model.rememberable_value }
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '.serialize_from_cookie' do
|
83
|
+
let(:id) { @model.id.to_s }
|
84
|
+
let(:remember_token) { @model.rememberable_value }
|
85
|
+
let(:expired) { false }
|
86
|
+
before do
|
87
|
+
User.stub_chain(:where, :first).and_return(@model)
|
88
|
+
@model.stub(:remember_expired?).and_return(expired)
|
89
|
+
end
|
90
|
+
subject { User.serialize_from_cookie(id, remember_token) }
|
91
|
+
it { expect(subject).to eq @model }
|
92
|
+
end
|
93
|
+
|
94
|
+
describe '.rememberable_options' do
|
95
|
+
let(:options) { {} }
|
96
|
+
it { expect(User.rememberable_options).to eq options }
|
97
|
+
end
|
98
|
+
|
99
|
+
describe '.remember_for' do
|
100
|
+
subject { User.remember_for }
|
101
|
+
it { should eq 2.weeks }
|
102
|
+
end
|
103
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remember_me
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- linyows
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec-rails
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: simplecov
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +94,34 @@ dependencies:
|
|
80
94
|
- - '>='
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: awesome_print
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
83
125
|
- !ruby/object:Gem::Dependency
|
84
126
|
name: rails
|
85
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,8 +170,9 @@ files:
|
|
128
170
|
- lib/remember_me/model.rb
|
129
171
|
- lib/remember_me/version.rb
|
130
172
|
- remember_me.gemspec
|
173
|
+
- spec/controllers/controller_spec.rb
|
131
174
|
- spec/helper.rb
|
132
|
-
- spec/model_spec.rb
|
175
|
+
- spec/models/model_spec.rb
|
133
176
|
homepage: https://github.com/linyows/remember_me
|
134
177
|
licenses:
|
135
178
|
- MIT
|
@@ -155,5 +198,6 @@ signing_key:
|
|
155
198
|
specification_version: 4
|
156
199
|
summary: RememberMe is a simple remember-me login solution on Rails.
|
157
200
|
test_files:
|
201
|
+
- spec/controllers/controller_spec.rb
|
158
202
|
- spec/helper.rb
|
159
|
-
- spec/model_spec.rb
|
203
|
+
- spec/models/model_spec.rb
|
data/spec/model_spec.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
describe RememberMe::Model do
|
4
|
-
before :all do
|
5
|
-
class User
|
6
|
-
include Mongoid::Document
|
7
|
-
include RememberMe::Model
|
8
|
-
def save(arg = {})
|
9
|
-
true
|
10
|
-
end
|
11
|
-
end
|
12
|
-
@model = User.new
|
13
|
-
end
|
14
|
-
|
15
|
-
it { expect(@model.fields.has_key? 'remember_created_at').to be_true }
|
16
|
-
it { expect(@model.fields['remember_created_at'].options[:type]).to eq Time }
|
17
|
-
it { expect(@model.respond_to? :remember_me!).to be_true }
|
18
|
-
|
19
|
-
describe '#remember_me!' do
|
20
|
-
before { @model.remember_me! }
|
21
|
-
it { expect(@model.remember_created_at.class).to eq Time }
|
22
|
-
end
|
23
|
-
|
24
|
-
describe '#forget_me!' do
|
25
|
-
it { expect(@model.respond_to? :forget_me!).to be_true }
|
26
|
-
end
|
27
|
-
end
|