mongomatic 0.4.1 → 0.5.0
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/lib/mongomatic/base.rb +7 -1
- data/lib/mongomatic/errors.rb +15 -0
- data/test/helper.rb +16 -3
- data/test/test_mongomatic.rb +73 -0
- metadata +4 -4
data/lib/mongomatic/base.rb
CHANGED
@@ -61,6 +61,12 @@ module Mongomatic
|
|
61
61
|
def count
|
62
62
|
find.count
|
63
63
|
end
|
64
|
+
|
65
|
+
def drop
|
66
|
+
self.send(:before_drop) if self.respond_to?(:before_drop)
|
67
|
+
collection.drop
|
68
|
+
self.send(:after_drop) if self.respond_to?(:after_drop)
|
69
|
+
end
|
64
70
|
end
|
65
71
|
|
66
72
|
attr_accessor :removed, :is_new, :errors
|
@@ -211,4 +217,4 @@ module Mongomatic
|
|
211
217
|
@doc = v
|
212
218
|
end
|
213
219
|
end
|
214
|
-
end
|
220
|
+
end
|
data/lib/mongomatic/errors.rb
CHANGED
@@ -3,5 +3,20 @@ module Mongomatic
|
|
3
3
|
def full_messages(sep=" ")
|
4
4
|
collect { |e| e.join(sep) }
|
5
5
|
end
|
6
|
+
|
7
|
+
def on(field, sep=" ")
|
8
|
+
ret = []
|
9
|
+
self.each do |err|
|
10
|
+
ret << err.join(sep) if err.first =~ /^#{field}/
|
11
|
+
end
|
12
|
+
case ret.size
|
13
|
+
when 0
|
14
|
+
nil
|
15
|
+
when 1
|
16
|
+
ret.first
|
17
|
+
else
|
18
|
+
ret
|
19
|
+
end
|
20
|
+
end
|
6
21
|
end
|
7
22
|
end
|
data/test/helper.rb
CHANGED
@@ -13,10 +13,23 @@ class Person < Mongomatic::Base
|
|
13
13
|
include Mongomatic::Expectations::Helper
|
14
14
|
attr_accessor :callback_tests
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
class << self
|
17
|
+
attr_accessor :class_callbacks
|
18
|
+
def create_indexes
|
19
|
+
collection.create_index("name", :unique => true)
|
20
|
+
end
|
21
|
+
|
22
|
+
def before_drop
|
23
|
+
self.class_callbacks ||= []
|
24
|
+
self.class_callbacks << :before_drop
|
25
|
+
end
|
26
|
+
|
27
|
+
def after_drop
|
28
|
+
self.class_callbacks ||= []
|
29
|
+
self.class_callbacks << :after_drop
|
30
|
+
end
|
18
31
|
end
|
19
|
-
|
32
|
+
|
20
33
|
def validate
|
21
34
|
self.errors << ["Name", "can't be empty"] if self["name"].blank?
|
22
35
|
end
|
data/test/test_mongomatic.rb
CHANGED
@@ -184,6 +184,9 @@ class TestMongomatic < Test::Unit::TestCase
|
|
184
184
|
p.callback_tests = []
|
185
185
|
p.remove
|
186
186
|
assert_equal [:before_remove, :after_remove], p.callback_tests
|
187
|
+
Person.class_callbacks = []
|
188
|
+
Person.drop
|
189
|
+
assert_equal [:before_drop, :after_drop], Person.class_callbacks
|
187
190
|
end
|
188
191
|
|
189
192
|
should "raise an error on unique index dup insert" do
|
@@ -447,4 +450,74 @@ class TestMongomatic < Test::Unit::TestCase
|
|
447
450
|
p.valid?
|
448
451
|
end
|
449
452
|
end
|
453
|
+
|
454
|
+
should "be able to drop a collection" do
|
455
|
+
p = Person.new
|
456
|
+
p['name'] = "Jordan"
|
457
|
+
p.insert
|
458
|
+
|
459
|
+
assert !Person.empty?
|
460
|
+
|
461
|
+
Person.drop
|
462
|
+
assert Person.empty?
|
463
|
+
end
|
464
|
+
|
465
|
+
should "be able to use errors.on with two part error messages" do
|
466
|
+
p = Person.new
|
467
|
+
class << p
|
468
|
+
def validate
|
469
|
+
expectations do
|
470
|
+
be_expected self['name'], ['name', 'cannot be empty']
|
471
|
+
be_of_length self['name'], ['name', 'must be at least 3 characters long'], :minimum => 3
|
472
|
+
be_a_number self['age'], ['age', 'must be a number']
|
473
|
+
end
|
474
|
+
end
|
475
|
+
end
|
476
|
+
|
477
|
+
p.valid?
|
478
|
+
assert_equal ['name cannot be empty', 'name must be at least 3 characters long'], p.errors.on(:name)
|
479
|
+
assert_equal 'age must be a number', p.errors.on('age')
|
480
|
+
|
481
|
+
p['name'] = 'Jo'
|
482
|
+
p['age'] = 21
|
483
|
+
|
484
|
+
p.valid?
|
485
|
+
assert_equal 'name must be at least 3 characters long', p.errors.on('name')
|
486
|
+
assert_nil p.errors.on(:age)
|
487
|
+
|
488
|
+
p['name'] = 'Jordan'
|
489
|
+
|
490
|
+
p.valid?
|
491
|
+
assert_nil p.errors.on(:name)
|
492
|
+
end
|
493
|
+
|
494
|
+
should "be able to use errors.on with one part error messages" do
|
495
|
+
p = Person.new
|
496
|
+
class << p
|
497
|
+
def validate
|
498
|
+
expectations do
|
499
|
+
be_expected self['name'], 'name cannot be empty'
|
500
|
+
be_of_length self['name'], 'name must be at least 3 characters long', :minimum => 3
|
501
|
+
be_a_number self['age'], 'age must be a number'
|
502
|
+
end
|
503
|
+
end
|
504
|
+
end
|
505
|
+
|
506
|
+
p.valid?
|
507
|
+
assert_equal ['name cannot be empty', 'name must be at least 3 characters long'], p.errors.on(:name)
|
508
|
+
assert_equal 'age must be a number', p.errors.on('age')
|
509
|
+
|
510
|
+
p['name'] = 'Jo'
|
511
|
+
p['age'] = 21
|
512
|
+
|
513
|
+
p.valid?
|
514
|
+
assert_equal 'name must be at least 3 characters long', p.errors.on('name')
|
515
|
+
assert_nil p.errors.on(:age)
|
516
|
+
|
517
|
+
p['name'] = 'Jordan'
|
518
|
+
|
519
|
+
p.valid?
|
520
|
+
assert_nil p.errors.on(:name)
|
521
|
+
end
|
522
|
+
|
450
523
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 5
|
8
|
+
- 0
|
9
|
+
version: 0.5.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ben Myles
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-08-
|
17
|
+
date: 2010-08-30 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|