mongoid-sequence 0.0.3 → 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT LICENSE
2
+
3
+ Copyright (c) Gonçalo Silva <goncalossilva@gmail.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,62 @@
1
+ # Mongoid Sequence
2
+
3
+ Mongoid Sequence allows you to specify fields to behave like a sequence number (exactly like the "id" column in conventional SQL flavors).
4
+
5
+ ## Credits
6
+
7
+ This gem was inspired by a couple of gists by [masatomo](https://gist.github.com/730677) and [ShogunPanda](https://gist.github.com/1086265).
8
+
9
+ ## Usage
10
+
11
+ Include `Mongoid::Sequence` in your class and call `sequence(:field)`.
12
+
13
+ Like this:
14
+
15
+ ```ruby
16
+ class Sequenced
17
+ include Mongoid::Document
18
+ include Mongoid::Sequence
19
+
20
+ field :my_sequence, :type => Integer
21
+ sequence :my_sequence
22
+ end
23
+
24
+ s1 = Sequenced.create
25
+ s1.sequence #=> 1
26
+
27
+ s2 = Sequenced.create
28
+ s2.sequence #=> 2 # and so on
29
+ ```
30
+
31
+ It's also possible to make the `id` field behave like this:
32
+
33
+ ```ruby
34
+ class Sequenced
35
+ include Mongoid::Document
36
+ include Mongoid::Sequence
37
+
38
+ sequence :_id
39
+ end
40
+
41
+ s1 = Sequenced.create
42
+ s1.id #=> 1
43
+
44
+ s2 = Sequenced.create
45
+ s2.id #=> 2 # and so on
46
+ ```
47
+
48
+ ## Consistency
49
+
50
+ Mongoid::Sequence uses the atomic [findAndModify](http://www.mongodb.org/display/DOCS/findAndModify+Command) command, so you shouldn't have to worry about the sequence's consistency.
51
+
52
+ ## Installation
53
+
54
+ Just add it to your projects' `Gemfile`:
55
+
56
+ ```ruby
57
+ gem "mongoid-sequence"
58
+ ```
59
+
60
+ <hr/>
61
+
62
+ Copyright © 2010 Gonçalo Silva, released under the MIT license
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require "rake/testtask"
4
+
5
+ desc 'Default: run unit tests'
6
+ task :default => :test
7
+
8
+ desc 'Run tests'
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'lib'
11
+ t.libs << 'test'
12
+ t.pattern = 'test/**/*_test.rb'
13
+ t.verbose = true
14
+ end
@@ -1,5 +1,4 @@
1
- # encoding: utf-8
2
-
1
+ require "mongoid-sequence/version"
3
2
  require "active_support/concern"
4
3
 
5
4
  module Mongoid
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module Sequence
3
- VERSION = "0.0.3"
3
+ VERSION = "0.1"
4
4
  end
5
5
  end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/mongoid-sequence/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Gonçalo Silva"]
6
+ gem.email = ["goncalossilva@gmail.com"]
7
+ gem.description = %q{Mongoid::Sequence gives you the ability to specify fields to behave like a sequence number (exactly like the "id" column in conventional SQL flavors).}
8
+ gem.summary = %q{Specify fields to behave like a sequence number (exactly like the "id" column in conventional SQL flavors).}
9
+ gem.homepage = "https://github.com/goncalossilva/mongoid-sequence"
10
+
11
+ gem.add_dependency("mongoid", "~> 2.0")
12
+ gem.add_dependency("activesupport", "~> 3.1")
13
+ gem.add_development_dependency("rake", "~> 0.9")
14
+
15
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ gem.files = `git ls-files`.split("\n")
17
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ gem.name = "mongoid-sequence"
19
+ gem.require_paths = ["lib"]
20
+ gem.version = Mongoid::Sequence::VERSION
21
+ end
@@ -0,0 +1,35 @@
1
+ require "test_helper"
2
+
3
+ class SequenceTest < BaseTest
4
+ def test_single_sequence_consistency
5
+ n = 200
6
+
7
+ n.times do
8
+ FirstSequencedModel.create
9
+ end
10
+
11
+ assert_equal FirstSequencedModel.only(:auto_increment).map(&:auto_increment).sort, (1..n).to_a
12
+ end
13
+
14
+ def test_id_sequence_consistency
15
+ n = 200
16
+
17
+ n.times do
18
+ IdSequencedModel.create
19
+ end
20
+
21
+ assert_equal IdSequencedModel.only(:id).map(&:id).sort, (1..n).to_a
22
+ end
23
+
24
+ def test_double_sequence_consistency
25
+ n = 100
26
+
27
+ n.times do
28
+ FirstSequencedModel.create
29
+ SecondSequencedModel.create
30
+ end
31
+
32
+ assert_equal FirstSequencedModel.only(:auto_increment).map(&:auto_increment).sort, (1..n).to_a
33
+ assert_equal SecondSequencedModel.only(:auto_increment).map(&:auto_increment).sort, (1..n).to_a
34
+ end
35
+ end
@@ -0,0 +1,7 @@
1
+ class FirstSequencedModel
2
+ include Mongoid::Document
3
+ include Mongoid::Sequence
4
+
5
+ field :auto_increment, :type => Integer
6
+ sequence :auto_increment
7
+ end
@@ -0,0 +1,6 @@
1
+ class IdSequencedModel
2
+ include Mongoid::Document
3
+ include Mongoid::Sequence
4
+
5
+ sequence :_id
6
+ end
@@ -0,0 +1,8 @@
1
+ class ParanoiaSequencedModel
2
+ include Mongoid::Document
3
+ include Mongoid::Paranoia
4
+ include Mongoid::Sequence
5
+
6
+ field :auto_increment, :type => Integer
7
+ sequence :auto_increment
8
+ end
@@ -0,0 +1,7 @@
1
+ class SecondSequencedModel
2
+ include Mongoid::Document
3
+ include Mongoid::Sequence
4
+
5
+ field :auto_increment, :type => Integer
6
+ sequence :auto_increment
7
+ end
@@ -0,0 +1,21 @@
1
+ require "test_helper"
2
+
3
+ class ParanoiaTest < BaseTest
4
+ def test_paranoia_doesnt_affect_sequence
5
+ m1 = ParanoiaSequencedModel.create
6
+ m2 = ParanoiaSequencedModel.create
7
+
8
+ assert_equal m1.auto_increment, 1
9
+ assert_equal m2.auto_increment, 2
10
+
11
+ m2.destroy
12
+ m3 = ParanoiaSequencedModel.create
13
+
14
+ assert_equal m3.auto_increment, 3
15
+
16
+ m3.destroy!
17
+ m4 = ParanoiaSequencedModel.create
18
+
19
+ assert_equal m4.auto_increment, 4
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ require "bundler/setup"
2
+ require "test/unit"
3
+ require "mongoid"
4
+
5
+ require File.expand_path("../../lib/mongoid-sequence", __FILE__)
6
+
7
+ Mongoid.configure do |config|
8
+ name = "mongoid_sequence_test"
9
+ config.master = Mongo::Connection.new.db(name)
10
+ end
11
+
12
+ Dir["#{File.dirname(__FILE__)}/models/*.rb"].each { |f| require f }
13
+
14
+ class BaseTest < Test::Unit::TestCase
15
+ def test_default; end # Avoid "No tests were specified." on 1.8.7
16
+
17
+ def teardown
18
+ Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&:remove)
19
+ end
20
+ end
@@ -0,0 +1,35 @@
1
+ require "test_helper"
2
+
3
+ class UniquenessTest < BaseTest
4
+ def test_single_sequence_uniqueness
5
+ n = 200
6
+
7
+ n.times do
8
+ FirstSequencedModel.create
9
+ end
10
+
11
+ assert_equal FirstSequencedModel.only(:auto_increment).uniq.size, n
12
+ end
13
+
14
+ def test_id_sequence_uniqueness
15
+ n = 200
16
+
17
+ n.times do
18
+ IdSequencedModel.create
19
+ end
20
+
21
+ assert_equal IdSequencedModel.only(:id).uniq.size, n
22
+ end
23
+
24
+ def test_double_sequence_uniqueness
25
+ n = 100
26
+
27
+ n.times do
28
+ FirstSequencedModel.create
29
+ SecondSequencedModel.create
30
+ end
31
+
32
+ assert_equal FirstSequencedModel.only(:auto_increment).uniq.size, n
33
+ assert_equal SecondSequencedModel.only(:auto_increment).uniq.size, n
34
+ end
35
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-sequence
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: '0.1'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-22 00:00:00.000000000 Z
12
+ date: 2012-03-28 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid
16
- requirement: &70228566728440 !ruby/object:Gem::Requirement
16
+ requirement: &70183494887460 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '2.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70228566728440
24
+ version_requirements: *70183494887460
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activesupport
27
- requirement: &70228566726540 !ruby/object:Gem::Requirement
27
+ requirement: &70183494886960 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '3.1'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70228566726540
35
+ version_requirements: *70183494886960
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70228566725000 !ruby/object:Gem::Requirement
38
+ requirement: &70183494886500 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0.9'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70228566725000
46
+ version_requirements: *70183494886500
47
47
  description: Mongoid::Sequence gives you the ability to specify fields to behave like
48
48
  a sequence number (exactly like the "id" column in conventional SQL flavors).
49
49
  email:
@@ -52,8 +52,22 @@ executables: []
52
52
  extensions: []
53
53
  extra_rdoc_files: []
54
54
  files:
55
- - lib/mongoid/sequence.rb
56
- - lib/mongoid/sequence/version.rb
55
+ - .gitignore
56
+ - Gemfile
57
+ - LICENSE
58
+ - README.md
59
+ - Rakefile
60
+ - lib/mongoid-sequence.rb
61
+ - lib/mongoid-sequence/version.rb
62
+ - mongoid-sequence.gemspec
63
+ - test/consistency_test.rb
64
+ - test/models/first_sequenced_model.rb
65
+ - test/models/id_sequenced_model.rb
66
+ - test/models/paranoia_sequenced_model.rb
67
+ - test/models/second_sequenced_model.rb
68
+ - test/paranoia_test.rb
69
+ - test/test_helper.rb
70
+ - test/uniqueness_test.rb
57
71
  homepage: https://github.com/goncalossilva/mongoid-sequence
58
72
  licenses: []
59
73
  post_install_message:
@@ -66,23 +80,25 @@ required_ruby_version: !ruby/object:Gem::Requirement
66
80
  - - ! '>='
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
- segments:
70
- - 0
71
- hash: 1005219732954496832
72
83
  required_rubygems_version: !ruby/object:Gem::Requirement
73
84
  none: false
74
85
  requirements:
75
86
  - - ! '>='
76
87
  - !ruby/object:Gem::Version
77
88
  version: '0'
78
- segments:
79
- - 0
80
- hash: 1005219732954496832
81
89
  requirements: []
82
- rubyforge_project: ! '[none]'
90
+ rubyforge_project:
83
91
  rubygems_version: 1.8.17
84
92
  signing_key:
85
93
  specification_version: 3
86
94
  summary: Specify fields to behave like a sequence number (exactly like the "id" column
87
95
  in conventional SQL flavors).
88
- test_files: []
96
+ test_files:
97
+ - test/consistency_test.rb
98
+ - test/models/first_sequenced_model.rb
99
+ - test/models/id_sequenced_model.rb
100
+ - test/models/paranoia_sequenced_model.rb
101
+ - test/models/second_sequenced_model.rb
102
+ - test/paranoia_test.rb
103
+ - test/test_helper.rb
104
+ - test/uniqueness_test.rb