yaml-model 1.3.1 → 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/yaml-model.rb +9 -0
- data/lib/yaml-model/version.rb +1 -1
- data/test/delete.rb +47 -0
- data/test/has.rb +35 -0
- data/test/to_s.rb +16 -0
- metadata +7 -5
data/lib/yaml-model.rb
CHANGED
@@ -151,6 +151,10 @@ class YAML_Model
|
|
151
151
|
@@database[ :data ][ self.class.name ].delete( self )
|
152
152
|
end
|
153
153
|
|
154
|
+
def to_s
|
155
|
+
"#{self.class.name}[#{id}]"
|
156
|
+
end
|
157
|
+
|
154
158
|
def self.sort_by( *attributes )
|
155
159
|
define_method '<=>'.to_sym do |other|
|
156
160
|
attributes.map{|a|self.send(a)} <=> attributes.map{|a|other.send(a)}
|
@@ -190,6 +194,11 @@ end" )
|
|
190
194
|
via_instance.send( "#{that_attribute_singular}=".to_sym, that_instance )
|
191
195
|
end
|
192
196
|
|
197
|
+
define_method "remove_#{that_attribute_singular}".to_sym do |that_instance|
|
198
|
+
via_instance = via_class.select{|n| n.send(this_attribute_singular).id == self.id && n.send(that_attribute_singular).id == that_instance.id }.first
|
199
|
+
via_instance.send( :delete )
|
200
|
+
end
|
201
|
+
|
193
202
|
else
|
194
203
|
|
195
204
|
define_method that_attribute_plural do
|
data/lib/yaml-model/version.rb
CHANGED
data/test/delete.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'yaml-model'
|
2
|
+
|
3
|
+
describe YAML_Model, ".delete" do
|
4
|
+
|
5
|
+
DeleteModelInstance = Class.new( YAML_Model )
|
6
|
+
|
7
|
+
DeleteModelInstanceOne = Class.new( YAML_Model )
|
8
|
+
DeleteModelInstanceMany = Class.new( YAML_Model )
|
9
|
+
|
10
|
+
class DeleteModelInstanceOne < YAML_Model
|
11
|
+
has :many, DeleteModelInstanceMany
|
12
|
+
end
|
13
|
+
|
14
|
+
class DeleteModelInstanceMany < YAML_Model
|
15
|
+
type :one, DeleteModelInstanceOne
|
16
|
+
init :one
|
17
|
+
end
|
18
|
+
|
19
|
+
before( :each ) do
|
20
|
+
YAML_Model.reset!
|
21
|
+
end
|
22
|
+
|
23
|
+
it "Deletes model instances from self" do
|
24
|
+
a = DeleteModelInstance.create
|
25
|
+
b = DeleteModelInstance.create
|
26
|
+
c = DeleteModelInstance.create
|
27
|
+
DeleteModelInstance.all.should == [ a, b, c ]
|
28
|
+
b.delete
|
29
|
+
DeleteModelInstance.all.should == [ a, c ]
|
30
|
+
a.delete
|
31
|
+
DeleteModelInstance.all.should == [ c ]
|
32
|
+
c.delete
|
33
|
+
DeleteModelInstance.all.should == [ ]
|
34
|
+
end
|
35
|
+
|
36
|
+
it "Deletes model instances when referenced" do
|
37
|
+
one = DeleteModelInstanceOne.create
|
38
|
+
many_a = DeleteModelInstanceMany.create( one )
|
39
|
+
many_b = DeleteModelInstanceMany.create( one )
|
40
|
+
|
41
|
+
many_a.delete
|
42
|
+
|
43
|
+
DeleteModelInstanceMany.all.should == [ many_b ]
|
44
|
+
one.many.should == [ many_b ]
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
data/test/has.rb
CHANGED
@@ -110,6 +110,41 @@ describe YAML_Model, "::has" do
|
|
110
110
|
Tag.instance_methods.index( :add_post ).should_not == nil
|
111
111
|
end
|
112
112
|
|
113
|
+
it "adds instances in many_to_many relationships" do
|
114
|
+
dummy_user = User.create
|
115
|
+
post = Post.create( dummy_user )
|
116
|
+
tag_a = Tag.create
|
117
|
+
tag_b = Tag.create
|
118
|
+
post.tags.should == []
|
119
|
+
post.add_tag( tag_b )
|
120
|
+
post.tags.should == [ tag_b ]
|
121
|
+
tag_b.posts.should == [ post ]
|
122
|
+
post.add_tag( tag_a )
|
123
|
+
post.tags.sort{|a,b|a.id<=>b.id}.should == [ tag_a, tag_b ]
|
124
|
+
tag_a.posts.should == [ post ]
|
125
|
+
end
|
126
|
+
|
127
|
+
it "adds a remove_ method when the relationship is many_to_many" do
|
128
|
+
Post.instance_methods.index( :remove_tag ).should_not == nil
|
129
|
+
Tag.instance_methods.index( :remove_post ).should_not == nil
|
130
|
+
end
|
131
|
+
|
132
|
+
it "removes instances in many_to_many relationships" do
|
133
|
+
dummy_user = User.create
|
134
|
+
post = Post.create( dummy_user )
|
135
|
+
tag_a = Tag.create
|
136
|
+
tag_b = Tag.create
|
137
|
+
post.add_tag( tag_a )
|
138
|
+
post.add_tag( tag_b )
|
139
|
+
post.tags.sort{|a,b|a.id<=>b.id}.should == [ tag_a, tag_b ]
|
140
|
+
post.remove_tag( tag_a )
|
141
|
+
post.tags.should == [ tag_b ]
|
142
|
+
tag_a.posts.should == []
|
143
|
+
post.remove_tag( tag_b )
|
144
|
+
post.tags.should == []
|
145
|
+
tag_b.posts.should == []
|
146
|
+
end
|
147
|
+
|
113
148
|
it "handles many to many relationships seamlessly" do
|
114
149
|
dummy_user = User.create
|
115
150
|
|
data/test/to_s.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'yaml-model'
|
2
|
+
|
3
|
+
describe YAML_Model, ".to_s" do
|
4
|
+
|
5
|
+
AModel = Class.new( YAML_Model )
|
6
|
+
|
7
|
+
before( :each ) do
|
8
|
+
YAML_Model.reset!
|
9
|
+
end
|
10
|
+
|
11
|
+
it "Stringifies with the correct id" do
|
12
|
+
next_oid = YAML_Model.next_oid
|
13
|
+
AModel.create.to_s.should == "AModel[#{next_oid}]"
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 1.3.
|
8
|
+
- 2
|
9
|
+
version: 1.3.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Clive Crous
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-02-
|
17
|
+
date: 2011-02-16 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -78,8 +78,10 @@ files:
|
|
78
78
|
- lib/yaml-model.rb
|
79
79
|
- lib/yaml-model/version.rb
|
80
80
|
- test/create.rb
|
81
|
+
- test/delete.rb
|
81
82
|
- test/has.rb
|
82
83
|
- test/init.rb
|
84
|
+
- test/to_s.rb
|
83
85
|
- test/type.rb
|
84
86
|
- yaml-model.gemspec
|
85
87
|
has_rdoc: true
|
@@ -96,7 +98,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
96
98
|
requirements:
|
97
99
|
- - ">="
|
98
100
|
- !ruby/object:Gem::Version
|
99
|
-
hash: -
|
101
|
+
hash: -230929969
|
100
102
|
segments:
|
101
103
|
- 0
|
102
104
|
version: "0"
|
@@ -105,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
107
|
requirements:
|
106
108
|
- - ">="
|
107
109
|
- !ruby/object:Gem::Version
|
108
|
-
hash: -
|
110
|
+
hash: -230929969
|
109
111
|
segments:
|
110
112
|
- 0
|
111
113
|
version: "0"
|