yaml-model 1.3.1 → 1.3.2
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/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"
|