mongomodel 0.5.2 → 0.5.3
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 +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
|