mongoo 0.5.6 → 0.5.7

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.6
1
+ 0.5.7
@@ -6,7 +6,7 @@ end
6
6
  # Mongoo.db = "mydb"
7
7
  # Mongoo.conn => #<Mongo::Connection:0x00000100db8ac0>
8
8
 
9
- module Mongoo
9
+ module Mongoo
10
10
  class << self
11
11
  attr_accessor :verbose_debug
12
12
 
@@ -37,6 +37,27 @@ module Mongoo
37
37
  end
38
38
  end
39
39
 
40
+ module Mongoo
41
+ class MongooException < RuntimeError; end
42
+
43
+ class AlreadyInsertedError < MongooException; end
44
+ class NotInsertedError < MongooException; end
45
+ class InsertError < MongooException; end
46
+ class StaleUpdateError < MongooException; end
47
+ class UpdateError < MongooException; end
48
+ class RemoveError < MongooException; end
49
+ class NotValidError < MongooException; end
50
+
51
+ class DbNameNotSet < MongooException; end
52
+ class ConnNotSet < MongooException; end
53
+
54
+ class DuplicateKeyError < MongooException; end
55
+ class ModifierUpdateError < MongooException; end
56
+ class UnknownAttributeError < MongooException; end
57
+ class InvalidAttributeValue < MongooException; end
58
+ class UnknownAttributeError < MongooException; end
59
+ end
60
+
40
61
  require "forwardable"
41
62
 
42
63
  require "active_support/core_ext"
@@ -1,12 +1,12 @@
1
1
  module Mongoo
2
- class InvalidAttributeValue < Exception; end
3
-
4
2
  class AttributeSanitizer
5
3
  class << self
6
4
  def sanitize(field_type, val)
7
5
  return val if val.nil? || field_type.nil?
8
6
 
9
7
  case field_type.to_sym
8
+ when :*
9
+ val
10
10
  when :string then
11
11
  val.is_a?(String) ? val : val.to_s
12
12
  when :symbol then
@@ -1,5 +1,3 @@
1
- class Mongoo::UnknownAttributeError < Exception; end
2
-
3
1
  module Mongoo::Attributes
4
2
  extend ActiveSupport::Concern
5
3
 
@@ -1,7 +1,4 @@
1
1
  module Mongoo
2
- class ModifierUpdateError < Exception; end
3
- class UnknownAttributeError < Exception; end
4
-
5
2
  class ModifierBuilder
6
3
  def initialize(opts, doc)
7
4
  @opts = opts
@@ -196,7 +193,13 @@ module Mongoo
196
193
  raise ModifierUpdateError, ret.inspect
197
194
  end
198
195
  end # if opts[:find_any_modify]
199
- end
196
+ rescue Mongo::OperationFailure => e
197
+ if e.message.to_s =~ /^11000\:/
198
+ raise Mongoo::DuplicateKeyError, e.message
199
+ else
200
+ raise e
201
+ end
202
+ end # run!
200
203
  end
201
204
 
202
205
  module Modifiers
@@ -1,15 +1,4 @@
1
1
  module Mongoo
2
- class AlreadyInsertedError < Exception; end
3
- class NotInsertedError < Exception; end
4
- class InsertError < Exception; end
5
- class StaleUpdateError < Exception; end
6
- class UpdateError < Exception; end
7
- class RemoveError < Exception; end
8
- class NotValidError < Exception; end
9
-
10
- class DbNameNotSet < Exception; end
11
- class ConnNotSet < Exception; end
12
-
13
2
  module Persistence
14
3
 
15
4
  class RawUpdate
@@ -231,6 +220,12 @@ module Mongoo
231
220
  end
232
221
  Mongoo::IdentityMap.write(self) if Mongoo::IdentityMap.on?
233
222
  ret
223
+ rescue Mongo::OperationFailure => e
224
+ if e.message.to_s =~ /^11000\:/
225
+ raise Mongoo::DuplicateKeyError, e.message
226
+ else
227
+ raise e
228
+ end
234
229
  end
235
230
 
236
231
  def insert!(opts={})
@@ -284,6 +279,12 @@ module Mongoo
284
279
  end
285
280
  end # if opts.delete(:find_and_modify)
286
281
  end
282
+ rescue Mongo::OperationFailure => e
283
+ if e.message.to_s =~ /^11000\:/
284
+ raise Mongoo::DuplicateKeyError, e.message
285
+ else
286
+ raise e
287
+ end
287
288
  end
288
289
 
289
290
  def update!(opts={})
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongoo}
8
- s.version = "0.5.6"
8
+ s.version = "0.5.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ben Myles"]
12
- s.date = %q{2011-06-20}
12
+ s.date = %q{2011-06-24}
13
13
  s.description = %q{Simple object mapper for MongoDB}
14
14
  s.email = %q{ben.myles@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -26,6 +26,13 @@ class SearchIndex < Mongoo::Base
26
26
  end
27
27
  end
28
28
 
29
+ class Contact < Mongoo::Base
30
+ describe do |o|
31
+ o.attribute "email", :type => :string
32
+ o.index "email", :unique => true
33
+ end
34
+ end
35
+
29
36
  class Person < Mongoo::Base
30
37
  describe do |d|
31
38
  d.attribute "name", :type => :string
@@ -3,7 +3,7 @@ require 'helper'
3
3
  class TestMongoo < Test::Unit::TestCase
4
4
 
5
5
  def setup
6
- [Person, TvShow, SearchIndex].each do |obj|
6
+ [Person, TvShow, SearchIndex, Contact].each do |obj|
7
7
  obj.drop
8
8
  obj.create_indexes
9
9
  end
@@ -488,5 +488,12 @@ class TestMongoo < Test::Unit::TestCase
488
488
  assert_equal ["skydiving", "coding", "reading", "swimming", "base jumping"], p.interests
489
489
  end
490
490
 
491
+ should "raise a specific error if a unique constraint is violated" do
492
+ c = Contact.new(email: "foo@bar.com")
493
+ assert c.insert!
494
+ c = Contact.new(email: "foo@bar.com")
495
+ assert_raise(Mongoo::DuplicateKeyError) { c.insert! }
496
+ end
497
+
491
498
  end
492
499
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.6
4
+ version: 0.5.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-06-20 00:00:00.000000000 -07:00
12
+ date: 2011-06-24 00:00:00.000000000 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: i18n
17
- requirement: &2151897000 !ruby/object:Gem::Requirement
17
+ requirement: &2152536040 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 0.4.1
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2151897000
25
+ version_requirements: *2152536040
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: activesupport
28
- requirement: &2151895180 !ruby/object:Gem::Requirement
28
+ requirement: &2152534700 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 3.0.3
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2151895180
36
+ version_requirements: *2152534700
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: activemodel
39
- requirement: &2151893580 !ruby/object:Gem::Requirement
39
+ requirement: &2152533160 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 3.0.3
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *2151893580
47
+ version_requirements: *2152533160
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: mongo
50
- requirement: &2151891620 !ruby/object:Gem::Requirement
50
+ requirement: &2152531560 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 1.3.1
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *2151891620
58
+ version_requirements: *2152531560
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: ruby-debug19
61
- requirement: &2151889100 !ruby/object:Gem::Requirement
61
+ requirement: &2152529860 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *2151889100
69
+ version_requirements: *2152529860
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: shoulda
72
- requirement: &2151887680 !ruby/object:Gem::Requirement
72
+ requirement: &2152528720 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *2151887680
80
+ version_requirements: *2152528720
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: bundler
83
- requirement: &2151885300 !ruby/object:Gem::Requirement
83
+ requirement: &2152527140 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ~>
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: 1.0.0
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *2151885300
91
+ version_requirements: *2152527140
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: jeweler
94
- requirement: &2151882720 !ruby/object:Gem::Requirement
94
+ requirement: &2152525820 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ~>
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: 1.5.1
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *2151882720
102
+ version_requirements: *2152525820
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: rcov
105
- requirement: &2151880160 !ruby/object:Gem::Requirement
105
+ requirement: &2152524720 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '0'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *2151880160
113
+ version_requirements: *2152524720
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: perftools.rb
116
- requirement: &2151877020 !ruby/object:Gem::Requirement
116
+ requirement: &2152523660 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ! '>='
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: '0'
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *2151877020
124
+ version_requirements: *2152523660
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: bson_ext
127
- requirement: &2151876040 !ruby/object:Gem::Requirement
127
+ requirement: &2152522400 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ~>
@@ -132,7 +132,7 @@ dependencies:
132
132
  version: 1.3.1
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *2151876040
135
+ version_requirements: *2152522400
136
136
  description: Simple object mapper for MongoDB
137
137
  email: ben.myles@gmail.com
138
138
  executables: []
@@ -197,7 +197,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
197
197
  version: '0'
198
198
  segments:
199
199
  - 0
200
- hash: -2464241099549832500
200
+ hash: 4291179620759477448
201
201
  required_rubygems_version: !ruby/object:Gem::Requirement
202
202
  none: false
203
203
  requirements: