mongoid_token 1.0.0 → 1.1.0
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/.travis.yml +9 -0
- data/Gemfile +1 -7
- data/README.md +4 -2
- data/lib/mongoid_token.rb +19 -24
- data/lib/version.rb +1 -1
- data/mongoid_token.gemspec +1 -1
- data/spec/mongoid.yml +8 -0
- data/spec/mongoid/token_spec.rb +16 -11
- data/spec/spec_helper.rb +4 -12
- metadata +10 -7
data/.travis.yml
ADDED
data/Gemfile
CHANGED
@@ -1,15 +1,9 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
-
# Specify your gem's dependencies in mongoid_token.gemspec
|
4
3
|
gemspec
|
5
4
|
|
6
5
|
group :test do
|
7
|
-
gem 'activesupport', '~> 3.0'
|
8
6
|
gem 'database_cleaner'
|
9
|
-
gem 'rspec', '2.5.0'
|
10
7
|
gem 'autotest'
|
11
|
-
gem '
|
12
|
-
gem 'mongoid', '2.0.0'
|
13
|
-
gem 'bson_ext'
|
14
|
-
gem 'mongoid-rspec'
|
8
|
+
gem 'mongoid-rspec', '1.5.1'
|
15
9
|
end
|
data/README.md
CHANGED
@@ -1,16 +1,18 @@
|
|
1
1
|
# Mongoid::Token - Short snappy tokens for Mongoid documents
|
2
2
|
|
3
|
+
[](http://travis-ci.org/thetron/mongoid_token)
|
4
|
+
|
3
5
|
This library is a quick and simple way to generate unique, random tokens
|
4
6
|
for your mongoid documents, in the cases where you can't, or don't want
|
5
7
|
to use slugs, or the default MongoDB IDs.
|
6
8
|
|
7
9
|
Mongoid::Token can help turn this:
|
8
10
|
|
9
|
-
http://
|
11
|
+
http://myawesomewebapp.com/video/4dcfbb3c6a4f1d4c4a000012/edit
|
10
12
|
|
11
13
|
Into something more like this:
|
12
14
|
|
13
|
-
http://
|
15
|
+
http://myawesomewebapp.com/video/83xQ3r/edit
|
14
16
|
|
15
17
|
|
16
18
|
## Getting started
|
data/lib/mongoid_token.rb
CHANGED
@@ -11,10 +11,14 @@ module Mongoid
|
|
11
11
|
options[:retry] ||= 3
|
12
12
|
options[:contains] ||= :alphanumeric
|
13
13
|
options[:field_name] ||= :token
|
14
|
+
#options[:key] ||= false
|
14
15
|
|
15
16
|
self.field options[:field_name].to_sym, :type => String
|
16
|
-
self.index options[:field_name].to_sym, :unique => true
|
17
|
-
|
17
|
+
self.index({ options[:field_name].to_sym => 1 }, { :unique => true })
|
18
|
+
|
19
|
+
#if options[:key]
|
20
|
+
# self.key options[:field_name].to_sym
|
21
|
+
#end
|
18
22
|
|
19
23
|
set_callback(:create, :before) do |document|
|
20
24
|
document.create_token(options[:length], options[:contains])
|
@@ -32,8 +36,8 @@ module Mongoid
|
|
32
36
|
end
|
33
37
|
|
34
38
|
if options[:retry] > 0
|
35
|
-
alias_method_chain :
|
36
|
-
alias_method_chain :
|
39
|
+
alias_method_chain :insert, :safety
|
40
|
+
alias_method_chain :upsert, :safety
|
37
41
|
end
|
38
42
|
|
39
43
|
self.class_variable_set :@@token_field_name, options[:field_name]
|
@@ -41,7 +45,7 @@ module Mongoid
|
|
41
45
|
|
42
46
|
def find_by_token(token)
|
43
47
|
field_name = self.class_variable_get :@@token_field_name
|
44
|
-
self.
|
48
|
+
self.find_by(field_name.to_sym => token)
|
45
49
|
end
|
46
50
|
end
|
47
51
|
|
@@ -50,12 +54,12 @@ module Mongoid
|
|
50
54
|
end
|
51
55
|
|
52
56
|
protected
|
53
|
-
|
57
|
+
|
58
|
+
def resolve_token_collisions
|
54
59
|
retries = @max_collision_retries
|
55
60
|
begin
|
56
|
-
|
57
|
-
|
58
|
-
rescue Mongo::OperationFailure => e
|
61
|
+
yield
|
62
|
+
rescue Moped::Errors::OperationFailure => e
|
59
63
|
if (retries -= 1) > 0
|
60
64
|
self.create_token(@token_length, @token_contains)
|
61
65
|
retry
|
@@ -66,25 +70,16 @@ module Mongoid
|
|
66
70
|
end
|
67
71
|
end
|
68
72
|
|
69
|
-
def
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
if (retries -= 1) > 0
|
76
|
-
self.create_token(@token_length, @token_contains)
|
77
|
-
retry
|
78
|
-
else
|
79
|
-
Rails.logger.warn "[Mongoid::Token] Warning: Maximum to generation retries (#{@max_collision_retries}) exceeded." if defined?(Rails) && Rails.env == 'development'
|
80
|
-
raise Mongoid::Token::CollisionRetriesExceeded.new(self, @max_collision_retries)
|
81
|
-
end
|
82
|
-
end
|
73
|
+
def insert_with_safety(options = {})
|
74
|
+
resolve_token_collisions { with(:safe => true).insert_without_safety(options) }
|
75
|
+
end
|
76
|
+
|
77
|
+
def upsert_with_safety(options = {})
|
78
|
+
resolve_token_collisions { with(:safe => true).upsert_without_safety(options) }
|
83
79
|
end
|
84
80
|
|
85
81
|
def create_token(length, characters)
|
86
82
|
self.send(:"#{@token_field_name}=", self.generate_token(length, characters))
|
87
|
-
#puts "Set #{@token_field_name.to_s} to #{self.send(@token_field_name.to_sym)}"
|
88
83
|
end
|
89
84
|
|
90
85
|
def create_token_if_nil(length, characters)
|
data/lib/version.rb
CHANGED
data/mongoid_token.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.description = %q{Mongoid token is a gem for creating random, unique tokens for mongoid documents. Highly configurable and great for making URLs a little more compact.}
|
14
14
|
|
15
15
|
s.rubyforge_project = "mongoid_token"
|
16
|
-
s.add_dependency '
|
16
|
+
s.add_dependency 'mongoid', '~> 3.0'
|
17
17
|
|
18
18
|
s.files = `git ls-files`.split("\n")
|
19
19
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/spec/mongoid.yml
ADDED
data/spec/mongoid/token_spec.rb
CHANGED
@@ -84,7 +84,7 @@ describe Mongoid::Token do
|
|
84
84
|
Link.create_indexes
|
85
85
|
1000.times do
|
86
86
|
@link = Link.create(:url => "http://involved.com.au")
|
87
|
-
Link.
|
87
|
+
Link.where(:token => @link.token).count.should == 1
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
@@ -150,33 +150,38 @@ describe Mongoid::Token do
|
|
150
150
|
Link.create_indexes
|
151
151
|
|
152
152
|
@first_link = Link.create(:url => "http://involved.com.au")
|
153
|
+
Link.any_instance.stub(:generate_token).and_return(@first_link.token)
|
153
154
|
@link = Link.new(:url => "http://fail.com")
|
154
|
-
def @link.create_token(l,c) # override to always generate a duplicate
|
155
|
-
super
|
156
|
-
self.token = Link.first.token
|
157
|
-
end
|
158
155
|
|
159
|
-
lambda{ @link.save }.should raise_error(Mongoid::Token::CollisionRetriesExceeded)
|
156
|
+
#lambda{ @link.save! }.should raise_error(Mongoid::Token::CollisionRetriesExceeded)
|
157
|
+
expect { @link.save! }.to raise_error(Mongoid::Token::CollisionRetriesExceeded)
|
158
|
+
|
160
159
|
Link.count.should == 1
|
161
160
|
Link.where(:token => @first_link.token).count.should == 1
|
162
161
|
end
|
163
162
|
|
163
|
+
it "tries to resolve collisions when instantiated with create!" do
|
164
|
+
link = Link.create!(url: "http://example.com/1")
|
165
|
+
|
166
|
+
Link.any_instance.stub(:generate_token).and_return(link.token)
|
167
|
+
|
168
|
+
expect { Link.create!(url: "http://example.com/2") }
|
169
|
+
.to raise_error(Mongoid::Token::CollisionRetriesExceeded)
|
170
|
+
end
|
171
|
+
|
164
172
|
it "should not raise a custom exception if retries are set to zero" do
|
165
173
|
FailLink.destroy_all
|
166
174
|
FailLink.create_indexes
|
167
175
|
|
168
176
|
@first_link = FailLink.create(:url => "http://involved.com.au")
|
177
|
+
Link.any_instance.stub(:generate_token).and_return(@first_link.token)
|
169
178
|
@link = FailLink.new(:url => "http://fail.com")
|
170
|
-
def @link.create_token(l,c) # override to always generate a duplicate
|
171
|
-
super
|
172
|
-
self.token = FailLink.first.token
|
173
|
-
end
|
174
179
|
|
175
180
|
lambda{ @link.save }.should_not raise_error(Mongoid::Token::CollisionRetriesExceeded)
|
176
181
|
end
|
177
182
|
|
178
183
|
it "should create unique indexes on embedded documents" do
|
179
|
-
@cluster = Cluster.
|
184
|
+
@cluster = Cluster.create(:name => "CLUSTER_001")
|
180
185
|
5.times do |index|
|
181
186
|
@cluster.nodes.create!(:name => "NODE_#{index.to_s.rjust(3, '0')}")
|
182
187
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -6,6 +6,8 @@ require 'mongoid-rspec'
|
|
6
6
|
require 'mongoid_token'
|
7
7
|
require 'mongoid/token/exceptions'
|
8
8
|
|
9
|
+
ENV['MONGOID_ENV'] = "test"
|
10
|
+
|
9
11
|
RSpec.configure do |config|
|
10
12
|
config.include Mongoid::Matchers
|
11
13
|
config.before(:suite) do
|
@@ -14,18 +16,8 @@ RSpec.configure do |config|
|
|
14
16
|
|
15
17
|
config.after(:each) do
|
16
18
|
DatabaseCleaner.clean
|
17
|
-
|
18
|
-
# Added dropping collection to ensure indexes are removed
|
19
|
-
Mongoid.master.collections.select do |collection|
|
20
|
-
include = collection.name !~ /system/
|
21
|
-
include
|
22
|
-
end.each(&:drop)
|
19
|
+
Mongoid.purge!
|
23
20
|
end
|
24
21
|
end
|
25
22
|
|
26
|
-
Mongoid.
|
27
|
-
config.master = Mongo::Connection.new.db("mongoid_token_test")
|
28
|
-
config.autocreate_indexes = true
|
29
|
-
config.persist_in_safe_mode = true
|
30
|
-
end
|
31
|
-
|
23
|
+
Mongoid.load!( File.join(File.dirname(__FILE__), 'mongoid.yml') )
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_token
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,19 +9,19 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: &
|
15
|
+
name: mongoid
|
16
|
+
requirement: &70226827473880 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70226827473880
|
25
25
|
description: Mongoid token is a gem for creating random, unique tokens for mongoid
|
26
26
|
documents. Highly configurable and great for making URLs a little more compact.
|
27
27
|
email:
|
@@ -33,6 +33,7 @@ files:
|
|
33
33
|
- .autotest
|
34
34
|
- .gitignore
|
35
35
|
- .rspec
|
36
|
+
- .travis.yml
|
36
37
|
- Gemfile
|
37
38
|
- README.md
|
38
39
|
- Rakefile
|
@@ -41,6 +42,7 @@ files:
|
|
41
42
|
- lib/mongoid_token.rb
|
42
43
|
- lib/version.rb
|
43
44
|
- mongoid_token.gemspec
|
45
|
+
- spec/mongoid.yml
|
44
46
|
- spec/mongoid/token_spec.rb
|
45
47
|
- spec/spec_helper.rb
|
46
48
|
homepage: http://github.com/thetron/mongoid_token
|
@@ -63,10 +65,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
65
|
version: '0'
|
64
66
|
requirements: []
|
65
67
|
rubyforge_project: mongoid_token
|
66
|
-
rubygems_version: 1.8.
|
68
|
+
rubygems_version: 1.8.15
|
67
69
|
signing_key:
|
68
70
|
specification_version: 3
|
69
71
|
summary: A little random, unique token generator for Mongoid documents.
|
70
72
|
test_files:
|
73
|
+
- spec/mongoid.yml
|
71
74
|
- spec/mongoid/token_spec.rb
|
72
75
|
- spec/spec_helper.rb
|