riot-mongoid 1.0.0 → 1.1.0
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/VERSION +1 -1
- data/lib/riot-mongoid.rb +19 -0
- data/test/riot-mongoid_test.rb +49 -19
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1.0
|
data/lib/riot-mongoid.rb
CHANGED
@@ -16,4 +16,23 @@ module RiotMongoid
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end # HasFieldAssertion
|
19
|
+
|
20
|
+
class HasAssociationAssertion < Riot::AssertionMacro
|
21
|
+
register :has_association
|
22
|
+
|
23
|
+
def evaluate(model, *association_macro_info)
|
24
|
+
assoc_type, assoc_name, options = association_macro_info
|
25
|
+
assoc = model.associations[assoc_name.to_s]
|
26
|
+
options ||= {}
|
27
|
+
if assoc_name.nil?
|
28
|
+
fail("association name and potential options must be specified with this assertion macro")
|
29
|
+
elsif assoc.nil? || assoc.macro != assoc_type.to_sym
|
30
|
+
fail("expected #{model} to have association #{assoc_name} of type #{assoc_type}")
|
31
|
+
else
|
32
|
+
options_valid = options.all? { |key,value| assoc.send(key) == value }
|
33
|
+
options_valid ? pass("#{model} has '#{assoc_type}' association '#{assoc_name}' with options #{options.inspect}") :
|
34
|
+
fail("expected model to have options #{options.inspect} on association #{assoc_name}")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end # HasAssociationAssertion
|
19
38
|
end # RiotMongoid
|
data/test/riot-mongoid_test.rb
CHANGED
@@ -8,31 +8,61 @@ context "riot-mongoid" do
|
|
8
8
|
include Mongoid::Document
|
9
9
|
field :name, :type => String
|
10
10
|
field :rad, :type => Boolean, :default => false
|
11
|
+
|
12
|
+
has_many :things
|
13
|
+
belongs_to :another_thing, :inverse_of => :word
|
14
|
+
has_many_related :relations
|
11
15
|
end
|
12
16
|
test_class
|
13
17
|
end
|
14
18
|
|
15
|
-
|
16
|
-
|
17
|
-
|
19
|
+
context "has_field" do
|
20
|
+
asserts "the macro passes when the field options are specified" do
|
21
|
+
RiotMongoid::HasFieldAssertion.new.evaluate(topic, :name, :type => String).first
|
22
|
+
end.equals(:pass)
|
23
|
+
|
24
|
+
asserts "the macro pass message is useful" do
|
25
|
+
RiotMongoid::HasFieldAssertion.new.evaluate(topic, :name, :type => String).last
|
26
|
+
end.matches(/has field 'name' with options \{:type=>String\}/)
|
27
|
+
|
28
|
+
asserts "the macro fails when the field options are not specified" do
|
29
|
+
RiotMongoid::HasFieldAssertion.new.evaluate(topic, :name).first
|
30
|
+
end.equals(:fail)
|
31
|
+
|
32
|
+
asserts "the macro fails when invalid field options are specified" do
|
33
|
+
RiotMongoid::HasFieldAssertion.new.evaluate(topic, :name, :type => Date).first
|
34
|
+
end.equals(:fail)
|
35
|
+
|
36
|
+
asserts "the macro passes with a slightly more complex field setup" do
|
37
|
+
RiotMongoid::HasFieldAssertion.new.evaluate(topic, :rad, :type => Boolean, :default => false).first
|
38
|
+
end.equals(:pass)
|
39
|
+
|
40
|
+
asserts "the macro fails with a slightly more complex field setup and a bad assertion" do
|
41
|
+
RiotMongoid::HasFieldAssertion.new.evaluate(topic, :rad, :type => Boolean, :default => true).first
|
42
|
+
end.equals(:fail)
|
43
|
+
end # has_field
|
44
|
+
|
45
|
+
context "has_association" do
|
46
|
+
|
47
|
+
asserts "the macro passes when the association options are specified for a has_many" do
|
48
|
+
RiotMongoid::HasAssociationAssertion.new.evaluate(topic, :has_many, :things).first
|
49
|
+
end.equals(:pass)
|
18
50
|
|
19
|
-
|
20
|
-
|
21
|
-
|
51
|
+
asserts "the macro passes when the association options are specified for a belongs_to" do
|
52
|
+
RiotMongoid::HasAssociationAssertion.new.evaluate(topic, :belongs_to, :another_thing, :inverse_of => :word).first
|
53
|
+
end.equals(:pass)
|
22
54
|
|
23
|
-
|
24
|
-
|
25
|
-
|
55
|
+
asserts "the macro pass message is useful" do
|
56
|
+
RiotMongoid::HasAssociationAssertion.new.evaluate(topic, :belongs_to, :another_thing, :inverse_of => :word).last
|
57
|
+
end.matches(/has 'belongs_to' association 'another_thing' with options \{:inverse_of=>:word\}/)
|
26
58
|
|
27
|
-
|
28
|
-
|
29
|
-
|
59
|
+
asserts "the macro passes when the association options are specified for a has_many_related" do
|
60
|
+
RiotMongoid::HasAssociationAssertion.new.evaluate(topic, :has_many_related, :relations).first
|
61
|
+
end.equals(:pass)
|
30
62
|
|
31
|
-
|
32
|
-
|
33
|
-
|
63
|
+
asserts "the macro fails when no association name is specified" do
|
64
|
+
RiotMongoid::HasAssociationAssertion.new.evaluate(topic, :has_many).first
|
65
|
+
end.equals(:fail)
|
34
66
|
|
35
|
-
|
36
|
-
|
37
|
-
end.equals(:fail)
|
38
|
-
end
|
67
|
+
end # has_association
|
68
|
+
end # riot-mongoid
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riot-mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- gabrielg
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-03-
|
12
|
+
date: 2010-03-08 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|