token_attribute 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # token_attribute [<img src="https://secure.travis-ci.org/fujimura/token_attribute.png"/>](http://travis-ci.org/fujimura/token_attribute)
1
+ # token_attribute [<img src="https://secure.travis-ci.org/fujimura/token_attribute.png"/>](http://travis-ci.org/fujimura/token_attribute)[![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/fujimura/token_attribute)
2
2
 
3
3
  Small macro to define unique random token generator for ActiveRecord.
4
4
 
@@ -6,3 +6,7 @@ Release notes
6
6
  ### `#token_attribute`
7
7
 
8
8
  Add option `length` to specify token length.
9
+
10
+ ## 0.1.1
11
+
12
+ Only internal changes.
data/Rakefile CHANGED
@@ -1,13 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
- require 'rake/testtask'
3
2
 
4
- desc "Default Task"
5
- task :default => [ :test ]
3
+ require 'rspec/core/rake_task'
6
4
 
7
- # Run the unit tests
8
- Rake::TestTask.new { |t|
9
- t.libs << "test"
10
- t.pattern = 'test/**/*_test.rb'
11
- t.warning = true
12
- }
5
+ RSpec::Core::RakeTask.new(:spec)
13
6
 
7
+ task :default => :spec
@@ -1,3 +1,3 @@
1
1
  module TokenAttribute
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -0,0 +1,135 @@
1
+ require 'spec_helper'
2
+
3
+ describe TokenAttribute do
4
+
5
+ before do
6
+ User.new # OMG
7
+ end
8
+
9
+
10
+ describe '.token_attribute' do
11
+ context 'given multiple attributes' do
12
+ subject do
13
+ define_new_class_instance_for User do
14
+ include TokenAttribute
15
+ token_attribute :download_ticket, :password_recovery
16
+ end
17
+ end
18
+
19
+ it 'can token_attribute-ize multiple attributes' do
20
+ [:download_ticket, :password_recovery].each do |a|
21
+ method_name = ('set_' + a.to_s).to_sym
22
+ subject.new.methods.map(&:to_sym).should include method_name
23
+ end
24
+ end
25
+ end
26
+
27
+ context 'with :protected => true' do
28
+ subject do
29
+ define_new_class_instance_for User do
30
+ include TokenAttribute
31
+ token_attribute :download_ticket, :protected => true
32
+ end
33
+ end
34
+
35
+ it 'should protect attribute' do
36
+ subject.protected_attributes.should include :download_ticket
37
+ end
38
+ end
39
+
40
+ context 'with scope' do
41
+ subject do
42
+ define_new_class_instance_for User do
43
+ include TokenAttribute
44
+ token_attribute :download_ticket, :scope => :name
45
+ before_save :set_download_ticket
46
+ end
47
+ end
48
+
49
+ it 'assign token attribute with given scope' do
50
+ one = subject.new :name => 'fujimura'
51
+ two = subject.new :name => 'tanaka'
52
+ [one, two].each {|u| u.stub(:generate_download_ticket).and_return 'a' }
53
+ [one, two].each {|u| u.save }
54
+ one.download_ticket.should == two.download_ticket
55
+ end
56
+ end
57
+
58
+ describe 'Token length' do
59
+ context 'default' do
60
+ subject do
61
+ define_new_class_instance_for User do
62
+ include TokenAttribute
63
+ token_attribute :download_ticket
64
+ before_save :set_download_ticket
65
+ end
66
+ end
67
+
68
+ specify do
69
+ one = subject.new :name => 'fujimura'
70
+ one.save
71
+ one.download_ticket.length.should == 10
72
+ end
73
+ end
74
+
75
+ context 'set to 8' do
76
+ subject do
77
+ define_new_class_instance_for User do
78
+ include TokenAttribute
79
+ token_attribute :download_ticket, :length => 8
80
+ before_save :set_download_ticket
81
+ end
82
+ end
83
+
84
+ specify do
85
+ one = subject.new :name => 'fujimura'
86
+ one.save
87
+ one.download_ticket.length.should == 8
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ context 'class with access_token as token_attribute' do
94
+ let(:user) { User.new }
95
+
96
+ after do
97
+ User.delete_all
98
+ end
99
+
100
+ describe '#generate_access_token' do
101
+ it 'returns random string' do
102
+ SecureRandom.stub(:hex).and_return 'abcde'
103
+ user.generate_access_token.should == 'abcde'
104
+ end
105
+ end
106
+
107
+ describe '#set_access_token' do
108
+ it 'sets access_token' do
109
+ user.set_access_token
110
+ user.access_token.should_not be_nil
111
+ end
112
+
113
+ context 'when User with same token already exists' do
114
+ let(:token) { 'duplicating' }
115
+ before do
116
+ User.create :access_token => token
117
+ end
118
+
119
+ it 'set again' do
120
+ user.stub(:generate_access_token).and_return token
121
+ user.should_receive(:generate_access_token).and_return token + 'a'
122
+ user.set_access_token
123
+ end
124
+ end
125
+ end
126
+ end
127
+
128
+ describe 'class with its own random string generator' do
129
+ it 'will use it instead of TokenAttribute#generate_random_string' do
130
+ coupon = Coupon.new
131
+ coupon.set_code
132
+ coupon.code.should == 'my code'
133
+ end
134
+ end
135
+ end
@@ -1,11 +1,11 @@
1
- require 'rubygems'
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+
2
3
  require File.expand_path('../../lib/token_attribute', __FILE__)
3
- require 'minitest/unit'
4
- require 'contest'
5
- require 'rr'
6
4
  require 'pry'
7
- require 'turn'
8
- Test::Unit::TestCase.send :include, RR::Adapters::TestUnit
5
+
6
+ RSpec.configure do |config|
7
+ config.order = "random"
8
+ end
9
9
 
10
10
  ActiveRecord::Base.configurations = {
11
11
  'test' => {
@@ -43,3 +43,7 @@ class CreateAllTables < ActiveRecord::Migration
43
43
  end
44
44
 
45
45
  CreateAllTables.up
46
+
47
+ def define_new_class_instance_for(klass, &block)
48
+ klass.dup.tap { |k| k.class_eval &block }
49
+ end
@@ -23,9 +23,7 @@ Gem::Specification.new do |s|
23
23
  s.add_dependency "activesupport", '>= 3.0.0'
24
24
  s.add_development_dependency "rake"
25
25
  s.add_development_dependency "sqlite3"
26
- s.add_development_dependency "minitest"
27
- s.add_development_dependency "contest"
28
- s.add_development_dependency "turn", '>= 0.8.3'
29
- s.add_development_dependency "rr"
26
+
27
+ s.add_development_dependency "rspec"
30
28
  s.add_development_dependency "pry"
31
29
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: token_attribute
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-19 00:00:00.000000000 Z
12
+ date: 2012-12-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -76,55 +76,7 @@ dependencies:
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
78
  - !ruby/object:Gem::Dependency
79
- name: minitest
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
94
- - !ruby/object:Gem::Dependency
95
- name: contest
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: turn
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: 0.8.3
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: 0.8.3
126
- - !ruby/object:Gem::Dependency
127
- name: rr
79
+ name: rspec
128
80
  requirement: !ruby/object:Gem::Requirement
129
81
  none: false
130
82
  requirements:
@@ -163,6 +115,7 @@ extensions: []
163
115
  extra_rdoc_files: []
164
116
  files:
165
117
  - .gitignore
118
+ - .rspec
166
119
  - .travis.yml
167
120
  - Gemfile
168
121
  - README.md
@@ -171,8 +124,8 @@ files:
171
124
  - TODO.md
172
125
  - lib/token_attribute.rb
173
126
  - lib/token_attribute/version.rb
174
- - test/lib/token_attribute_test.rb
175
- - test/test_helper.rb
127
+ - spec/lib/token_attribute_spec.rb
128
+ - spec/spec_helper.rb
176
129
  - token_attribute.gemspec
177
130
  homepage: https://github.com/fujimura/token_attribute
178
131
  licenses: []
@@ -199,6 +152,6 @@ signing_key:
199
152
  specification_version: 3
200
153
  summary: Small macro to generate unique random token attribute for ActiveRecord
201
154
  test_files:
202
- - test/lib/token_attribute_test.rb
203
- - test/test_helper.rb
155
+ - spec/lib/token_attribute_spec.rb
156
+ - spec/spec_helper.rb
204
157
  has_rdoc:
@@ -1,110 +0,0 @@
1
- require File.expand_path('../../test_helper', __FILE__)
2
-
3
- class TokenAttributeTest < Test::Unit::TestCase
4
-
5
- setup do
6
- @user = User.new
7
- end
8
-
9
- teardown do
10
- User.delete_all
11
- end
12
-
13
- describe '.token_attribute' do
14
- test 'can token_attribute-ize multiple attributes' do
15
- klass = User.dup
16
- klass.class_eval do
17
- include TokenAttribute
18
- token_attribute :download_ticket, :password_recovery
19
- end
20
- [:download_ticket, :password_recovery].each do |a|
21
- method_name = ('set_' + a.to_s).to_sym
22
- assert klass.new.methods.map(&:to_sym).include? method_name
23
- end
24
- end
25
-
26
- test 'can make attr_protected with option' do
27
- klass = User.dup
28
- klass.class_eval do
29
- include TokenAttribute
30
- token_attribute :download_ticket, :protected => true
31
- end
32
- assert klass.protected_attributes.include? :download_ticket
33
- end
34
-
35
- test 'can scope' do
36
- klass = User.dup
37
- klass.class_eval do
38
- include TokenAttribute
39
- token_attribute :download_ticket, :scope => :name
40
- before_save :set_download_ticket
41
- end
42
- one = klass.new :name => 'fujimura'
43
- two = klass.new :name => 'tanaka'
44
- [one, two].each {|u| stub(u).generate_download_ticket.once { 'a' } }
45
- [one, two].each {|u| u.save }
46
- assert one.download_ticket == two.download_ticket
47
- end
48
-
49
- describe 'Token length' do
50
- test '10 by default' do
51
- klass = User.dup
52
- klass.class_eval do
53
- include TokenAttribute
54
- token_attribute :download_ticket
55
- before_save :set_download_ticket
56
- end
57
- one = klass.new :name => 'fujimura'
58
- one.save
59
- assert_equal one.download_ticket.length, 10
60
- end
61
-
62
- test 'can be configured' do
63
- klass = User.dup
64
- klass.class_eval do
65
- include TokenAttribute
66
- token_attribute :download_ticket, :length => 8
67
- before_save :set_download_ticket
68
- end
69
- one = klass.new :name => 'fujimura'
70
- one.save
71
- assert_equal one.download_ticket.length, 8
72
- end
73
- end
74
- end
75
-
76
- context 'class with access_token as token_attribute' do
77
-
78
- describe '#generate_access_token' do
79
- test 'returns random string' do
80
- stub(SecureRandom).hex { 'abcde' }
81
- assert_equal @user.generate_access_token, 'abcde'
82
- end
83
- end
84
-
85
- describe '#set_access_token' do
86
- test 'sets access_token' do
87
- @user.set_access_token
88
- assert @user.access_token != nil
89
- end
90
-
91
- test 'set again if it duplicates' do
92
- dup = 'duplicating'
93
- User.create :access_token => dup
94
- uniq = 'notduplicating'
95
- mock(@user).generate_access_token.times(1) { dup }
96
- mock(@user).generate_access_token.times(1) { uniq }
97
- @user.set_access_token
98
- end
99
- end
100
-
101
- end
102
-
103
- describe 'class with its own random string generator' do
104
- test 'will use it instead of TokenAttribute#generate_random_string' do
105
- coupon = Coupon.new
106
- coupon.set_code
107
- assert coupon.code == 'my code'
108
- end
109
- end
110
- end