mongoid_token 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ script: "bundle exec rspec spec"
2
+ language: ruby
3
+ rvm:
4
+ - 1.9.3
5
+ gemfile:
6
+ - Gemfile
7
+ notifications:
8
+ recipients:
9
+ - nicholas@bruning.com.au
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 'autotest-growl'
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
+ [![Build Status](https://secure.travis-ci.org/thetron/mongoid_token.png)](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://bestwebappever.com/video/4dcfbb3c6a4f1d4c4a000012/edit
11
+ http://myawesomewebapp.com/video/4dcfbb3c6a4f1d4c4a000012/edit
10
12
 
11
13
  Into something more like this:
12
14
 
13
- http://bestwebappever.com/video/83xQ3r/edit
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
- # should validate token presence? Should this be enforced?
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 :save, :safety
36
- alias_method_chain :save!, :safety
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.first(:conditions => {field_name.to_sym => token})
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
- def save_with_safety(args = {}, &block)
57
+
58
+ def resolve_token_collisions
54
59
  retries = @max_collision_retries
55
60
  begin
56
- # puts "Attempt: #{retries}"
57
- safely.save_without_safety(args, &block)
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 save_with_safety!(args = {}, &block)
70
- retries = @max_collision_retries
71
- begin
72
- #puts "Attempt: #{retries}"
73
- safely.save_without_safety!(args, &block)
74
- rescue Mongo::OperationFailure => e
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
@@ -1,3 +1,3 @@
1
1
  module MongoidToken
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -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 'activesupport', '>= 3.0'
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
@@ -0,0 +1,8 @@
1
+ test:
2
+ sessions:
3
+ default:
4
+ database: mongoid_token_test
5
+ hosts:
6
+ - localhost:27017
7
+ options:
8
+ consistency: :strong
@@ -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.count(:conditions => {:token => @link.token}).should == 1
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.new(:name => "CLUSTER_001")
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.configure do |config|
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.0.0
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-02-08 00:00:00.000000000 Z
12
+ date: 2012-08-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: activesupport
16
- requirement: &2162530960 !ruby/object:Gem::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: *2162530960
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.7
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