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