mongomodel 0.5.0 → 0.5.1
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.
- checksums.yaml +7 -0
- data/.travis.yml +6 -2
- data/gemfiles/rails-3.2.gemfile +2 -2
- data/gemfiles/rails-4.0.gemfile +10 -0
- data/gemfiles/rails-4.1.gemfile +10 -0
- data/lib/mongomodel/concerns/callbacks.rb +6 -29
- data/lib/mongomodel/document/validations/uniqueness.rb +23 -17
- data/lib/mongomodel/version.rb +1 -1
- data/mongomodel.gemspec +4 -3
- data/spec/mongomodel/concerns/activemodel_spec.rb +10 -2
- data/spec/mongomodel/concerns/attribute_methods_spec.rb +1 -1
- data/spec/spec_helper.rb +6 -0
- data/spec/support/helpers/define_class.rb +13 -0
- metadata +30 -45
- data/gemfiles/rails-4.gemfile +0 -10
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d20a72c67b166e32f7b15d679f2be9da9e4aeb9a
|
4
|
+
data.tar.gz: 579a68306b9f69d20e6b18fd1c39dde098a66d50
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4d9493996ffb93bbb4fdb1c26ab3e4ac7311f10b97f10b7873fb443c4624c0972fc536bafae0a3e31e2049a573e612167cbc8c9fdea27f6f05c0808137624523
|
7
|
+
data.tar.gz: b4560d5934a94b17c14505838d2cfded8cdd5bdeb9d54ec000b7f360760b108e043d3d259c1e56133b9b94bf5809e2ceaf2f5bfc104f58349005215cd68b4fc0
|
data/.travis.yml
CHANGED
@@ -7,11 +7,13 @@ rvm:
|
|
7
7
|
- 1.8.7
|
8
8
|
- 1.9.3
|
9
9
|
- 2.0.0
|
10
|
+
- 2.1.0
|
10
11
|
|
11
12
|
gemfile:
|
12
13
|
- gemfiles/rails-3.1.gemfile
|
13
14
|
- gemfiles/rails-3.2.gemfile
|
14
|
-
- gemfiles/rails-4.gemfile
|
15
|
+
- gemfiles/rails-4.0.gemfile
|
16
|
+
- gemfiles/rails-4.1.gemfile
|
15
17
|
- gemfiles/rails-4-observers.gemfile
|
16
18
|
- gemfiles/rails-4-protected-attributes.gemfile
|
17
19
|
- gemfiles/mongo_mapper.gemfile
|
@@ -20,7 +22,9 @@ gemfile:
|
|
20
22
|
matrix:
|
21
23
|
exclude:
|
22
24
|
- rvm: 1.8.7
|
23
|
-
gemfile: gemfiles/rails-4.gemfile
|
25
|
+
gemfile: gemfiles/rails-4.0.gemfile
|
26
|
+
- rvm: 1.8.7
|
27
|
+
gemfile: gemfiles/rails-4.1.gemfile
|
24
28
|
- rvm: 1.8.7
|
25
29
|
gemfile: gemfiles/rails-4-observers.gemfile
|
26
30
|
- rvm: 1.8.7
|
data/gemfiles/rails-3.2.gemfile
CHANGED
@@ -199,34 +199,16 @@ module MongoModel
|
|
199
199
|
:after_create, :before_update, :around_update, :after_update,
|
200
200
|
:before_destroy, :around_destroy, :after_destroy
|
201
201
|
]
|
202
|
-
|
202
|
+
|
203
|
+
module ClassMethods
|
204
|
+
include ActiveModel::Callbacks
|
205
|
+
end
|
206
|
+
|
203
207
|
included do
|
204
|
-
|
208
|
+
include ActiveModel::Validations::Callbacks
|
205
209
|
|
206
210
|
define_model_callbacks :initialize, :find, :only => :after
|
207
211
|
define_model_callbacks :save, :create, :update, :destroy
|
208
|
-
|
209
|
-
define_callbacks :validation, :terminator => "result == false", :scope => [:kind, :name]
|
210
|
-
end
|
211
|
-
|
212
|
-
module ClassMethods
|
213
|
-
def before_validation(*args, &block)
|
214
|
-
options = args.extract_options!
|
215
|
-
if options[:on]
|
216
|
-
options[:if] = Array.wrap(options[:if])
|
217
|
-
options[:if] << "@_on_validate == :#{options[:on]}"
|
218
|
-
end
|
219
|
-
set_callback(:validation, :before, *(args << options), &block)
|
220
|
-
end
|
221
|
-
|
222
|
-
def after_validation(*args, &block)
|
223
|
-
options = args.extract_options!
|
224
|
-
options[:if] = Array.wrap(options[:if])
|
225
|
-
options[:if] << "!halted && value != false"
|
226
|
-
options[:if] << "@_on_validate == :#{options[:on]}" if options[:on]
|
227
|
-
options[:prepend] = true
|
228
|
-
set_callback(:validation, :after, *(args << options), &block)
|
229
|
-
end
|
230
212
|
end
|
231
213
|
|
232
214
|
def initialize(*args, &block) #:nodoc:
|
@@ -234,11 +216,6 @@ module MongoModel
|
|
234
216
|
run_callbacks_with_embedded(:initialize)
|
235
217
|
end
|
236
218
|
|
237
|
-
def valid?(*) #:nodoc:
|
238
|
-
@_on_validate = new_record? ? :create : :update
|
239
|
-
run_callbacks(:validation) { super }
|
240
|
-
end
|
241
|
-
|
242
219
|
def run_callbacks_with_embedded(kind, *args, &block)
|
243
220
|
if block_given?
|
244
221
|
embedded_callbacks = nest_embedded_callbacks(kind, *args, &block)
|
@@ -5,25 +5,14 @@ module MongoModel
|
|
5
5
|
module Validations
|
6
6
|
class UniquenessValidator < ActiveModel::EachValidator
|
7
7
|
def initialize(options)
|
8
|
-
|
8
|
+
options = options.reverse_merge(:case_sensitive => true)
|
9
|
+
|
10
|
+
ActiveSupport::Deprecation.silence { super }
|
11
|
+
setup!(options[:class]) if options[:class] && !@klass
|
9
12
|
end
|
10
13
|
|
11
14
|
def setup(klass)
|
12
|
-
|
13
|
-
|
14
|
-
# Enable safety checks on save
|
15
|
-
klass.save_safely = true
|
16
|
-
|
17
|
-
# Create unique indexes to deal with race condition
|
18
|
-
attributes.each do |attr_name|
|
19
|
-
if options[:case_sensitive]
|
20
|
-
klass.index *[attr_name] + Array.wrap(options[:scope]) << { :unique => true }
|
21
|
-
else
|
22
|
-
lowercase_key = "_lowercase_#{attr_name}"
|
23
|
-
klass.before_save { attributes[lowercase_key] = send(attr_name).downcase }
|
24
|
-
klass.index *[lowercase_key] + Array.wrap(options[:scope]) << { :unique => true }
|
25
|
-
end
|
26
|
-
end
|
15
|
+
setup!(klass)
|
27
16
|
end
|
28
17
|
|
29
18
|
def validate_each(record, attribute, value)
|
@@ -48,7 +37,24 @@ module MongoModel
|
|
48
37
|
end
|
49
38
|
|
50
39
|
private
|
51
|
-
|
40
|
+
def setup!(klass)
|
41
|
+
@klass = klass
|
42
|
+
|
43
|
+
# Enable safety checks on save
|
44
|
+
klass.save_safely = true
|
45
|
+
|
46
|
+
# Create unique indexes to deal with race condition
|
47
|
+
attributes.each do |attr_name|
|
48
|
+
if options[:case_sensitive]
|
49
|
+
klass.index *[attr_name] + Array.wrap(options[:scope]) << { :unique => true }
|
50
|
+
else
|
51
|
+
lowercase_key = "_lowercase_#{attr_name}"
|
52
|
+
klass.before_save { attributes[lowercase_key] = send(attr_name).downcase }
|
53
|
+
klass.index *[lowercase_key] + Array.wrap(options[:scope]) << { :unique => true }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
52
58
|
# The check for an existing value should be run from a class that
|
53
59
|
# isn't abstract. This means working down from the current class
|
54
60
|
# (self), to the first non-abstract class. Since classes don't know
|
data/lib/mongomodel/version.rb
CHANGED
data/mongomodel.gemspec
CHANGED
@@ -5,6 +5,7 @@ Gem::Specification.new do |s|
|
|
5
5
|
s.name = "mongomodel"
|
6
6
|
s.version = MongoModel::VERSION
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
|
+
s.licenses = ["MIT"]
|
8
9
|
s.authors = ["Sam Pohlenz"]
|
9
10
|
s.email = ["sam@sampohlenz.com"]
|
10
11
|
s.homepage = "http://www.mongomodel.org"
|
@@ -18,9 +19,9 @@ Gem::Specification.new do |s|
|
|
18
19
|
s.add_dependency "activemodel", ">= 3.1"
|
19
20
|
s.add_dependency "mongo", "~> 1.8"
|
20
21
|
|
21
|
-
s.add_development_dependency "bundler",
|
22
|
-
s.add_development_dependency "rspec",
|
23
|
-
s.add_development_dependency "
|
22
|
+
s.add_development_dependency "bundler", ">= 1.0"
|
23
|
+
s.add_development_dependency "rspec", "~> 2.8"
|
24
|
+
s.add_development_dependency "minitest", ">= 4.2"
|
24
25
|
|
25
26
|
s.files = `git ls-files`.split("\n")
|
26
27
|
s.require_path = 'lib'
|
@@ -3,8 +3,16 @@ require 'spec_helper'
|
|
3
3
|
module MongoModel
|
4
4
|
specs_for(Document, EmbeddedDocument) do
|
5
5
|
shared_examples_for "ActiveModel" do
|
6
|
-
|
7
|
-
|
6
|
+
begin
|
7
|
+
require 'minitest/assertions'
|
8
|
+
rescue LoadError
|
9
|
+
require 'minitest/unit'
|
10
|
+
end
|
11
|
+
|
12
|
+
include Minitest::Assertions
|
13
|
+
|
14
|
+
attr_accessor :assertions
|
15
|
+
before(:all) { self.assertions = 0 }
|
8
16
|
|
9
17
|
include ActiveModel::Lint::Tests
|
10
18
|
|
data/spec/spec_helper.rb
CHANGED
@@ -12,6 +12,12 @@ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each { |f| require f }
|
|
12
12
|
require 'active_support/time'
|
13
13
|
Time.zone = "Australia/Melbourne"
|
14
14
|
|
15
|
+
begin
|
16
|
+
I18n.config.enforce_available_locales = false
|
17
|
+
rescue NoMethodError
|
18
|
+
# Ignore
|
19
|
+
end
|
20
|
+
|
15
21
|
RSpec.configure do |config|
|
16
22
|
include SpecsFor
|
17
23
|
include DefineClass
|
@@ -21,4 +21,17 @@ module DefineClass
|
|
21
21
|
klass
|
22
22
|
end
|
23
23
|
end
|
24
|
+
|
25
|
+
def define_module(name, &block)
|
26
|
+
before(:each) do
|
27
|
+
Object.send(:remove_const, name) if Object.const_defined?(name)
|
28
|
+
|
29
|
+
mod = Module.new
|
30
|
+
|
31
|
+
Object.const_set(name, mod)
|
32
|
+
|
33
|
+
mod.class_eval(&block) if block_given?
|
34
|
+
mod
|
35
|
+
end
|
36
|
+
end
|
24
37
|
end
|
metadata
CHANGED
@@ -1,112 +1,99 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongomodel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
5
|
-
prerelease:
|
4
|
+
version: 0.5.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Sam Pohlenz
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-02-24 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activesupport
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '3.1'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '3.1'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: activemodel
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '3.1'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '3.1'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: mongo
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- - ~>
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '1.8'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- - ~>
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '1.8'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: bundler
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - ">="
|
68
60
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.0
|
61
|
+
version: '1.0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - ">="
|
76
67
|
- !ruby/object:Gem::Version
|
77
|
-
version: 1.0
|
68
|
+
version: '1.0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: rspec
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- - ~>
|
73
|
+
- - "~>"
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '2.8'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- - ~>
|
80
|
+
- - "~>"
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '2.8'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
84
|
+
name: minitest
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - ">="
|
100
88
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
89
|
+
version: '4.2'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - ">="
|
108
95
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
96
|
+
version: '4.2'
|
110
97
|
description: MongoModel is a MongoDB ORM for Ruby/Rails similar to ActiveRecord and
|
111
98
|
DataMapper.
|
112
99
|
email:
|
@@ -115,8 +102,8 @@ executables: []
|
|
115
102
|
extensions: []
|
116
103
|
extra_rdoc_files: []
|
117
104
|
files:
|
118
|
-
- .gitignore
|
119
|
-
- .travis.yml
|
105
|
+
- ".gitignore"
|
106
|
+
- ".travis.yml"
|
120
107
|
- Gemfile
|
121
108
|
- Guardfile
|
122
109
|
- LICENSE
|
@@ -129,7 +116,8 @@ files:
|
|
129
116
|
- gemfiles/rails-3.2.gemfile
|
130
117
|
- gemfiles/rails-4-observers.gemfile
|
131
118
|
- gemfiles/rails-4-protected-attributes.gemfile
|
132
|
-
- gemfiles/rails-4.gemfile
|
119
|
+
- gemfiles/rails-4.0.gemfile
|
120
|
+
- gemfiles/rails-4.1.gemfile
|
133
121
|
- lib/mongomodel.rb
|
134
122
|
- lib/mongomodel/attributes/mongo.rb
|
135
123
|
- lib/mongomodel/attributes/store.rb
|
@@ -289,30 +277,27 @@ files:
|
|
289
277
|
- spec/support/matchers/run_callbacks.rb
|
290
278
|
- spec/support/models.rb
|
291
279
|
homepage: http://www.mongomodel.org
|
292
|
-
licenses:
|
280
|
+
licenses:
|
281
|
+
- MIT
|
282
|
+
metadata: {}
|
293
283
|
post_install_message:
|
294
284
|
rdoc_options: []
|
295
285
|
require_paths:
|
296
286
|
- lib
|
297
287
|
required_ruby_version: !ruby/object:Gem::Requirement
|
298
|
-
none: false
|
299
288
|
requirements:
|
300
|
-
- -
|
289
|
+
- - ">="
|
301
290
|
- !ruby/object:Gem::Version
|
302
291
|
version: '0'
|
303
|
-
segments:
|
304
|
-
- 0
|
305
|
-
hash: -3084382199068025224
|
306
292
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
307
|
-
none: false
|
308
293
|
requirements:
|
309
|
-
- -
|
294
|
+
- - ">="
|
310
295
|
- !ruby/object:Gem::Version
|
311
296
|
version: 1.3.6
|
312
297
|
requirements: []
|
313
298
|
rubyforge_project: mongomodel
|
314
|
-
rubygems_version:
|
299
|
+
rubygems_version: 2.2.2
|
315
300
|
signing_key:
|
316
|
-
specification_version:
|
301
|
+
specification_version: 4
|
317
302
|
summary: MongoDB ORM for Ruby/Rails
|
318
303
|
test_files: []
|
data/gemfiles/rails-4.gemfile
DELETED