pretty_id 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a7f1120896f3956cc8a5706975b38fcec7f4fdeb
4
- data.tar.gz: 8d816ca3e1a09fff5db1550088b87ce5e3343f8b
3
+ metadata.gz: 4b63bbfa09c064af3e67d8d99b8d371c29382341
4
+ data.tar.gz: 14a2cd3a898fa3fef57c5ea6b8e69e7562869c22
5
5
  SHA512:
6
- metadata.gz: d80a89411bee051f8fc265ea1dbe676a98f455f1c78d5b960a6d18449b5c6c724787f8784738b3385ca65909f547961a5359473c3769dba0f1db26b73e8dafad
7
- data.tar.gz: ab3657e910acdb234d8c1ba15c81ab6745c1d0d5823576ed6eafd745058143d53b2020d25addd7401638cb37fc66d3068b3beb7af1bcd253d874a70a4a0fea54
6
+ metadata.gz: 5eabd575be2823eb3b84e30cc6c41f264fa1cf2ec9bbe8cbf813e87721feb5b5f356c08d41393f6a9af1ddf50b89da1f145d012a4f251114eca4c8f027a3e205
7
+ data.tar.gz: a754a9a7ac417eba6bfbc8f47c92583417bc88e40fad35a0321626389a09a419716cba03af9e4071a7f791f6d3c44ba750139ed60aab2e5832d748a0836fe83b
data/README.md CHANGED
@@ -46,7 +46,8 @@ SecureRandom.urlsafe_base64(options[:length] / 1.333)
46
46
  class Book < ActiveRecord::Base
47
47
  has_pretty_id method: :urlsafe_base64, # default: :pretty
48
48
  column: :another_string_column, # default: :pretty_id
49
- length: 12 # default: 8
49
+ length: 12, # default: 8
50
+ uniq: false # default: true
50
51
  end
51
52
  ```
52
53
 
@@ -8,7 +8,8 @@ module PrettyId
8
8
  def has_pretty_id(options = {})
9
9
  default_options = {
10
10
  column: :pretty_id,
11
- method: :pretty
11
+ method: :pretty,
12
+ uniq: true
12
13
  }
13
14
 
14
15
  options = default_options.merge(options)
@@ -32,6 +33,7 @@ module PrettyId
32
33
  define_method(:"generate_#{options[:column]}") do
33
34
  new_pretty_id = loop do
34
35
  random_pretty_id = options[:generate_proc].call
36
+ break random_pretty_id if !options[:uniq]
35
37
  exists_hash = {}
36
38
  exists_hash[options[:column]] = random_pretty_id
37
39
  break random_pretty_id unless self.class.exists?(exists_hash)
@@ -1,3 +1,3 @@
1
1
  module PrettyId
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
@@ -5,6 +5,11 @@ class UserWithPrettyId < ActiveRecord::Base
5
5
  has_pretty_id
6
6
  end
7
7
 
8
+ class UserWithNonUniquePrettyId < ActiveRecord::Base
9
+ self.table_name = 'users'
10
+ has_pretty_id uniq: false
11
+ end
12
+
8
13
  class UserWithLongerPrettyId < ActiveRecord::Base
9
14
  self.table_name = 'users'
10
15
  has_pretty_id length: 16
@@ -25,6 +30,12 @@ class UserWithPrettyIdAlt < ActiveRecord::Base
25
30
  has_pretty_id column: :pretty_id_alt
26
31
  end
27
32
 
33
+ class UserWithTwoPrettyIds < ActiveRecord::Base
34
+ self.table_name = 'users'
35
+ has_pretty_id
36
+ has_pretty_id column: :pretty_id_alt
37
+ end
38
+
28
39
  describe PrettyId do
29
40
  it 'assigns before creation' do
30
41
  u = UserWithPrettyId.new
@@ -46,6 +57,12 @@ describe PrettyId do
46
57
  expect(u.pretty_id_alt).to be_present
47
58
  end
48
59
 
60
+ it 'fails on unknown method' do
61
+ expect {
62
+ UserWithPrettyId.send(:has_pretty_id, method: :foobar)
63
+ }.to raise_error(/Unknown \:method/)
64
+ end
65
+
49
66
  describe 'preventing duplicates' do
50
67
  before do
51
68
  UserWithPrettyId.stub(:exists?).and_return(true, false)
@@ -56,6 +73,18 @@ describe PrettyId do
56
73
  u = UserWithPrettyId.create
57
74
  expect(u.pretty_id).to eq 'cccccccc'
58
75
  end
76
+
77
+ context 'uniq = false' do
78
+ before do
79
+ UserWithNonUniquePrettyId.stub(:exists?).and_return(true, false)
80
+ UserWithNonUniquePrettyId.stub(:rand).and_return(1, 2)
81
+ end
82
+
83
+ it 'prevents duplicates' do
84
+ u = UserWithNonUniquePrettyId.create
85
+ expect(u.pretty_id).to eq 'bccccccc'
86
+ end
87
+ end
59
88
  end
60
89
 
61
90
  describe 'method = pretty' do
@@ -76,13 +105,13 @@ describe PrettyId do
76
105
  it 'assigns ~21 characters' do
77
106
  u = UserWithUrlsafeBase64PrettyId.new
78
107
  u.generate_pretty_id
79
- expect(u.pretty_id.length).to eq be_within(1).of(21)
108
+ expect(u.pretty_id.length).to be_within(1).of(21)
80
109
  end
81
110
 
82
111
  it 'assigns more characters' do
83
112
  u = UserWithLongerUrlsafeBase64PrettyId.new
84
113
  u.generate_pretty_id
85
- expect(u.pretty_id.length).to eq be_within(1).of(32)
114
+ expect(u.pretty_id.length).to be_within(1).of(32)
86
115
  end
87
116
  end
88
117
 
@@ -105,4 +134,24 @@ describe PrettyId do
105
134
  user.regenerate_pretty_id!
106
135
  end
107
136
  end
137
+
138
+ describe 'two pretty_ids' do
139
+ let(:user) { UserWithTwoPrettyIds.create }
140
+
141
+ it 'assigns both' do
142
+ expect(user.pretty_id).to be_present
143
+ expect(user.pretty_id_alt).to be_present
144
+ expect(user.pretty_id).to_not eq user.pretty_id_alt
145
+ end
146
+
147
+ it 'can regenerate one but not the other' do
148
+ expect {
149
+ user.regenerate_pretty_id
150
+ }.to change { user.pretty_id }
151
+
152
+ expect {
153
+ user.regenerate_pretty_id_alt
154
+ }.to_not change { user.pretty_id }
155
+ end
156
+ end
108
157
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pretty_id
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Becker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-23 00:00:00.000000000 Z
11
+ date: 2014-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -132,3 +132,4 @@ test_files:
132
132
  - spec/pretty_id_spec.rb
133
133
  - spec/setup.rb
134
134
  - spec/spec_helper.rb
135
+ has_rdoc: