tokens 0.2.0.beta.1 → 0.2.0.beta.3

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/Rakefile CHANGED
@@ -1,3 +1,4 @@
1
+ require "rspec/core/rake_task"
1
2
  require "lib/tokens/version"
2
3
 
3
4
  begin
@@ -8,7 +9,7 @@ begin
8
9
  gem.email = "fnando.vieira@gmail.com"
9
10
  gem.homepage = "http://github.com/fnando/has_tokens"
10
11
  gem.authors = ["Nando Vieira"]
11
- gem.version = SimplesIdeias::Tokens::Version::STRING + ".beta.1"
12
+ gem.version = SimplesIdeias::Tokens::Version::STRING + ".beta.3"
12
13
  gem.summary = "Generate named tokens on your ActiveRecord models."
13
14
  gem.files = FileList["README.rdoc", "init.rb", "{lib,spec,source}/**/*", "Rakefile"]
14
15
  end
@@ -17,3 +18,7 @@ begin
17
18
  rescue LoadError => e
18
19
  puts "[JEWELER] You can't build a gem until you install jeweler with `gem install jeweler`"
19
20
  end
21
+
22
+ RSpec::Core::RakeTask.new do |t|
23
+ t.ruby_opts = %[ -rubygems -Ilib -Ispec ]
24
+ end
@@ -18,15 +18,15 @@ module Tokens
18
18
  include InstanceMethods
19
19
  end
20
20
 
21
- # Generate token using seed and size.
21
+ # Generate token with specified length.
22
22
  #
23
- # User.generate_token("abc", 10)
23
+ # User.generate_token(10)
24
24
  #
25
- def generate_token(seed, size)
25
+ def generate_token(size)
26
26
  validity = Proc.new {|token| Token.where(:token => token).first.nil?}
27
27
 
28
28
  begin
29
- seed = Digest::SHA1.hexdigest(seed)
29
+ seed = "--#{rand}--#{Time.now}--#{rand}--"
30
30
  token = Digest::SHA1.hexdigest(seed)[0, size]
31
31
  end while validity[token] == false
32
32
 
@@ -35,13 +35,13 @@ module Tokens
35
35
 
36
36
  # Find a token
37
37
  #
38
- # User.find_token(:activation, 'abcdefg')
39
- # User.find_token(:name => activation, :token => 'abcdefg')
40
- # User.find_token(:name => activation, :token => 'abcdefg', :tokenizable_id => 1)
38
+ # User.find_token(:activation, "abcdefg")
39
+ # User.find_token(:name => activation, :token => "abcdefg")
40
+ # User.find_token(:name => activation, :token => "abcdefg", :tokenizable_id => 1)
41
41
  #
42
42
  def find_token(*args)
43
43
  if args.first.kind_of?(Hash)
44
- args.first
44
+ options = args.first
45
45
  else
46
46
  options = {
47
47
  :name => args.first,
@@ -50,12 +50,12 @@ module Tokens
50
50
  end
51
51
 
52
52
  options.merge!(:name => options[:name].to_s, :tokenizable_type => self.name)
53
- Token.where(options).include(:tokenizable).first
53
+ Token.where(options).includes(:tokenizable).first
54
54
  end
55
55
 
56
56
  # Find object by token.
57
57
  #
58
- # User.find_by_token(:activation, 'abcdefg')
58
+ # User.find_by_token(:activation, "abcdefg")
59
59
  #
60
60
  def find_by_token(name, hash)
61
61
  token = find_token(:name => name.to_s, :token => hash)
@@ -65,19 +65,27 @@ module Tokens
65
65
 
66
66
  # Find object by valid token (same name, same hash, not expired).
67
67
  #
68
- # User.find_by_valid_token(:activation, 'abcdefg')
68
+ # User.find_by_valid_token(:activation, "abcdefg")
69
69
  #
70
70
  def find_by_valid_token(name, hash)
71
71
  token = find_token(:name => name.to_s, :token => hash)
72
- return nil if !token || t.expired?
73
- t.tokenizable
72
+ return nil if !token || token.expired?
73
+ token.tokenizable
74
74
  end
75
75
  end
76
76
 
77
77
  module InstanceMethods
78
+ # Verify if given token is valid.
79
+ #
80
+ # @user.valid_token?(:active, "abcdefg")
81
+ #
82
+ def valid_token?(name, hash)
83
+ self.tokens.where(:name => name.to_s, :token => hash.to_s).first != nil
84
+ end
85
+
78
86
  # Find a token.
79
87
  #
80
- # @user.find_token(:activation, 'abcdefg')
88
+ # @user.find_token(:activation, "abcdefg")
81
89
  #
82
90
  def find_token(name, token)
83
91
  self.class.find_token(
@@ -115,15 +123,14 @@ module Tokens
115
123
  })
116
124
 
117
125
  remove_token(name)
118
-
119
- seed = "--#{rand}--#{self.object_id}--#{Time.now}--"
120
-
121
- self.tokens.create(
122
- :name => name.to_s,
123
- :token => self.class.generate_token(seed, options[:size]),
126
+ attrs = {
127
+ :name => name.to_s,
128
+ :token => self.class.generate_token(options[:size]),
124
129
  :expires_at => options[:expires_at],
125
- :data => options[:data]
126
- )
130
+ :data => options[:data]
131
+ }
132
+
133
+ self.tokens.create!(attrs)
127
134
  end
128
135
  end
129
136
  end
@@ -1,5 +1,3 @@
1
- $LOAD_PATH.unshift File.dirname(__FILE__) + "/../lib"
2
-
3
1
  require "rspec"
4
2
  require "active_record"
5
3
  require "tokens"
@@ -7,3 +5,7 @@ require "tokens"
7
5
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
8
6
 
9
7
  load("schema.rb")
8
+
9
+ RSpec.configure do |c|
10
+ c.color_enabled = true
11
+ end
@@ -9,156 +9,156 @@ class Post < ActiveRecord::Base
9
9
  end
10
10
 
11
11
  describe "has_tokens" do
12
- before(:each) do
12
+ before do
13
13
  User.delete_all
14
14
  Post.delete_all
15
-
15
+
16
16
  @user = User.create(:name => "Homer")
17
17
  @another_user = User.create(:name => "Bart")
18
18
  @post = Post.create(:title => "How to make donuts")
19
19
  @expire = 3.days.from_now
20
20
  end
21
-
21
+
22
22
  describe "- token" do
23
23
  it "should be created" do
24
24
  expect { @user.add_token(:uid) }.to change(Token, :count)
25
25
  end
26
-
26
+
27
27
  it "should be created for different users" do
28
28
  @user.add_token(:uid).should be_valid
29
29
  @another_user.add_token(:uid).should be_valid
30
30
  end
31
-
31
+
32
32
  it "should be created with expiration date" do
33
33
  @user.add_token(:uid, :expires_at => @expire).expires_at.should == @expire
34
34
  end
35
-
35
+
36
36
  it "should be created with additional data" do
37
- @user.add_token(:uid, :data => 'some value').data.should == 'some value'
37
+ @user.add_token(:uid, :data => "some value").data.should == "some value"
38
38
  end
39
-
39
+
40
40
  it "should be created with custom size" do
41
41
  @user.add_token(:uid, :size => 6).hash.size.should == 6
42
42
  end
43
-
43
+
44
44
  it "should find token by its name" do
45
45
  token = @user.add_token(:uid)
46
46
  @user.find_token_by_name(:uid).should == token
47
47
  end
48
-
48
+
49
49
  it "should be nil when no token is found" do
50
- @user.find_token(:uid, 'abcdef').should be_nil
50
+ @user.find_token(:uid, "abcdef").should be_nil
51
51
  @user.find_token_by_name(:uid).should be_nil
52
52
  end
53
-
53
+
54
54
  it "should be a valid token" do
55
55
  token = @user.add_token(:uid)
56
56
  @user.valid_token?(:uid, token.hash).should be_true
57
57
  end
58
-
58
+
59
59
  it "should not be a valid token" do
60
- @user.valid_token?(:uid, 'invalid').should be_false
60
+ @user.valid_token?(:uid, "invalid").should be_false
61
61
  end
62
-
62
+
63
63
  it "should find token by its name and hash" do
64
64
  token = @user.add_token(:uid)
65
65
  @user.find_token(:uid, token.hash).should == token
66
66
  end
67
-
67
+
68
68
  it "should not be expired when have no expiration date" do
69
69
  @user.add_token(:uid).should_not be_expired
70
70
  end
71
-
71
+
72
72
  it "should not be expired when have a future expiration date" do
73
73
  @user.add_token(:uid, :expires_at => 3.days.from_now).should_not be_expired
74
74
  end
75
-
75
+
76
76
  it "should be expired" do
77
77
  @user.add_token(:uid, :expires_at => 3.days.ago).should be_expired
78
78
  end
79
-
79
+
80
80
  it "should remove token" do
81
81
  @user.add_token(:uid)
82
- @user.remove_token(:uid).should > 0
82
+ @user.remove_token(:uid).should be_true
83
83
  end
84
-
84
+
85
85
  it "should not remove other users tokens" do
86
86
  @user.add_token(:uid)
87
87
  @another_user.add_token(:uid)
88
-
88
+
89
89
  @user.remove_token(:uid)
90
-
90
+
91
91
  @user.find_token_by_name(:uid).should be_nil
92
92
  @another_user.find_token_by_name(:uid).should be_an_instance_of(Token)
93
93
  end
94
-
94
+
95
95
  it "should not be duplicated" do
96
96
  @user.add_token(:uid)
97
97
  @user.add_token(:uid)
98
-
99
- @user.tokens.find_all_by_name('uid').size.should == 1
98
+
99
+ @user.tokens.find_all_by_name("uid").size.should == 1
100
100
  end
101
101
  end
102
-
102
+
103
103
  it "should have tokens association" do
104
104
  expect { @user.tokens }.to_not raise_error
105
105
  end
106
-
106
+
107
107
  it "should remove all expired tokens" do
108
108
  expect {
109
109
  %w(uid activation_code reset_password_code).each do |name|
110
110
  @user.add_token(name, :expires_at => 3.days.ago)
111
111
  end
112
112
  }.to change(Token, :count).by(3)
113
-
114
- Token.delete_expired.should == 3
113
+
114
+ Token.clean.should == 3
115
115
  end
116
-
116
+
117
117
  it "should generate token without saving it" do
118
118
  expect {
119
- User.generate_token(Time.now.to_s, 32)
119
+ User.generate_token(32)
120
120
  }.to_not change(Token, :count)
121
121
  end
122
-
122
+
123
123
  it "should generate token with custom size" do
124
- User.generate_token(Time.now.to_s, 8).size.should == 8
124
+ User.generate_token(8).size.should == 8
125
125
  end
126
-
126
+
127
127
  it "should alias token method" do
128
128
  token = @user.add_token(:uid)
129
129
  token.hash.should == token.token
130
130
  end
131
-
131
+
132
132
  it "should find user by token" do
133
133
  token = @user.add_token(:uid)
134
134
  User.find_by_token(:uid, token.hash).should == @user
135
135
  end
136
-
136
+
137
137
  it "should return user by its valid token without expiration time" do
138
138
  token = @user.add_token(:uid)
139
139
  User.find_by_valid_token(:uid, token.hash).should == @user
140
140
  end
141
-
141
+
142
142
  it "should return user by its valid token with expiration time" do
143
143
  token = @user.add_token(:uid, :expires_at => @expire)
144
144
  User.find_by_valid_token(:uid, token.hash).should == @user
145
145
  end
146
-
146
+
147
147
  it "should find token using class method with one argument (hash only)" do
148
148
  token = @user.add_token(:uid)
149
149
  User.find_token(:name => :uid, :token => token.hash).should == token
150
150
  end
151
-
151
+
152
152
  it "should not conflict with other models" do
153
153
  user_token = @user.add_token(:uid)
154
154
  post_token = @post.add_token(:uid)
155
-
155
+
156
156
  User.find_token(post_token.to_s).should == nil
157
157
  User.find_token(:name => :uid)
158
158
  end
159
-
159
+
160
160
  it "to_s should return hash" do
161
161
  token = @user.add_token(:uid)
162
162
  token.to_s.should == token.hash
163
163
  end
164
- end
164
+ end
metadata CHANGED
@@ -1,15 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tokens
3
3
  version: !ruby/object:Gem::Version
4
- hash: 62196353
5
- prerelease: true
6
- segments:
7
- - 0
8
- - 2
9
- - 0
10
- - beta
11
- - 1
12
- version: 0.2.0.beta.1
4
+ version: 0.2.0.beta.3
13
5
  platform: ruby
14
6
  authors:
15
7
  - Nando Vieira
@@ -48,29 +40,21 @@ rdoc_options:
48
40
  require_paths:
49
41
  - lib
50
42
  required_ruby_version: !ruby/object:Gem::Requirement
51
- none: false
52
43
  requirements:
53
44
  - - ">="
54
45
  - !ruby/object:Gem::Version
55
- hash: 3
56
- segments:
57
- - 0
58
46
  version: "0"
47
+ version:
59
48
  required_rubygems_version: !ruby/object:Gem::Requirement
60
- none: false
61
49
  requirements:
62
50
  - - ">"
63
51
  - !ruby/object:Gem::Version
64
- hash: 25
65
- segments:
66
- - 1
67
- - 3
68
- - 1
69
52
  version: 1.3.1
53
+ version:
70
54
  requirements: []
71
55
 
72
56
  rubyforge_project:
73
- rubygems_version: 1.3.7
57
+ rubygems_version: 1.3.5
74
58
  signing_key:
75
59
  specification_version: 3
76
60
  summary: Generate named tokens on your ActiveRecord models.