mongomatic 0.0.7 → 0.0.8
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 +14 -1
- data/lib/mongomatic/validatable/validatable_instance_methods.rb +4 -1
- data/test/helper.rb +52 -0
- data/test/test_mongomatic.rb +28 -0
- metadata +13 -4
data/lib/mongomatic/base.rb
CHANGED
@@ -89,21 +89,34 @@ module Mongomatic
|
|
89
89
|
|
90
90
|
def insert(opts={})
|
91
91
|
return false unless new? && valid?
|
92
|
+
self.send(:before_insert) if self.respond_to?(:before_insert)
|
93
|
+
self.send(:before_insert_or_update) if self.respond_to?(:before_insert_or_update)
|
92
94
|
if ret = self.class.collection.insert(@doc,opts)
|
93
95
|
@doc["_id"] = @doc.delete(:_id); ret
|
94
96
|
end
|
97
|
+
self.send(:after_insert) if self.respond_to?(:after_insert)
|
98
|
+
self.send(:after_insert_or_update) if self.respond_to?(:after_insert_or_update)
|
99
|
+
ret
|
95
100
|
end
|
96
101
|
|
97
102
|
def update(opts={},update_doc=@doc)
|
98
103
|
return false if new? || removed? || !valid?
|
99
|
-
self.
|
104
|
+
self.send(:before_update) if self.respond_to?(:before_update)
|
105
|
+
self.send(:before_insert_or_update) if self.respond_to?(:before_insert_or_update)
|
106
|
+
ret = self.class.collection.update({"_id" => @doc["_id"]}, update_doc, opts)
|
107
|
+
self.send(:after_update) if self.respond_to?(:after_update)
|
108
|
+
self.send(:after_insert_or_update) if self.respond_to?(:after_insert_or_update)
|
109
|
+
ret
|
100
110
|
end
|
101
111
|
|
102
112
|
def remove(opts={})
|
103
113
|
return false if new?
|
114
|
+
self.send(:before_remove) if self.respond_to?(:before_remove)
|
104
115
|
if ret = self.class.collection.remove({"_id" => @doc["_id"]})
|
105
116
|
self.removed = true; freeze; ret
|
106
117
|
end
|
118
|
+
self.send(:after_remove) if self.respond_to?(:after_remove)
|
119
|
+
ret
|
107
120
|
end
|
108
121
|
|
109
122
|
def to_hash
|
@@ -9,7 +9,10 @@ module Mongomatic
|
|
9
9
|
#
|
10
10
|
# Returns true if no errors were added otherwise false. Only executes validations that have no :groups option specified
|
11
11
|
def valid?
|
12
|
-
|
12
|
+
self.send(:before_validate) if self.respond_to?(:before_validate)
|
13
|
+
r = valid_for_group?(nil)
|
14
|
+
self.send(:after_validate) if self.respond_to?(:after_validate)
|
15
|
+
r
|
13
16
|
end
|
14
17
|
|
15
18
|
# call-seq: errors
|
data/test/helper.rb
CHANGED
@@ -11,6 +11,58 @@ Mongomatic.settings = { :connection => ["localhost", 27017, {}], :db => "mongoma
|
|
11
11
|
|
12
12
|
class Person < Mongomatic::Base
|
13
13
|
validates_presence_of :name
|
14
|
+
attr_accessor :callback_tests
|
15
|
+
|
16
|
+
def before_validate
|
17
|
+
self.callback_tests ||= []
|
18
|
+
self.callback_tests << :before_validate
|
19
|
+
end
|
20
|
+
|
21
|
+
def after_validate
|
22
|
+
self.callback_tests ||= []
|
23
|
+
self.callback_tests << :after_validate
|
24
|
+
end
|
25
|
+
|
26
|
+
def before_insert
|
27
|
+
self.callback_tests ||= []
|
28
|
+
self.callback_tests << :before_insert
|
29
|
+
end
|
30
|
+
|
31
|
+
def before_insert_or_update
|
32
|
+
self.callback_tests ||= []
|
33
|
+
self.callback_tests << :before_insert_or_update
|
34
|
+
end
|
35
|
+
|
36
|
+
def after_insert_or_update
|
37
|
+
self.callback_tests ||= []
|
38
|
+
self.callback_tests << :after_insert_or_update
|
39
|
+
end
|
40
|
+
|
41
|
+
def after_insert
|
42
|
+
self.callback_tests ||= []
|
43
|
+
self.callback_tests << :after_insert
|
44
|
+
end
|
45
|
+
|
46
|
+
def before_update
|
47
|
+
self.callback_tests ||= []
|
48
|
+
self.callback_tests << :before_update
|
49
|
+
end
|
50
|
+
|
51
|
+
def after_update
|
52
|
+
self.callback_tests ||= []
|
53
|
+
self.callback_tests << :after_update
|
54
|
+
end
|
55
|
+
|
56
|
+
def before_remove
|
57
|
+
self.callback_tests ||= []
|
58
|
+
self.callback_tests << :before_remove
|
59
|
+
end
|
60
|
+
|
61
|
+
def after_remove
|
62
|
+
self.callback_tests ||= []
|
63
|
+
self.callback_tests << :after_remove
|
64
|
+
end
|
65
|
+
|
14
66
|
end
|
15
67
|
|
16
68
|
class Test::Unit::TestCase
|
data/test/test_mongomatic.rb
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class TestMongomatic < Test::Unit::TestCase
|
4
|
+
should "work with enumerable methods" do
|
5
|
+
Person.collection.remove
|
6
|
+
p1 = Person.new(:name => "Ben1", :birth_year => 1984, :created_at => Time.now.utc, :admin => true)
|
7
|
+
p2 = Person.new(:name => "Ben2", :birth_year => 1986, :created_at => Time.now.utc, :admin => true)
|
8
|
+
assert p1.insert.is_a?(BSON::ObjectID)
|
9
|
+
assert p2.insert.is_a?(BSON::ObjectID)
|
10
|
+
assert_equal 2, Person.collection.count
|
11
|
+
assert_equal 2, Person.find.inject(0) { |sum, p| assert p.is_a?(Person); sum += 1 }
|
12
|
+
assert_equal p2, Person.find.max { |p1,p2| p1["birth_year"] <=> p2["birth_year"] }
|
13
|
+
end
|
14
|
+
|
4
15
|
should "be able to insert, update, remove documents" do
|
5
16
|
Person.collection.remove
|
6
17
|
|
@@ -98,4 +109,21 @@ class TestMongomatic < Test::Unit::TestCase
|
|
98
109
|
p = Person.find({"_id" => p["_id"]}).next
|
99
110
|
assert_equal 1986, p["birth_year"]
|
100
111
|
end
|
112
|
+
|
113
|
+
should "have callbacks" do
|
114
|
+
p = Person.new(:name => "Ben1", :birth_year => 1984, :created_at => Time.now.utc, :admin => true)
|
115
|
+
p.callback_tests = []
|
116
|
+
assert p.callback_tests.empty?
|
117
|
+
assert p.valid?
|
118
|
+
assert_equal [:before_validate, :after_validate], p.callback_tests
|
119
|
+
p.callback_tests = []
|
120
|
+
assert p.insert.is_a?(BSON::ObjectID)
|
121
|
+
assert_equal [:before_validate, :after_validate, :before_insert, :before_insert_or_update, :after_insert, :after_insert_or_update], p.callback_tests
|
122
|
+
p.callback_tests = []
|
123
|
+
p.update
|
124
|
+
assert_equal [:before_validate, :after_validate, :before_update, :before_insert_or_update, :after_update, :after_insert_or_update], p.callback_tests
|
125
|
+
p.callback_tests = []
|
126
|
+
p.remove
|
127
|
+
assert_equal [:before_remove, :after_remove], p.callback_tests
|
128
|
+
end
|
101
129
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 8
|
9
|
+
version: 0.0.8
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ben Myles
|
@@ -14,13 +14,14 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-08-06 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: shoulda
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
24
25
|
requirements:
|
25
26
|
- - ">="
|
26
27
|
- !ruby/object:Gem::Version
|
@@ -35,6 +36,7 @@ dependencies:
|
|
35
36
|
name: bson
|
36
37
|
prerelease: false
|
37
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
38
40
|
requirements:
|
39
41
|
- - "="
|
40
42
|
- !ruby/object:Gem::Version
|
@@ -49,6 +51,7 @@ dependencies:
|
|
49
51
|
name: bson_ext
|
50
52
|
prerelease: false
|
51
53
|
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
52
55
|
requirements:
|
53
56
|
- - "="
|
54
57
|
- !ruby/object:Gem::Version
|
@@ -63,6 +66,7 @@ dependencies:
|
|
63
66
|
name: mongo
|
64
67
|
prerelease: false
|
65
68
|
requirement: &id004 !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
66
70
|
requirements:
|
67
71
|
- - "="
|
68
72
|
- !ruby/object:Gem::Version
|
@@ -77,6 +81,7 @@ dependencies:
|
|
77
81
|
name: activesupport
|
78
82
|
prerelease: false
|
79
83
|
requirement: &id005 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
80
85
|
requirements:
|
81
86
|
- - ">="
|
82
87
|
- !ruby/object:Gem::Version
|
@@ -125,6 +130,8 @@ files:
|
|
125
130
|
- lib/mongomatic/validatable/validations/validation_base.rb
|
126
131
|
- LICENSE
|
127
132
|
- README.rdoc
|
133
|
+
- test/helper.rb
|
134
|
+
- test/test_mongomatic.rb
|
128
135
|
has_rdoc: true
|
129
136
|
homepage: http://github.com/benmyles/mongomatic
|
130
137
|
licenses: []
|
@@ -135,6 +142,7 @@ rdoc_options:
|
|
135
142
|
require_paths:
|
136
143
|
- lib
|
137
144
|
required_ruby_version: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
138
146
|
requirements:
|
139
147
|
- - ">="
|
140
148
|
- !ruby/object:Gem::Version
|
@@ -142,6 +150,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
142
150
|
- 0
|
143
151
|
version: "0"
|
144
152
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
145
154
|
requirements:
|
146
155
|
- - ">="
|
147
156
|
- !ruby/object:Gem::Version
|
@@ -151,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
151
160
|
requirements: []
|
152
161
|
|
153
162
|
rubyforge_project:
|
154
|
-
rubygems_version: 1.3.
|
163
|
+
rubygems_version: 1.3.7
|
155
164
|
signing_key:
|
156
165
|
specification_version: 3
|
157
166
|
summary: Mongomatic is a simple Ruby object mapper for Mongo
|