djsun-mongo_mapper 0.5.4.1 → 0.5.5.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -11,12 +11,14 @@ begin
11
11
  gem.authors = ["John Nunemaker"]
12
12
  gem.rubyforge_project = "mongomapper"
13
13
 
14
- gem.add_dependency('activesupport')
14
+ gem.add_dependency('activesupport', '>= 2.3')
15
15
  gem.add_dependency('mongo', '0.15.1')
16
16
  gem.add_dependency('jnunemaker-validatable', '1.7.4')
17
17
 
18
- gem.add_development_dependency('mocha', '0.9.4')
19
18
  gem.add_development_dependency('jnunemaker-matchy', '0.4.0')
19
+ gem.add_development_dependency('shoulda', '2.10.2')
20
+ gem.add_development_dependency('timecop', '0.3.1')
21
+ gem.add_development_dependency('mocha', '0.9.4')
20
22
  end
21
23
 
22
24
  Jeweler::RubyforgeTasks.new do |rubyforge|
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.4.1
1
+ 0.5.5.2
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{djsun-mongo_mapper}
8
- s.version = "0.5.4.1"
8
+ s.version = "0.5.5.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["John Nunemaker"]
12
- s.date = %q{2009-10-12}
12
+ s.date = %q{2009-10-16}
13
13
  s.default_executable = %q{mmconsole}
14
14
  s.email = %q{nunemaker@gmail.com}
15
15
  s.executables = ["mmconsole"]
@@ -48,7 +48,6 @@ Gem::Specification.new do |s|
48
48
  "lib/mongo_mapper/pagination.rb",
49
49
  "lib/mongo_mapper/rails_compatibility/document.rb",
50
50
  "lib/mongo_mapper/rails_compatibility/embedded_document.rb",
51
- "lib/mongo_mapper/save_with_validation.rb",
52
51
  "lib/mongo_mapper/serialization.rb",
53
52
  "lib/mongo_mapper/serializers/json_serializer.rb",
54
53
  "lib/mongo_mapper/support.rb",
@@ -56,7 +55,6 @@ Gem::Specification.new do |s|
56
55
  "mongo_mapper.gemspec",
57
56
  "specs.watchr",
58
57
  "test/NOTE_ON_TESTING",
59
- "test/custom_matchers.rb",
60
58
  "test/functional/associations/test_belongs_to_polymorphic_proxy.rb",
61
59
  "test/functional/associations/test_belongs_to_proxy.rb",
62
60
  "test/functional/associations/test_many_documents_as_proxy.rb",
@@ -64,6 +62,7 @@ Gem::Specification.new do |s|
64
62
  "test/functional/associations/test_many_embedded_proxy.rb",
65
63
  "test/functional/associations/test_many_polymorphic_proxy.rb",
66
64
  "test/functional/associations/test_many_proxy.rb",
65
+ "test/functional/associations/test_namespace.rb",
67
66
  "test/functional/test_associations.rb",
68
67
  "test/functional/test_binary.rb",
69
68
  "test/functional/test_callbacks.rb",
@@ -75,6 +74,8 @@ Gem::Specification.new do |s|
75
74
  "test/functional/test_rails_compatibility.rb",
76
75
  "test/functional/test_validations.rb",
77
76
  "test/models.rb",
77
+ "test/support/custom_matchers.rb",
78
+ "test/support/test_timing.rb",
78
79
  "test/test_helper.rb",
79
80
  "test/unit/serializers/test_json_serializer.rb",
80
81
  "test/unit/test_association_base.rb",
@@ -99,14 +100,14 @@ Gem::Specification.new do |s|
99
100
  s.rubygems_version = %q{1.3.5}
100
101
  s.summary = %q{Awesome gem for modeling your domain and storing it in mongo}
101
102
  s.test_files = [
102
- "test/custom_matchers.rb",
103
- "test/functional/associations/test_belongs_to_polymorphic_proxy.rb",
103
+ "test/functional/associations/test_belongs_to_polymorphic_proxy.rb",
104
104
  "test/functional/associations/test_belongs_to_proxy.rb",
105
105
  "test/functional/associations/test_many_documents_as_proxy.rb",
106
106
  "test/functional/associations/test_many_embedded_polymorphic_proxy.rb",
107
107
  "test/functional/associations/test_many_embedded_proxy.rb",
108
108
  "test/functional/associations/test_many_polymorphic_proxy.rb",
109
109
  "test/functional/associations/test_many_proxy.rb",
110
+ "test/functional/associations/test_namespace.rb",
110
111
  "test/functional/test_associations.rb",
111
112
  "test/functional/test_binary.rb",
112
113
  "test/functional/test_callbacks.rb",
@@ -118,6 +119,8 @@ Gem::Specification.new do |s|
118
119
  "test/functional/test_rails_compatibility.rb",
119
120
  "test/functional/test_validations.rb",
120
121
  "test/models.rb",
122
+ "test/support/custom_matchers.rb",
123
+ "test/support/test_timing.rb",
121
124
  "test/test_helper.rb",
122
125
  "test/unit/serializers/test_json_serializer.rb",
123
126
  "test/unit/test_association_base.rb",
@@ -141,23 +144,29 @@ Gem::Specification.new do |s|
141
144
  s.specification_version = 3
142
145
 
143
146
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
144
- s.add_runtime_dependency(%q<activesupport>, [">= 0"])
147
+ s.add_runtime_dependency(%q<activesupport>, [">= 2.3"])
145
148
  s.add_runtime_dependency(%q<mongo>, ["= 0.15.1"])
146
149
  s.add_runtime_dependency(%q<jnunemaker-validatable>, ["= 1.7.4"])
147
- s.add_development_dependency(%q<mocha>, ["= 0.9.4"])
148
150
  s.add_development_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
151
+ s.add_development_dependency(%q<shoulda>, ["= 2.10.2"])
152
+ s.add_development_dependency(%q<timecop>, ["= 0.3.1"])
153
+ s.add_development_dependency(%q<mocha>, ["= 0.9.4"])
149
154
  else
150
- s.add_dependency(%q<activesupport>, [">= 0"])
155
+ s.add_dependency(%q<activesupport>, [">= 2.3"])
151
156
  s.add_dependency(%q<mongo>, ["= 0.15.1"])
152
157
  s.add_dependency(%q<jnunemaker-validatable>, ["= 1.7.4"])
153
- s.add_dependency(%q<mocha>, ["= 0.9.4"])
154
158
  s.add_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
159
+ s.add_dependency(%q<shoulda>, ["= 2.10.2"])
160
+ s.add_dependency(%q<timecop>, ["= 0.3.1"])
161
+ s.add_dependency(%q<mocha>, ["= 0.9.4"])
155
162
  end
156
163
  else
157
- s.add_dependency(%q<activesupport>, [">= 0"])
164
+ s.add_dependency(%q<activesupport>, [">= 2.3"])
158
165
  s.add_dependency(%q<mongo>, ["= 0.15.1"])
159
166
  s.add_dependency(%q<jnunemaker-validatable>, ["= 1.7.4"])
160
- s.add_dependency(%q<mocha>, ["= 0.9.4"])
161
167
  s.add_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
168
+ s.add_dependency(%q<shoulda>, ["= 2.10.2"])
169
+ s.add_dependency(%q<timecop>, ["= 0.3.1"])
170
+ s.add_dependency(%q<mocha>, ["= 0.9.4"])
162
171
  end
163
172
  end
@@ -1,3 +1,32 @@
1
+ module ConstantHelper
2
+ def self.lookup(class_name, scope)
3
+ if namespaced?(class_name)
4
+ class_name.constantize
5
+ else
6
+ lookup_in_parent(class_name, scope)
7
+ end
8
+ end
9
+
10
+ def self.namespaced?(class_name)
11
+ class_name.include?("::")
12
+ end
13
+
14
+ def self.lookup_in_parent(class_name, scope)
15
+ parent = parent_scope(scope)
16
+ return nil unless parent.const_defined?(class_name)
17
+ parent.const_get(class_name)
18
+ end
19
+
20
+ def self.parent_scope(scope)
21
+ chain = scope.to_s.split("::")[0 ... -1]
22
+ chain.reduce(Object) { |m, o| m.const_get(o) }
23
+ end
24
+
25
+ def self.leaf(constant_name)
26
+ constant_name.split("::").last
27
+ end
28
+ end
29
+
1
30
  module MongoMapper
2
31
  module Associations
3
32
  class Base
@@ -18,9 +47,9 @@ module MongoMapper
18
47
  end
19
48
  end
20
49
  end
21
-
50
+
22
51
  def klass
23
- @klass ||= class_name.constantize
52
+ @klass ||= ConstantHelper.lookup(class_name, options[:scope])
24
53
  end
25
54
 
26
55
  def many?
@@ -109,7 +109,9 @@ module MongoMapper
109
109
  end
110
110
 
111
111
  def foreign_key
112
- @association.options[:foreign_key] || @owner.class.name.underscore.gsub("/", "_") + "_id"
112
+ @association.options[:foreign_key] ||
113
+ (ConstantHelper.leaf(@owner.class.name).
114
+ underscore.gsub("/", "_") + "_id")
113
115
  end
114
116
  end
115
117
  end
@@ -2,12 +2,12 @@ module MongoMapper
2
2
  module Associations
3
3
  module ClassMethods
4
4
  def belongs_to(association_id, options = {})
5
- create_association(:belongs_to, association_id, options)
5
+ create_association(:belongs_to, association_id, options, self)
6
6
  self
7
7
  end
8
8
 
9
9
  def many(association_id, options = {})
10
- create_association(:many, association_id, options)
10
+ create_association(:many, association_id, options, self)
11
11
  self
12
12
  end
13
13
 
@@ -18,7 +18,8 @@ module MongoMapper
18
18
  end
19
19
 
20
20
  private
21
- def create_association(type, name, options)
21
+ def create_association(type, name, options, scope)
22
+ options[:scope] = scope
22
23
  association = Associations::Base.new(type, name, options)
23
24
  associations[association.name] = association
24
25
  define_association_methods(association)
@@ -48,16 +49,16 @@ module MongoMapper
48
49
  end
49
50
 
50
51
  def define_dependent_callback_for_many(association)
51
- return if association.embeddable?
52
-
53
52
  after_destroy do |doc|
54
- case association.options[:dependent]
55
- when :destroy
56
- doc.get_proxy(association).destroy_all
57
- when :delete_all
58
- doc.get_proxy(association).delete_all
59
- when :nullify
60
- doc.get_proxy(association).nullify
53
+ if !association.embeddable?
54
+ case association.options[:dependent]
55
+ when :destroy
56
+ doc.get_proxy(association).destroy_all
57
+ when :delete_all
58
+ doc.get_proxy(association).delete_all
59
+ when :nullify
60
+ doc.get_proxy(association).nullify
61
+ end
61
62
  end
62
63
  end
63
64
  end
@@ -1,87 +1,50 @@
1
1
  module MongoMapper
2
- module Callbacks
2
+ module Callbacks
3
3
  def self.included(model) #:nodoc:
4
4
  model.class_eval do
5
5
  extend Observable
6
6
  include ActiveSupport::Callbacks
7
-
8
- define_callbacks *%w(
9
- before_save after_save before_create after_create before_update after_update before_validation
10
- after_validation before_validation_on_create after_validation_on_create before_validation_on_update
11
- after_validation_on_update before_destroy after_destroy
7
+
8
+ callbacks = %w(
9
+ before_save
10
+ after_save
11
+ before_create
12
+ after_create
13
+ before_update
14
+ after_update
15
+ before_validation
16
+ after_validation
17
+ before_validation_on_create
18
+ after_validation_on_create
19
+ before_validation_on_update
20
+ after_validation_on_update
21
+ before_destroy
22
+ after_destroy
12
23
  )
13
-
14
- [:create_or_update, :valid?, :create, :update, :destroy].each do |method|
15
- alias_method_chain method, :callbacks
16
- end
17
- end
18
- end
19
24
 
20
- def before_save() end
25
+ define_callbacks(*callbacks)
21
26
 
22
- def after_save() end
23
- def create_or_update_with_callbacks #:nodoc:
24
- return false if callback(:before_save) == false
25
- if result = create_or_update_without_callbacks
26
- callback(:after_save)
27
+ callbacks.each do |callback|
28
+ define_method(callback.to_sym) {}
29
+ end
27
30
  end
28
- result
29
31
  end
30
- private :create_or_update_with_callbacks
31
-
32
- def before_create() end
33
-
34
- def after_create() end
35
- def create_with_callbacks #:nodoc:
36
- return false if callback(:before_create) == false
37
- result = create_without_callbacks
38
- callback(:after_create)
39
- result
40
- end
41
- private :create_with_callbacks
42
-
43
- def before_update() end
44
-
45
- def after_update() end
46
-
47
- def update_with_callbacks(*args) #:nodoc:
48
- return false if callback(:before_update) == false
49
- result = update_without_callbacks(*args)
50
- callback(:after_update)
51
- result
52
- end
53
- private :update_with_callbacks
54
-
55
- def before_validation() end
56
-
57
- def after_validation() end
58
32
 
59
- def before_validation_on_create() end
60
-
61
- def after_validation_on_create() end
62
-
63
- def before_validation_on_update() end
64
-
65
- def after_validation_on_update() end
66
-
67
- def valid_with_callbacks? #:nodoc:
33
+ def valid? #:nodoc:
68
34
  return false if callback(:before_validation) == false
69
35
  result = new? ? callback(:before_validation_on_create) : callback(:before_validation_on_update)
70
36
  return false if false == result
71
-
72
- result = valid_without_callbacks?
37
+
38
+ result = super
73
39
  callback(:after_validation)
74
-
40
+
75
41
  new? ? callback(:after_validation_on_create) : callback(:after_validation_on_update)
76
42
  return result
77
43
  end
78
44
 
79
- def before_destroy() end
80
-
81
- def after_destroy() end
82
- def destroy_with_callbacks #:nodoc:
45
+ def destroy #:nodoc:
83
46
  return false if callback(:before_destroy) == false
84
- result = destroy_without_callbacks
47
+ result = super
85
48
  callback(:after_destroy)
86
49
  result
87
50
  end
@@ -89,18 +52,40 @@ module MongoMapper
89
52
  private
90
53
  def callback(method)
91
54
  result = run_callbacks(method) { |result, object| false == result }
92
-
55
+
93
56
  if result != false && respond_to?(method)
94
57
  result = send(method)
95
58
  end
96
-
59
+
97
60
  notify(method)
98
61
  return result
99
62
  end
100
-
63
+
101
64
  def notify(method) #:nodoc:
102
65
  self.class.changed
103
66
  self.class.notify_observers(method, self)
104
67
  end
68
+
69
+ def create_or_update #:nodoc:
70
+ return false if callback(:before_save) == false
71
+ if result = super
72
+ callback(:after_save)
73
+ end
74
+ result
75
+ end
76
+
77
+ def create #:nodoc:
78
+ return false if callback(:before_create) == false
79
+ result = super
80
+ callback(:after_create)
81
+ result
82
+ end
83
+
84
+ def update(*args) #:nodoc:
85
+ return false if callback(:before_update) == false
86
+ result = super
87
+ callback(:after_update)
88
+ result
89
+ end
105
90
  end
106
91
  end
@@ -2,13 +2,6 @@ module MongoMapper
2
2
  module Dirty
3
3
  DIRTY_SUFFIXES = ['_changed?', '_change', '_will_change!', '_was']
4
4
 
5
- def self.included(base)
6
- base.alias_method_chain :initialize, :dirty
7
- base.alias_method_chain :write_attribute, :dirty
8
- base.alias_method_chain :save, :dirty
9
- base.alias_method_chain :save!, :dirty
10
- end
11
-
12
5
  def method_missing(method, *args, &block)
13
6
  if method.to_s =~ /(_changed\?|_change|_will_change!|_was)$/
14
7
  method_suffix = $1
@@ -53,26 +46,26 @@ module MongoMapper
53
46
  changed.inject({}) { |h, attribute| h[attribute] = key_change(attribute); h }
54
47
  end
55
48
 
56
- def initialize_with_dirty(attrs={})
57
- initialize_without_dirty(attrs)
49
+ def initialize(attrs={})
50
+ super(attrs)
58
51
  changed_keys.clear unless new?
59
52
  end
60
-
53
+
61
54
  # Attempts to +save+ the record and clears changed keys if successful.
62
- def save_with_dirty(*args) #:nodoc:
63
- if status = save_without_dirty(*args)
55
+ def save(*args)
56
+ if status = super
64
57
  changed_keys.clear
65
58
  end
66
59
  status
67
60
  end
68
61
 
69
62
  # Attempts to <tt>save!</tt> the record and clears changed keys if successful.
70
- def save_with_dirty!(*args) #:nodoc:
71
- status = save_without_dirty!(*args)
63
+ def save!(*args)
64
+ status = super
72
65
  changed_keys.clear
73
66
  status
74
67
  end
75
-
68
+
76
69
  # <tt>reload</tt> the record and clears changed keys.
77
70
  # def reload_with_dirty(*args) #:nodoc:
78
71
  # record = reload_without_dirty(*args)
@@ -114,7 +107,7 @@ module MongoMapper
114
107
  end
115
108
 
116
109
  # Wrap write_attribute to remember original key value.
117
- def write_attribute_with_dirty(attribute, value)
110
+ def write_attribute(attribute, value)
118
111
  attribute = attribute.to_s
119
112
 
120
113
  # The key already has an unsaved change.
@@ -127,7 +120,7 @@ module MongoMapper
127
120
  end
128
121
 
129
122
  # Carry on.
130
- write_attribute_without_dirty(attribute, value)
123
+ super(attribute, value)
131
124
  end
132
125
 
133
126
  def value_changed?(key_name, old, value)
@@ -140,4 +133,4 @@ module MongoMapper
140
133
  old != value
141
134
  end
142
135
  end
143
- end
136
+ end
@@ -8,7 +8,6 @@ module MongoMapper
8
8
  include InstanceMethods
9
9
  include Observing
10
10
  include Callbacks
11
- include SaveWithValidation
12
11
  include Dirty
13
12
  include RailsCompatibility::Document
14
13
  extend Validations::Macros
@@ -111,13 +110,11 @@ module MongoMapper
111
110
  end
112
111
 
113
112
  def create(*docs)
114
- instances = []
115
- docs = [{}] if docs.blank?
116
- docs.flatten.each do |attrs|
117
- doc = new(attrs); doc.save
118
- instances << doc
119
- end
120
- instances.size == 1 ? instances[0] : instances
113
+ initialize_each(*docs) { |doc| doc.save }
114
+ end
115
+
116
+ def create!(*docs)
117
+ initialize_each(*docs) { |doc| doc.save! }
121
118
  end
122
119
 
123
120
  # For updating single document
@@ -207,6 +204,18 @@ module MongoMapper
207
204
  end
208
205
 
209
206
  private
207
+ # Initializes each document and yields each initialized document
208
+ def initialize_each(*docs)
209
+ instances = []
210
+ docs = [{}] if docs.blank?
211
+ docs.flatten.each do |attrs|
212
+ doc = new(attrs)
213
+ yield(doc)
214
+ instances << doc
215
+ end
216
+ instances.size == 1 ? instances[0] : instances
217
+ end
218
+
210
219
  def create_indexes_for(key)
211
220
  ensure_index key.name if key.options[:index]
212
221
  end
@@ -285,11 +294,11 @@ module MongoMapper
285
294
  end
286
295
 
287
296
  def save
288
- create_or_update
297
+ valid? ? create_or_update : false
289
298
  end
290
299
 
291
300
  def save!
292
- create_or_update || raise(DocumentNotValid.new(self))
301
+ valid? ? create_or_update : raise(DocumentNotValid.new(self))
293
302
  end
294
303
 
295
304
  def destroy
@@ -198,6 +198,10 @@ module MongoMapper
198
198
  def new?
199
199
  !!@new_document
200
200
  end
201
+
202
+ def to_param
203
+ id
204
+ end
201
205
 
202
206
  def attributes=(attrs)
203
207
  return if attrs.blank?
@@ -308,7 +312,7 @@ module MongoMapper
308
312
 
309
313
  private
310
314
  def _keys
311
- self.class.keys
315
+ self.metaclass.keys
312
316
  end
313
317
 
314
318
  def key_names
@@ -324,7 +328,7 @@ module MongoMapper
324
328
  end
325
329
 
326
330
  def ensure_key_exists(name)
327
- self.class.key(name) unless respond_to?("#{name}=")
331
+ self.metaclass.key(name) unless respond_to?("#{name}=")
328
332
  end
329
333
 
330
334
  def read_attribute(name)
@@ -6,10 +6,6 @@ module MongoMapper
6
6
  alias_method :new_record?, :new?
7
7
  end
8
8
  end
9
-
10
- def to_param
11
- id
12
- end
13
9
  end
14
10
  end
15
11
  end
@@ -18,10 +18,6 @@ module MongoMapper
18
18
  keys.keys
19
19
  end
20
20
  end
21
-
22
- def to_param
23
- raise "Missing to_param method in #{self.class}. You should implement it to return the unique identifier of this embedded document within a document."
24
- end
25
21
  end
26
22
  end
27
23
  end
data/lib/mongo_mapper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'rubygems'
2
2
 
3
- gem 'activesupport'
3
+ gem 'activesupport', '>= 2.3'
4
4
  gem 'mongo', '0.15.1'
5
5
  gem 'jnunemaker-validatable', '1.7.4'
6
6
 
@@ -102,10 +102,9 @@ require 'mongo_mapper/dynamic_finder'
102
102
  require 'mongo_mapper/key'
103
103
  require 'mongo_mapper/observing'
104
104
  require 'mongo_mapper/pagination'
105
- require 'mongo_mapper/save_with_validation'
106
105
  require 'mongo_mapper/serialization'
107
106
  require 'mongo_mapper/validations'
108
107
  require 'mongo_mapper/rails_compatibility/document'
109
108
  require 'mongo_mapper/rails_compatibility/embedded_document'
110
109
  require 'mongo_mapper/embedded_document'
111
- require 'mongo_mapper/document'
110
+ require 'mongo_mapper/document'
data/mongo_mapper.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongo_mapper}
8
- s.version = "0.5.4"
8
+ s.version = "0.5.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["John Nunemaker"]
12
- s.date = %q{2009-10-11}
12
+ s.date = %q{2009-10-16}
13
13
  s.default_executable = %q{mmconsole}
14
14
  s.email = %q{nunemaker@gmail.com}
15
15
  s.executables = ["mmconsole"]
@@ -47,7 +47,6 @@ Gem::Specification.new do |s|
47
47
  "lib/mongo_mapper/pagination.rb",
48
48
  "lib/mongo_mapper/rails_compatibility/document.rb",
49
49
  "lib/mongo_mapper/rails_compatibility/embedded_document.rb",
50
- "lib/mongo_mapper/save_with_validation.rb",
51
50
  "lib/mongo_mapper/serialization.rb",
52
51
  "lib/mongo_mapper/serializers/json_serializer.rb",
53
52
  "lib/mongo_mapper/support.rb",
@@ -55,7 +54,6 @@ Gem::Specification.new do |s|
55
54
  "mongo_mapper.gemspec",
56
55
  "specs.watchr",
57
56
  "test/NOTE_ON_TESTING",
58
- "test/custom_matchers.rb",
59
57
  "test/functional/associations/test_belongs_to_polymorphic_proxy.rb",
60
58
  "test/functional/associations/test_belongs_to_proxy.rb",
61
59
  "test/functional/associations/test_many_documents_as_proxy.rb",
@@ -74,6 +72,8 @@ Gem::Specification.new do |s|
74
72
  "test/functional/test_rails_compatibility.rb",
75
73
  "test/functional/test_validations.rb",
76
74
  "test/models.rb",
75
+ "test/support/custom_matchers.rb",
76
+ "test/support/test_timing.rb",
77
77
  "test/test_helper.rb",
78
78
  "test/unit/serializers/test_json_serializer.rb",
79
79
  "test/unit/test_association_base.rb",
@@ -98,8 +98,7 @@ Gem::Specification.new do |s|
98
98
  s.rubygems_version = %q{1.3.5}
99
99
  s.summary = %q{Awesome gem for modeling your domain and storing it in mongo}
100
100
  s.test_files = [
101
- "test/custom_matchers.rb",
102
- "test/functional/associations/test_belongs_to_polymorphic_proxy.rb",
101
+ "test/functional/associations/test_belongs_to_polymorphic_proxy.rb",
103
102
  "test/functional/associations/test_belongs_to_proxy.rb",
104
103
  "test/functional/associations/test_many_documents_as_proxy.rb",
105
104
  "test/functional/associations/test_many_embedded_polymorphic_proxy.rb",
@@ -117,6 +116,8 @@ Gem::Specification.new do |s|
117
116
  "test/functional/test_rails_compatibility.rb",
118
117
  "test/functional/test_validations.rb",
119
118
  "test/models.rb",
119
+ "test/support/custom_matchers.rb",
120
+ "test/support/test_timing.rb",
120
121
  "test/test_helper.rb",
121
122
  "test/unit/serializers/test_json_serializer.rb",
122
123
  "test/unit/test_association_base.rb",
@@ -140,23 +141,29 @@ Gem::Specification.new do |s|
140
141
  s.specification_version = 3
141
142
 
142
143
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
143
- s.add_runtime_dependency(%q<activesupport>, [">= 0"])
144
+ s.add_runtime_dependency(%q<activesupport>, [">= 2.3"])
144
145
  s.add_runtime_dependency(%q<mongo>, ["= 0.15.1"])
145
146
  s.add_runtime_dependency(%q<jnunemaker-validatable>, ["= 1.7.4"])
146
- s.add_development_dependency(%q<mocha>, ["= 0.9.4"])
147
147
  s.add_development_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
148
+ s.add_development_dependency(%q<shoulda>, ["= 2.10.2"])
149
+ s.add_development_dependency(%q<timecop>, ["= 0.3.1"])
150
+ s.add_development_dependency(%q<mocha>, ["= 0.9.4"])
148
151
  else
149
- s.add_dependency(%q<activesupport>, [">= 0"])
152
+ s.add_dependency(%q<activesupport>, [">= 2.3"])
150
153
  s.add_dependency(%q<mongo>, ["= 0.15.1"])
151
154
  s.add_dependency(%q<jnunemaker-validatable>, ["= 1.7.4"])
152
- s.add_dependency(%q<mocha>, ["= 0.9.4"])
153
155
  s.add_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
156
+ s.add_dependency(%q<shoulda>, ["= 2.10.2"])
157
+ s.add_dependency(%q<timecop>, ["= 0.3.1"])
158
+ s.add_dependency(%q<mocha>, ["= 0.9.4"])
154
159
  end
155
160
  else
156
- s.add_dependency(%q<activesupport>, [">= 0"])
161
+ s.add_dependency(%q<activesupport>, [">= 2.3"])
157
162
  s.add_dependency(%q<mongo>, ["= 0.15.1"])
158
163
  s.add_dependency(%q<jnunemaker-validatable>, ["= 1.7.4"])
159
- s.add_dependency(%q<mocha>, ["= 0.9.4"])
160
164
  s.add_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
165
+ s.add_dependency(%q<shoulda>, ["= 2.10.2"])
166
+ s.add_dependency(%q<timecop>, ["= 0.3.1"])
167
+ s.add_dependency(%q<mocha>, ["= 0.9.4"])
161
168
  end
162
169
  end
@@ -149,7 +149,8 @@ class ManyDocumentsAsProxyTest < Test::Unit::TestCase
149
149
 
150
150
  context "with #all" do
151
151
  should "work" do
152
- @post.comments.all.should == [@comment1, @comment2]
152
+ @post.comments.all.should include(@comment1)
153
+ @post.comments.all.should include(@comment2)
153
154
  end
154
155
 
155
156
  should "work with conditions" do
@@ -0,0 +1,33 @@
1
+ require 'test_helper'
2
+ require 'models'
3
+
4
+ class NamespaceTest < Test::Unit::TestCase
5
+ include Hollywood
6
+
7
+ def setup
8
+ Movie.collection.clear
9
+ Actor.collection.clear
10
+ Role.collection.clear
11
+ end
12
+
13
+ context "Hollywood namespace" do
14
+ setup do
15
+ @movie = Movie.create
16
+ @actor = Actor.create
17
+ @role = Role.create(
18
+ :movie_id => @movie.id,
19
+ :actor_id => @actor.id
20
+ )
21
+ end
22
+
23
+ should "belongs_to associations" do
24
+ @role.actor.should == @actor
25
+ @role.movie.should == @movie
26
+ end
27
+
28
+ should "many associations" do
29
+ @movie.roles.should == [@role]
30
+ @actor.roles.should == [@role]
31
+ end
32
+ end
33
+ end
@@ -669,7 +669,7 @@ class DocumentTest < Test::Unit::TestCase
669
669
  @thing.properties << @property3
670
670
  end
671
671
 
672
- should "destroy the thing" do
672
+ should_eventually "destroy the thing" do
673
673
  Thing.count.should == 1
674
674
  @property1.destroy
675
675
  Thing.count.should == 0
@@ -1012,8 +1012,11 @@ class DocumentTest < Test::Unit::TestCase
1012
1012
  old_created_at = doc.created_at
1013
1013
  old_updated_at = doc.updated_at
1014
1014
  doc.first_name = 'Johnny'
1015
- sleep 1 # this annoys me
1016
- doc.save
1015
+
1016
+ Timecop.freeze(Time.now + 5.seconds) do
1017
+ doc.save
1018
+ end
1019
+
1017
1020
  doc.created_at.should == old_created_at
1018
1021
  doc.updated_at.should_not == old_updated_at
1019
1022
  end
@@ -1022,12 +1025,14 @@ class DocumentTest < Test::Unit::TestCase
1022
1025
  doc = @document.create(:first_name => 'John', :age => 27)
1023
1026
  old_created_at = doc.created_at
1024
1027
  old_updated_at = doc.updated_at
1025
- sleep 1 # this annoys me
1026
- @document.update(doc._id, { :first_name => 'Johnny' })
1028
+
1029
+ Timecop.freeze(Time.now + 5.seconds) do
1030
+ @document.update(doc._id, { :first_name => 'Johnny' })
1031
+ end
1027
1032
 
1028
1033
  from_db = @document.find(doc.id)
1029
- from_db.created_at.to_i.should == old_created_at.to_i
1030
- from_db.updated_at.to_i.should_not == old_updated_at.to_i
1034
+ from_db.created_at.should == old_created_at
1035
+ from_db.updated_at.should_not == old_updated_at
1031
1036
  end
1032
1037
  end
1033
1038
 
@@ -74,6 +74,14 @@ class EmbeddedDocumentTest < Test::Unit::TestCase
74
74
  doc = RealPerson.find(person.id)
75
75
  doc.pets.first.should == pet
76
76
  end
77
+
78
+ should "save new keys" do
79
+ person = RealPerson.new
80
+ person[:new_attribute] = 'foobar'
81
+ person.save
82
+ from_db = RealPerson.find(person.id)
83
+ person.new_attribute.should == 'foobar'
84
+ end
77
85
  end
78
86
 
79
87
  context "update_attributes" do
@@ -94,4 +102,4 @@ class EmbeddedDocumentTest < Test::Unit::TestCase
94
102
  embedded.name.should == 'koda'
95
103
  end
96
104
  end
97
- end
105
+ end
@@ -16,11 +16,6 @@ class TestRailsCompatibility < Test::Unit::TestCase
16
16
  setup do
17
17
  Order.collection.clear
18
18
  end
19
-
20
- should "have to_param that returns id" do
21
- instance = Order.create('_id' => 1234)
22
- instance.to_param.should == '1234'
23
- end
24
19
 
25
20
  should "alias new to new_record?" do
26
21
  instance = Order.new
@@ -40,6 +40,26 @@ class ValidationsTest < Test::Unit::TestCase
40
40
  lambda { doc.save! }.should raise_error(MongoMapper::DocumentNotValid)
41
41
  end
42
42
  end
43
+
44
+ context "Creating a document that is invalid (destructive)" do
45
+ setup do
46
+ @document = Class.new do
47
+ include MongoMapper::Document
48
+ set_collection_name 'test'
49
+ key :name, String, :required => true
50
+ end
51
+ @document.collection.clear
52
+ end
53
+
54
+ should "raise error" do
55
+ lambda { @document.create! }.should raise_error(MongoMapper::DocumentNotValid)
56
+ end
57
+
58
+ should "create a new document" do
59
+ instance = @document.create!(:name => "James")
60
+ instance.new_record?.should be_false
61
+ end
62
+ end
43
63
 
44
64
  context "Saving an existing document that is invalid" do
45
65
  setup do
data/test/models.rb CHANGED
@@ -193,3 +193,27 @@ module TrModels
193
193
  key :name, String
194
194
  end
195
195
  end
196
+
197
+ module Hollywood
198
+ class Movie
199
+ include MongoMapper::Document
200
+
201
+ many :roles
202
+ end
203
+
204
+ class Actor
205
+ include MongoMapper::Document
206
+
207
+ many :roles
208
+ end
209
+
210
+ class Role
211
+ include MongoMapper::Document
212
+
213
+ key :movie_id, String
214
+ key :actor_id, String
215
+
216
+ belongs_to :movie
217
+ belongs_to :actor
218
+ end
219
+ end
@@ -0,0 +1,16 @@
1
+ class Test::Unit::TestCase
2
+ def run_with_test_timing(*args, &block)
3
+ begin_time = Time.now
4
+ run_without_test_timing(*args, &block)
5
+ end_time = Time.now
6
+
7
+ duration = end_time - begin_time
8
+ threshold = 0.3
9
+
10
+ if duration > threshold
11
+ puts "\nSLOW TEST: #{duration} - #{self.name}"
12
+ end
13
+ end
14
+
15
+ alias_method_chain :run, :test_timing unless method_defined?(:run_without_test_timing)
16
+ end
data/test/test_helper.rb CHANGED
@@ -1,18 +1,18 @@
1
- require 'pathname'
2
- require 'pp'
3
- require 'rubygems'
4
- require 'shoulda'
1
+ require File.join(File.expand_path(File.dirname(__FILE__) + '/../lib/mongo_mapper'))
5
2
 
6
- gem 'mocha', '0.9.4'
7
3
  gem 'jnunemaker-matchy', '0.4.0'
4
+ gem 'shoulda', '2.10.2'
5
+ gem 'timecop', '0.3.1'
6
+ gem 'mocha', '0.9.4'
8
7
 
9
8
  require 'matchy'
9
+ require 'shoulda'
10
+ require 'timecop'
10
11
  require 'mocha'
11
- require 'custom_matchers'
12
+ require 'pp'
12
13
 
13
- $LOAD_PATH.unshift(File.dirname(__FILE__))
14
- dir = (Pathname(__FILE__).dirname + '..' + 'lib').expand_path
15
- require dir + 'mongo_mapper'
14
+ require 'support/custom_matchers'
15
+ require 'support/test_timing'
16
16
 
17
17
  class Test::Unit::TestCase
18
18
  include CustomMatchers
@@ -289,6 +289,11 @@ class EmbeddedDocumentTest < Test::Unit::TestCase
289
289
  end
290
290
  end
291
291
 
292
+ should "have to_param that is id" do
293
+ doc = @document.new
294
+ doc.to_param.should == doc.id
295
+ end
296
+
292
297
  should "have access to class logger" do
293
298
  doc = @document.new
294
299
  doc.logger.should == @document.logger
@@ -475,9 +480,15 @@ class EmbeddedDocumentTest < Test::Unit::TestCase
475
480
  should "create key and write value for missing key" do
476
481
  doc = @document.new
477
482
  doc[:foo] = 'string'
478
- @document.keys.keys.include?('foo').should be_true
483
+ doc.metaclass.keys.include?('foo').should be_true
479
484
  doc[:foo].should == 'string'
480
485
  end
486
+
487
+ should "not share the new key" do
488
+ doc = @document.new
489
+ doc[:foo] = 'string'
490
+ @document.keys.should_not include('foo')
491
+ end
481
492
  end
482
493
  end
483
494
 
@@ -15,11 +15,7 @@ class TestRailsCompatibility < Test::Unit::TestCase
15
15
  key :second_only, String
16
16
  end
17
17
 
18
- context "EmbeddedDocument" do
19
- should "raise error for to_param as embedded do not have id's" do
20
- lambda { Item.new.to_param }.should raise_error
21
- end
22
-
18
+ context "EmbeddedDocument" do
23
19
  should "alias many to has_many" do
24
20
  FirstItem.should respond_to(:has_many)
25
21
  FirstItem.method(:has_many).should == FirstItem.method(:many)
@@ -1,52 +1,52 @@
1
- require 'test_helper'
2
-
3
- class SerializationTest < Test::Unit::TestCase
4
- def setup
5
- @document = Class.new do
6
- include MongoMapper::EmbeddedDocument
7
- key :name, String
8
- key :age, Integer
9
- key :awesome, Boolean
10
- key :preferences, Hash
11
- key :created_at, Time
12
- end
13
-
14
- @instance = @document.new(
15
- :name => 'John Doe',
16
- :age => 25,
17
- :awesome => true,
18
- :preferences => {:language => 'Ruby'},
19
- :created_at => Time.now.change(:usec => 0)
20
- )
21
- end
22
-
23
- [:json].each do |format|
24
- context format do
25
- should "be reversable" do
26
- serialized = @instance.send("to_#{format}")
27
- unserialized = @document.new.send("from_#{format}", serialized)
28
-
29
- assert_equal @instance, unserialized
30
- end
31
-
32
- should "allow attribute only filtering" do
33
- serialized = @instance.send("to_#{format}", :only => [ :age, :name ])
34
- unserialized = @document.new.send("from_#{format}", serialized)
35
-
36
- assert_equal @instance.name, unserialized.name
37
- assert_equal @instance.age, unserialized.age
38
- assert ! unserialized.awesome
39
- assert_nil unserialized.created_at
40
- end
41
-
42
- should "allow attribute except filtering" do
43
- serialized = @instance.send("to_#{format}", :except => [ :age, :name ])
44
- unserialized = @document.new.send("from_#{format}", serialized)
45
-
46
- assert_nil unserialized.name
47
- assert_nil unserialized.age
48
- assert_equal @instance.awesome, unserialized.awesome
49
- end
50
- end
51
- end
52
- end
1
+ require 'test_helper'
2
+
3
+ class SerializationTest < Test::Unit::TestCase
4
+ def setup
5
+ @document = Class.new do
6
+ include MongoMapper::EmbeddedDocument
7
+ key :name, String
8
+ key :age, Integer
9
+ key :awesome, Boolean
10
+ key :preferences, Hash
11
+ key :created_at, Time
12
+ end
13
+
14
+ @instance = @document.new(
15
+ :name => 'John Doe',
16
+ :age => 25,
17
+ :awesome => true,
18
+ :preferences => {:language => 'Ruby'},
19
+ :created_at => Time.now.change(:usec => 0)
20
+ )
21
+ end
22
+
23
+ [:json].each do |format|
24
+ context format do
25
+ should "be reversable" do
26
+ serialized = @instance.send("to_#{format}")
27
+ unserialized = @document.new.send("from_#{format}", serialized)
28
+
29
+ assert_equal @instance, unserialized
30
+ end
31
+
32
+ should "allow attribute only filtering" do
33
+ serialized = @instance.send("to_#{format}", :only => [ :age, :name ])
34
+ unserialized = @document.new.send("from_#{format}", serialized)
35
+
36
+ assert_equal @instance.name, unserialized.name
37
+ assert_equal @instance.age, unserialized.age
38
+ assert ! unserialized.awesome
39
+ assert_nil unserialized.created_at
40
+ end
41
+
42
+ should "allow attribute except filtering" do
43
+ serialized = @instance.send("to_#{format}", :except => [ :age, :name ])
44
+ unserialized = @document.new.send("from_#{format}", serialized)
45
+
46
+ assert_nil unserialized.name
47
+ assert_nil unserialized.age
48
+ assert_equal @instance.awesome, unserialized.awesome
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,40 +1,40 @@
1
- require 'test_helper'
2
-
3
- class TimeZonesTest < Test::Unit::TestCase
4
- context "An instance of an embedded document" do
5
- setup do
6
- @document = Class.new do
7
- include MongoMapper::EmbeddedDocument
8
- key :name, String
9
- key :created_at, Time
10
- end
11
- end
12
-
13
- should "work without Time.zone" do
14
- Time.zone = nil
15
-
16
- doc = @document.new(:created_at => "2009-08-15 14:00:00")
17
- doc.created_at.should == Time.local(2009, 8, 15, 14, 0, 0).utc
18
- end
19
-
20
- should "work with Time.zone set to the (default) UTC" do
21
- Time.zone = 'UTC'
22
-
23
- doc = @document.new(:created_at => "2009-08-15 14:00:00")
24
- doc.created_at.is_a?(ActiveSupport::TimeWithZone).should be_true
25
- doc.created_at.should == Time.utc(2009, 8, 15, 14)
26
-
27
- Time.zone = nil
28
- end
29
-
30
- should_eventually "work with timezones that are not UTC" do
31
- Time.zone = 'Hawaii'
32
-
33
- doc = @document.new(:created_at => @original_time)
34
- doc.created_at.is_a?(ActiveSupport::TimeWithZone).should be_true
35
- doc.created_at.should == Time.utc(2009, 8, 16)
36
-
37
- Time.zone = nil
38
- end
39
- end
1
+ require 'test_helper'
2
+
3
+ class TimeZonesTest < Test::Unit::TestCase
4
+ context "An instance of an embedded document" do
5
+ setup do
6
+ @document = Class.new do
7
+ include MongoMapper::EmbeddedDocument
8
+ key :name, String
9
+ key :created_at, Time
10
+ end
11
+ end
12
+
13
+ should "work without Time.zone" do
14
+ Time.zone = nil
15
+
16
+ doc = @document.new(:created_at => "2009-08-15 14:00:00")
17
+ doc.created_at.should == Time.local(2009, 8, 15, 14, 0, 0).utc
18
+ end
19
+
20
+ should "work with Time.zone set to the (default) UTC" do
21
+ Time.zone = 'UTC'
22
+
23
+ doc = @document.new(:created_at => "2009-08-15 14:00:00")
24
+ doc.created_at.is_a?(ActiveSupport::TimeWithZone).should be_true
25
+ doc.created_at.should == Time.utc(2009, 8, 15, 14)
26
+
27
+ Time.zone = nil
28
+ end
29
+
30
+ should_eventually "work with timezones that are not UTC" do
31
+ Time.zone = 'Hawaii'
32
+
33
+ doc = @document.new(:created_at => @original_time)
34
+ doc.created_at.is_a?(ActiveSupport::TimeWithZone).should be_true
35
+ doc.created_at.should == Time.utc(2009, 8, 16)
36
+
37
+ Time.zone = nil
38
+ end
39
+ end
40
40
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: djsun-mongo_mapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4.1
4
+ version: 0.5.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-12 00:00:00 -04:00
12
+ date: 2009-10-16 00:00:00 -04:00
13
13
  default_executable: mmconsole
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: "0"
23
+ version: "2.3"
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mongo
@@ -43,24 +43,44 @@ dependencies:
43
43
  version: 1.7.4
44
44
  version:
45
45
  - !ruby/object:Gem::Dependency
46
- name: mocha
46
+ name: jnunemaker-matchy
47
47
  type: :development
48
48
  version_requirement:
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "="
52
52
  - !ruby/object:Gem::Version
53
- version: 0.9.4
53
+ version: 0.4.0
54
54
  version:
55
55
  - !ruby/object:Gem::Dependency
56
- name: jnunemaker-matchy
56
+ name: shoulda
57
57
  type: :development
58
58
  version_requirement:
59
59
  version_requirements: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - "="
62
62
  - !ruby/object:Gem::Version
63
- version: 0.4.0
63
+ version: 2.10.2
64
+ version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: timecop
67
+ type: :development
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "="
72
+ - !ruby/object:Gem::Version
73
+ version: 0.3.1
74
+ version:
75
+ - !ruby/object:Gem::Dependency
76
+ name: mocha
77
+ type: :development
78
+ version_requirement:
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "="
82
+ - !ruby/object:Gem::Version
83
+ version: 0.9.4
64
84
  version:
65
85
  description:
66
86
  email: nunemaker@gmail.com
@@ -102,7 +122,6 @@ files:
102
122
  - lib/mongo_mapper/pagination.rb
103
123
  - lib/mongo_mapper/rails_compatibility/document.rb
104
124
  - lib/mongo_mapper/rails_compatibility/embedded_document.rb
105
- - lib/mongo_mapper/save_with_validation.rb
106
125
  - lib/mongo_mapper/serialization.rb
107
126
  - lib/mongo_mapper/serializers/json_serializer.rb
108
127
  - lib/mongo_mapper/support.rb
@@ -110,7 +129,6 @@ files:
110
129
  - mongo_mapper.gemspec
111
130
  - specs.watchr
112
131
  - test/NOTE_ON_TESTING
113
- - test/custom_matchers.rb
114
132
  - test/functional/associations/test_belongs_to_polymorphic_proxy.rb
115
133
  - test/functional/associations/test_belongs_to_proxy.rb
116
134
  - test/functional/associations/test_many_documents_as_proxy.rb
@@ -118,6 +136,7 @@ files:
118
136
  - test/functional/associations/test_many_embedded_proxy.rb
119
137
  - test/functional/associations/test_many_polymorphic_proxy.rb
120
138
  - test/functional/associations/test_many_proxy.rb
139
+ - test/functional/associations/test_namespace.rb
121
140
  - test/functional/test_associations.rb
122
141
  - test/functional/test_binary.rb
123
142
  - test/functional/test_callbacks.rb
@@ -129,6 +148,8 @@ files:
129
148
  - test/functional/test_rails_compatibility.rb
130
149
  - test/functional/test_validations.rb
131
150
  - test/models.rb
151
+ - test/support/custom_matchers.rb
152
+ - test/support/test_timing.rb
132
153
  - test/test_helper.rb
133
154
  - test/unit/serializers/test_json_serializer.rb
134
155
  - test/unit/test_association_base.rb
@@ -174,7 +195,6 @@ signing_key:
174
195
  specification_version: 3
175
196
  summary: Awesome gem for modeling your domain and storing it in mongo
176
197
  test_files:
177
- - test/custom_matchers.rb
178
198
  - test/functional/associations/test_belongs_to_polymorphic_proxy.rb
179
199
  - test/functional/associations/test_belongs_to_proxy.rb
180
200
  - test/functional/associations/test_many_documents_as_proxy.rb
@@ -182,6 +202,7 @@ test_files:
182
202
  - test/functional/associations/test_many_embedded_proxy.rb
183
203
  - test/functional/associations/test_many_polymorphic_proxy.rb
184
204
  - test/functional/associations/test_many_proxy.rb
205
+ - test/functional/associations/test_namespace.rb
185
206
  - test/functional/test_associations.rb
186
207
  - test/functional/test_binary.rb
187
208
  - test/functional/test_callbacks.rb
@@ -193,6 +214,8 @@ test_files:
193
214
  - test/functional/test_rails_compatibility.rb
194
215
  - test/functional/test_validations.rb
195
216
  - test/models.rb
217
+ - test/support/custom_matchers.rb
218
+ - test/support/test_timing.rb
196
219
  - test/test_helper.rb
197
220
  - test/unit/serializers/test_json_serializer.rb
198
221
  - test/unit/test_association_base.rb
@@ -1,19 +0,0 @@
1
- module MongoMapper
2
- module SaveWithValidation
3
- def self.included(base)
4
- base.class_eval do
5
- alias_method_chain :save, :validation
6
- alias_method_chain :save!, :validation
7
- end
8
- end
9
-
10
- private
11
- def save_with_validation
12
- valid? ? save_without_validation : false
13
- end
14
-
15
- def save_with_validation!
16
- valid? ? save_without_validation! : raise(DocumentNotValid.new(self))
17
- end
18
- end
19
- end