mongoid-autoinc 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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
@@ -0,0 +1,3 @@
1
+ module Mongoid::Autoinc
2
+ VERSION = "0.0.1"
3
+ end
@@ -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: []