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.
@@ -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: []