mongoid-autoinc 0.0.1
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/README.rdoc +45 -0
- data/lib/autoinc.rb +44 -0
- data/lib/autoinc/version.rb +3 -0
- data/lib/incrementor.rb +39 -0
- metadata +104 -0
data/README.rdoc
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
= mongoid-autoinc
|
2
|
+
|
3
|
+
A mongoid plugin to add auto incrementing fields to your documents.
|
4
|
+
|
5
|
+
|
6
|
+
== Installation
|
7
|
+
|
8
|
+
in gemfile:
|
9
|
+
|
10
|
+
gem 'mongoid-autoinc'
|
11
|
+
|
12
|
+
in class:
|
13
|
+
|
14
|
+
require Mongoid::Autoinc
|
15
|
+
|
16
|
+
|
17
|
+
=== Usage
|
18
|
+
|
19
|
+
# app/models/movie.rb
|
20
|
+
class User
|
21
|
+
include MongoMapper::Autoinc
|
22
|
+
field :name
|
23
|
+
field :number, :type => Integer
|
24
|
+
|
25
|
+
auto_increment :number
|
26
|
+
end
|
27
|
+
|
28
|
+
== Usage
|
29
|
+
|
30
|
+
user = User.create(:name => 'Dr. Percival "Perry" Ulysses Cox')
|
31
|
+
user.id # BSON::ObjectId('4d1d150d30f2246bc6000001')
|
32
|
+
user.number # 1
|
33
|
+
|
34
|
+
another_user = User.create(:name => 'Bob Kelso')
|
35
|
+
another_user.number # 2
|
36
|
+
|
37
|
+
=== Development
|
38
|
+
|
39
|
+
$ gem install bundler (if you don't have it)
|
40
|
+
$ bundle install
|
41
|
+
$ bundle exec spec
|
42
|
+
|
43
|
+
== Copyright
|
44
|
+
|
45
|
+
See LICENSE for details
|
data/lib/autoinc.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'incrementor'
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
|
5
|
+
module Autoinc
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
before_create :update_auto_increments
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
|
14
|
+
def autoincrementing_fields
|
15
|
+
@autoincrementing_fields ||= []
|
16
|
+
end
|
17
|
+
|
18
|
+
def auto_increment(field)
|
19
|
+
if autoincrementing_fields
|
20
|
+
autoincrementing_fields<< field
|
21
|
+
else
|
22
|
+
autoincrementing_fields = [field]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
module InstanceMethods
|
29
|
+
|
30
|
+
def update_auto_increments
|
31
|
+
self.class.autoincrementing_fields.each do |autoincrementing_field|
|
32
|
+
write_attribute(
|
33
|
+
autoincrementing_field.to_sym,
|
34
|
+
Mongoid::Autoinc::Incrementor.new(self.class.name, autoincrementing_field).inc
|
35
|
+
)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
data/lib/incrementor.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# Based on http://ihswebdesign.com/blog/autoincrement-in-mongodb-with-ruby/
|
2
|
+
module Mongoid
|
3
|
+
|
4
|
+
module Autoinc
|
5
|
+
|
6
|
+
class Incrementor
|
7
|
+
attr_accessor :model_name, :field_name, :collection
|
8
|
+
|
9
|
+
def initialize(model_name, field_name)
|
10
|
+
self.model_name = model_name
|
11
|
+
self.field_name = field_name.to_s
|
12
|
+
|
13
|
+
self.collection = Mongoid.database['auto_increment_counters']
|
14
|
+
end
|
15
|
+
|
16
|
+
def key
|
17
|
+
"#{model_name.underscore}_#{field_name}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def ensuring_document(&block)
|
21
|
+
collection.insert('_id' => key, 'c' => 0) unless collection.count('_id' => key) > 0
|
22
|
+
yield
|
23
|
+
end
|
24
|
+
|
25
|
+
def inc
|
26
|
+
ensuring_document do
|
27
|
+
collection.find_and_modify(
|
28
|
+
'query' => { '_id' => key },
|
29
|
+
'update' => { '$inc' => { 'c' => 1 } },
|
30
|
+
'new' => true
|
31
|
+
)['c']
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
metadata
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongoid-autoinc
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Robert Beekman
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-01-09 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mongoid
|
16
|
+
requirement: &2152168460 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2152168460
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: bson_ext
|
27
|
+
requirement: &2152021200 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2152021200
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &2152020260 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2152020260
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: activesupport
|
49
|
+
requirement: &2152019320 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2152019320
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: rake
|
60
|
+
requirement: &2152018700 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2152018700
|
69
|
+
description: Think auto incrementing field from MySQL for mongoid.
|
70
|
+
email:
|
71
|
+
- robert@80beans.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- lib/autoinc/version.rb
|
77
|
+
- lib/autoinc.rb
|
78
|
+
- lib/incrementor.rb
|
79
|
+
- README.rdoc
|
80
|
+
homepage: https://github.com/80beans/mongoid-autoinc
|
81
|
+
licenses: []
|
82
|
+
post_install_message:
|
83
|
+
rdoc_options: []
|
84
|
+
require_paths:
|
85
|
+
- lib
|
86
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ! '>='
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
requirements: []
|
99
|
+
rubyforge_project:
|
100
|
+
rubygems_version: 1.8.10
|
101
|
+
signing_key:
|
102
|
+
specification_version: 3
|
103
|
+
summary: Add auto incrementing fields to mongoid documents
|
104
|
+
test_files: []
|