mongoid-autoinc 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/README.rdoc +27 -3
  2. data/lib/autoinc.rb +24 -10
  3. metadata +14 -12
data/README.rdoc CHANGED
@@ -23,7 +23,7 @@ in class:
23
23
  field :name
24
24
  field :number, :type => Integer
25
25
 
26
- auto_increment :number
26
+ increments :number
27
27
  end
28
28
 
29
29
  user = User.create(:name => 'Dr. Percival "Perry" Ulysses Cox')
@@ -33,7 +33,6 @@ in class:
33
33
  another_user = User.create(:name => 'Bob Kelso')
34
34
  another_user.number # 2
35
35
 
36
-
37
36
  === Scopes
38
37
 
39
38
  You can scope on document fields. For example:
@@ -45,12 +44,37 @@ You can scope on document fields. For example:
45
44
  field :name
46
45
  field :number, :type => Integer
47
46
 
48
- auto_increment :number, :scope => :patient_id
47
+ increments :number, :scope => :patient_id
49
48
 
50
49
  belongs_to :patient
51
50
 
52
51
  end
53
52
 
53
+ === Custom Increment Trigger
54
+
55
+ You can trigger the assignment of an increment field manually by passing:
56
+ `:auto => false` to the increment field.
57
+ This allows for more flexible assignment of your increment number:
58
+
59
+ class Intern
60
+ include Mongoid::Document
61
+ include Mongoid::Autoinc
62
+
63
+ field :name
64
+ field :number
65
+
66
+ increments :number, :auto => false
67
+
68
+ after_save :assign_number_to_jd
69
+
70
+ protected
71
+
72
+ def assign_number_to_jd
73
+ assign!(:number) if number.blank? && name == 'J.D.'
74
+ end
75
+
76
+ end
77
+
54
78
  === Development
55
79
 
56
80
  $ gem install bundler (if you don't have it)
data/lib/autoinc.rb CHANGED
@@ -5,33 +5,47 @@ module Mongoid
5
5
  module Autoinc
6
6
  extend ActiveSupport::Concern
7
7
 
8
+ AlreadyAssignedError = Class.new(StandardError)
9
+ AutoIncrementsError = Class.new(StandardError)
10
+
8
11
  included do
9
12
  before_create :update_auto_increments
10
13
  end
11
14
 
12
15
  module ClassMethods
13
16
 
14
- def autoincrementing_fields
15
- @autoincrementing_fields ||= {}
17
+ def incrementing_fields
18
+ @incrementing_fields ||= {}
16
19
  end
17
20
 
18
- def auto_increment(field, options={})
19
- autoincrementing_fields[field] = options
21
+ def increments(field, options={})
22
+ incrementing_fields[field] = options.reverse_merge!(:auto => true)
23
+ attr_protected field
20
24
  end
21
25
 
22
26
  end
23
27
 
24
28
  module InstanceMethods
25
29
 
30
+ def assign!(field)
31
+ options = self.class.incrementing_fields[field]
32
+ raise AutoIncrementsError if options[:auto]
33
+ raise AlreadyAssignedError if send(field).present?
34
+ increment!(field, options)
35
+ end
36
+
26
37
  def update_auto_increments
27
- self.class.autoincrementing_fields.each do |autoincrementing_field, options|
28
- scope_key = options[:scope] ? send(options[:scope]) : nil
29
- write_attribute(
30
- autoincrementing_field.to_sym,
31
- Mongoid::Autoinc::Incrementor.new(self.class.name, autoincrementing_field, scope_key).inc
32
- )
38
+ self.class.incrementing_fields.each do |field, options|
39
+ increment!(field, options) if options[:auto]
33
40
  end
41
+ end
34
42
 
43
+ def increment!(field, options)
44
+ scope_key = options[:scope] ? send(options[:scope]) : nil
45
+ write_attribute(
46
+ field.to_sym,
47
+ Mongoid::Autoinc::Incrementor.new(self.class.name, field, scope_key).inc
48
+ )
35
49
  end
36
50
 
37
51
  end
metadata CHANGED
@@ -1,19 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-autoinc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Robert Beekman
9
+ - Steven Weller
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2012-01-17 00:00:00.000000000 Z
13
+ date: 2012-07-03 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: mongoid
16
- requirement: &2152146500 !ruby/object:Gem::Requirement
17
+ requirement: &2152268260 !ruby/object:Gem::Requirement
17
18
  none: false
18
19
  requirements:
19
20
  - - ! '>='
@@ -21,10 +22,10 @@ dependencies:
21
22
  version: '0'
22
23
  type: :runtime
23
24
  prerelease: false
24
- version_requirements: *2152146500
25
+ version_requirements: *2152268260
25
26
  - !ruby/object:Gem::Dependency
26
27
  name: bson_ext
27
- requirement: &2152139260 !ruby/object:Gem::Requirement
28
+ requirement: &2152267720 !ruby/object:Gem::Requirement
28
29
  none: false
29
30
  requirements:
30
31
  - - ! '>='
@@ -32,10 +33,10 @@ dependencies:
32
33
  version: '0'
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *2152139260
36
+ version_requirements: *2152267720
36
37
  - !ruby/object:Gem::Dependency
37
38
  name: rspec
38
- requirement: &2152138200 !ruby/object:Gem::Requirement
39
+ requirement: &2152267180 !ruby/object:Gem::Requirement
39
40
  none: false
40
41
  requirements:
41
42
  - - ! '>='
@@ -43,10 +44,10 @@ dependencies:
43
44
  version: '0'
44
45
  type: :runtime
45
46
  prerelease: false
46
- version_requirements: *2152138200
47
+ version_requirements: *2152267180
47
48
  - !ruby/object:Gem::Dependency
48
49
  name: activesupport
49
- requirement: &2152137260 !ruby/object:Gem::Requirement
50
+ requirement: &2152266400 !ruby/object:Gem::Requirement
50
51
  none: false
51
52
  requirements:
52
53
  - - ! '>='
@@ -54,10 +55,10 @@ dependencies:
54
55
  version: '0'
55
56
  type: :runtime
56
57
  prerelease: false
57
- version_requirements: *2152137260
58
+ version_requirements: *2152266400
58
59
  - !ruby/object:Gem::Dependency
59
60
  name: rake
60
- requirement: &2152136580 !ruby/object:Gem::Requirement
61
+ requirement: &2152265640 !ruby/object:Gem::Requirement
61
62
  none: false
62
63
  requirements:
63
64
  - - ! '>='
@@ -65,10 +66,11 @@ dependencies:
65
66
  version: '0'
66
67
  type: :runtime
67
68
  prerelease: false
68
- version_requirements: *2152136580
69
+ version_requirements: *2152265640
69
70
  description: Think auto incrementing field from MySQL for mongoid.
70
71
  email:
71
72
  - robert@80beans.com
73
+ - steven@80beans.com
72
74
  executables: []
73
75
  extensions: []
74
76
  extra_rdoc_files: []