token_attribute 0.1.0 → 0.1.1

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/.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