mongomodel 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mongomodel/concerns/associations/base/association.rb +3 -1
- data/lib/mongomodel/document/scopes.rb +3 -3
- data/lib/mongomodel/version.rb +1 -1
- data/spec/mongomodel/concerns/associations/base/association_spec.rb +57 -0
- data/spec/mongomodel/concerns/associations/belongs_to_spec.rb +1 -1
- data/spec/mongomodel/concerns/associations/has_many_by_ids_spec.rb +1 -1
- data/spec/mongomodel/document/scopes_spec.rb +16 -13
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 730ec72969141979066d7a38f450b9622485bb55
|
4
|
+
data.tar.gz: b72b388e3b6b6d041dd4f6431233d25c0aeddd8c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b954cd2ce4ed17b3dc9406572d8523092db0d249dfe9c1c61418b96b15702a91df7e740e4ed9af3581d41e5f37c8497447fceb794f7c01f661aa935007999f39
|
7
|
+
data.tar.gz: 0a92c9c4215cea8d312d9ecd13684c8bf9d54cfada4410e6587902506edc6093314672a39e448ce07659bf1991b82eb24e77879227f15eebce938e8f6f0dbc3c
|
@@ -21,7 +21,9 @@ module MongoModel
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def ensure_class(value)
|
24
|
-
|
24
|
+
unless value.is_a?(klass) || value.class.name.constantize <= klass.name.constantize
|
25
|
+
raise AssociationTypeMismatch, "#{klass} expected, got #{value.class}"
|
26
|
+
end
|
25
27
|
end
|
26
28
|
|
27
29
|
protected
|
@@ -32,13 +32,13 @@ module MongoModel
|
|
32
32
|
end
|
33
33
|
|
34
34
|
scopes[name] = lambda do |*args|
|
35
|
-
|
36
|
-
scoped.merge(s)
|
35
|
+
scope.is_a?(Proc) ? scope.call(*args) : scope
|
37
36
|
end
|
38
37
|
|
39
38
|
singleton_class.class_eval do
|
40
39
|
define_method(name) do |*args|
|
41
|
-
scopes[name].call(*args)
|
40
|
+
s = scopes[name].call(*args)
|
41
|
+
scoped.merge(s)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
data/lib/mongomodel/version.rb
CHANGED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module MongoModel
|
4
|
+
module Associations
|
5
|
+
module Base
|
6
|
+
describe Association do
|
7
|
+
define_class(:Chapter, MongoModel::Document)
|
8
|
+
define_class(:IllustratedChapter, :Chapter)
|
9
|
+
define_class(:NonChapter, MongoModel::Document)
|
10
|
+
|
11
|
+
let(:klass) { Chapter }
|
12
|
+
let(:definition) { double(:klass => klass) }
|
13
|
+
let(:instance) { double }
|
14
|
+
|
15
|
+
subject! { Association.new(definition, instance) }
|
16
|
+
|
17
|
+
describe "#ensure_class" do
|
18
|
+
it "accepts instances of the definition class" do
|
19
|
+
subject.ensure_class(Chapter.new)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "accepts instances of a subclass of the definition class" do
|
23
|
+
subject.ensure_class(IllustratedChapter.new)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "raises an error if passed an object that is not an instance of the definition class" do
|
27
|
+
lambda {
|
28
|
+
subject.ensure_class(NonChapter.new)
|
29
|
+
}.should raise_error(MongoModel::AssociationTypeMismatch)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "accepts instances of the definition class that have been reloaded" do
|
33
|
+
# Ensure Chapter class name is cached on the original class
|
34
|
+
Chapter.name
|
35
|
+
|
36
|
+
Object.send(:remove_const, :Chapter)
|
37
|
+
Object.const_set(:Chapter, Class.new(MongoModel::Document))
|
38
|
+
|
39
|
+
subject.ensure_class(Chapter.new)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "accepts stale instances of a class that has been reloaded" do
|
43
|
+
chapter = Chapter.new
|
44
|
+
|
45
|
+
Object.send(:remove_const, :Chapter)
|
46
|
+
Object.const_set(:Chapter, Class.new(MongoModel::Document))
|
47
|
+
|
48
|
+
definition = double(:klass => Chapter)
|
49
|
+
association = Association.new(definition, instance)
|
50
|
+
|
51
|
+
association.ensure_class(chapter)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -87,7 +87,7 @@ module MongoModel
|
|
87
87
|
let(:non_user) { NonUser.create! }
|
88
88
|
|
89
89
|
it "raises a AssociationTypeMismatch exception" do
|
90
|
-
lambda { subject.user = non_user }.should raise_error(AssociationTypeMismatch, "
|
90
|
+
lambda { subject.user = non_user }.should raise_error(AssociationTypeMismatch, "User expected, got NonUser")
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
@@ -123,7 +123,7 @@ module MongoModel
|
|
123
123
|
describe "adding a non-chapter" do
|
124
124
|
def self.should_raise(message, &block)
|
125
125
|
it "raises an AsssociationTypeMismatch error when #{message}" do
|
126
|
-
lambda { instance_eval(&block) }.should raise_error(AssociationTypeMismatch, "
|
126
|
+
lambda { instance_eval(&block) }.should raise_error(AssociationTypeMismatch, "Chapter expected, got NonChapter")
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
@@ -51,37 +51,40 @@ module MongoModel
|
|
51
51
|
end
|
52
52
|
|
53
53
|
describe "#scope" do
|
54
|
-
|
55
|
-
|
56
|
-
scope :published, where(:published => true)
|
57
|
-
end
|
54
|
+
define_class(:Post, Document) do
|
55
|
+
scope :published, where(:published => true)
|
58
56
|
|
57
|
+
scope :latest, lambda { |num| order(:created_at.desc).limit(num) }
|
58
|
+
|
59
|
+
scope :recent, order(:created_at.desc).limit(5)
|
60
|
+
scope :recently_published, recent.where(:published => true)
|
61
|
+
end
|
62
|
+
|
63
|
+
define_class(:SpecialPost, :Post)
|
64
|
+
|
65
|
+
it "creates a method returning the scope" do
|
59
66
|
scope = Post.published
|
60
67
|
scope.should be_an_instance_of(MongoModel::Scope)
|
61
68
|
scope.where_values.should == [{:published => true}]
|
62
69
|
end
|
63
70
|
|
64
71
|
it "creates parameterized method returning the scope when given a lambda" do
|
65
|
-
Post.class_eval do
|
66
|
-
scope :latest, lambda { |num| order(:created_at.desc).limit(num) }
|
67
|
-
end
|
68
|
-
|
69
72
|
scope = Post.latest(4)
|
70
73
|
scope.order_values.should == [:created_at.desc]
|
71
74
|
scope.limit_value.should == 4
|
72
75
|
end
|
73
76
|
|
74
77
|
it "allows existing scopes to be built upon" do
|
75
|
-
Post.class_eval do
|
76
|
-
scope :recent, order(:created_at.desc).limit(5)
|
77
|
-
scope :recently_published, recent.where(:published => true)
|
78
|
-
end
|
79
|
-
|
80
78
|
scope = Post.recently_published
|
81
79
|
scope.where_values.should == [{:published => true}]
|
82
80
|
scope.order_values.should == [:created_at.desc]
|
83
81
|
scope.limit_value.should == 5
|
84
82
|
end
|
83
|
+
|
84
|
+
it "merges the scope with the current scope of the class it is called upon" do
|
85
|
+
scope = SpecialPost.published
|
86
|
+
scope.klass.should == SpecialPost
|
87
|
+
end
|
85
88
|
end
|
86
89
|
|
87
90
|
describe "named scopes" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongomodel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Pohlenz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -221,6 +221,7 @@ files:
|
|
221
221
|
- mongomodel.gemspec
|
222
222
|
- spec/mongomodel/attributes/store_spec.rb
|
223
223
|
- spec/mongomodel/concerns/activemodel_spec.rb
|
224
|
+
- spec/mongomodel/concerns/associations/base/association_spec.rb
|
224
225
|
- spec/mongomodel/concerns/associations/belongs_to_spec.rb
|
225
226
|
- spec/mongomodel/concerns/associations/has_many_by_foreign_key_spec.rb
|
226
227
|
- spec/mongomodel/concerns/associations/has_many_by_ids_spec.rb
|