og 0.8.0 → 0.9.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.
- data/AUTHORS +3 -4
- data/ChangeLog +418 -0
- data/LICENSE +1 -1
- data/README.og +20 -16
- data/RELEASES.og +18 -0
- data/Rakefile +5 -7
- data/examples/og/run.rb +2 -2
- data/lib/glue.rb +13 -9
- data/lib/glue/array.rb +1 -1
- data/lib/glue/cache.rb +1 -1
- data/lib/glue/flexob.rb +12 -0
- data/lib/glue/hash.rb +1 -1
- data/lib/glue/inflector.rb +2 -2
- data/lib/glue/logger.rb +4 -8
- data/lib/glue/misc.rb +14 -0
- data/lib/glue/number.rb +1 -1
- data/lib/glue/object.rb +26 -0
- data/lib/glue/pool.rb +1 -1
- data/lib/glue/property.rb +84 -91
- data/lib/glue/string.rb +1 -1
- data/lib/glue/time.rb +1 -1
- data/lib/glue/validation.rb +1 -1
- data/lib/og.rb +66 -65
- data/lib/og/backend.rb +1 -1
- data/lib/og/backends/mysql.rb +48 -52
- data/lib/og/backends/psql.rb +34 -37
- data/lib/og/connection.rb +15 -15
- data/lib/og/enchant.rb +16 -9
- data/lib/og/meta.rb +127 -54
- data/lib/og/mock.rb +18 -18
- data/lib/og/version.rb +7 -7
- data/test/tc_og.rb +41 -4
- metadata +6 -3
data/lib/og/mock.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
# code:
|
2
1
|
# * George Moschovitis <gm@navel.gr>
|
3
2
|
# * Thomas Quas <tquas@yahoo.com>
|
4
|
-
#
|
5
|
-
# (c) 2004 Navel, all rights reserved.
|
3
|
+
# (c) 2004-2005 Navel, all rights reserved.
|
6
4
|
# $Id$
|
7
5
|
|
8
6
|
require 'og'
|
@@ -12,15 +10,12 @@ require_gem 'flexmock'
|
|
12
10
|
|
13
11
|
class Og
|
14
12
|
|
15
|
-
# = MockDatabase
|
16
|
-
#
|
17
13
|
# A utility object to Mock a Database in test units.
|
18
14
|
# Extends the standard FlexMock object.
|
19
|
-
#
|
20
15
|
#--
|
21
16
|
# TODO: Factor out common functionality with Database
|
22
17
|
# to avoid code duplication.
|
23
|
-
|
18
|
+
|
24
19
|
class MockDatabase < ::FlexMock
|
25
20
|
include Og::Enchant
|
26
21
|
|
@@ -40,16 +35,19 @@ class MockDatabase < ::FlexMock
|
|
40
35
|
end
|
41
36
|
|
42
37
|
# hash of configuration options.
|
38
|
+
|
43
39
|
attr_accessor :config
|
44
40
|
|
45
41
|
# Pool of connections to the backend.
|
42
|
+
|
46
43
|
attr_accessor :connection_pool
|
47
44
|
|
48
45
|
# Managed classes.
|
46
|
+
|
49
47
|
attr_accessor :managed_classes
|
50
48
|
|
51
49
|
# Initialize the database interface.
|
52
|
-
|
50
|
+
|
53
51
|
def initialize
|
54
52
|
# Initialize FlexMock
|
55
53
|
super
|
@@ -61,6 +59,7 @@ class MockDatabase < ::FlexMock
|
|
61
59
|
if Og.auto_manage_classes
|
62
60
|
# automatically manage classes with properties and metadata.
|
63
61
|
# gmosx: Any idea how to optimize this?
|
62
|
+
|
64
63
|
classes_to_manage = []
|
65
64
|
ObjectSpace.each_object(Class) do |c|
|
66
65
|
if c.respond_to?(:__props) and c.__props
|
@@ -73,31 +72,32 @@ class MockDatabase < ::FlexMock
|
|
73
72
|
end
|
74
73
|
|
75
74
|
# use the newly created database.
|
75
|
+
|
76
76
|
Og.use(self)
|
77
77
|
end
|
78
78
|
|
79
79
|
# Shutdown the database interface.
|
80
|
-
|
80
|
+
|
81
81
|
def shutdown
|
82
82
|
end
|
83
83
|
alias_method :close, :shutdown
|
84
84
|
|
85
85
|
# Get a connection from the pool to access the database.
|
86
86
|
# Stores the connection in a thread-local variable.
|
87
|
-
|
87
|
+
|
88
88
|
def get_connection
|
89
89
|
# nop
|
90
90
|
end
|
91
91
|
alias_method :connection, :get_connection
|
92
92
|
|
93
93
|
# Restore an unused connection to the pool.
|
94
|
-
|
94
|
+
|
95
95
|
def put_connection
|
96
96
|
# nop
|
97
97
|
end
|
98
98
|
|
99
99
|
# Register a standard Ruby class as managed.
|
100
|
-
|
100
|
+
|
101
101
|
def manage(klass)
|
102
102
|
return if managed?(klass) or klass.ancestors.include?(Og::Unmanageable)
|
103
103
|
|
@@ -111,7 +111,7 @@ class MockDatabase < ::FlexMock
|
|
111
111
|
end
|
112
112
|
|
113
113
|
# Helper method to set multiple managed classes.
|
114
|
-
|
114
|
+
|
115
115
|
def manage_classes(*klasses)
|
116
116
|
for klass in klasses
|
117
117
|
manage(klass)
|
@@ -119,19 +119,19 @@ class MockDatabase < ::FlexMock
|
|
119
119
|
end
|
120
120
|
|
121
121
|
# Stop managing a Ruby class
|
122
|
-
|
122
|
+
|
123
123
|
def unmanage(klass)
|
124
124
|
@managed_classes.delete(klass)
|
125
125
|
end
|
126
126
|
|
127
127
|
# Is this class managed?
|
128
|
-
|
128
|
+
|
129
129
|
def managed?(klass)
|
130
130
|
return @managed_classes.include?(klass)
|
131
131
|
end
|
132
132
|
|
133
133
|
# Add standard og functionality to the class
|
134
|
-
|
134
|
+
|
135
135
|
def convert(klass)
|
136
136
|
klass.class_eval %{
|
137
137
|
DBTABLE = "#{Og::Backend.table(klass)}"
|
@@ -144,7 +144,7 @@ class MockDatabase < ::FlexMock
|
|
144
144
|
end
|
145
145
|
|
146
146
|
# Automatically wrap connection methods.
|
147
|
-
|
147
|
+
|
148
148
|
def self.wrap_method(method, args)
|
149
149
|
args = args.split(/,/)
|
150
150
|
class_eval %{
|
@@ -163,4 +163,4 @@ class MockDatabase < ::FlexMock
|
|
163
163
|
end
|
164
164
|
end
|
165
165
|
|
166
|
-
end
|
166
|
+
end
|
data/lib/og/version.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
|
2
|
-
# George Moschovitis <gm@navel.gr>
|
1
|
+
# * George Moschovitis <gm@navel.gr>
|
3
2
|
# (c) 2004-2005 Navel, all rights reserved.
|
4
|
-
# $Id: version.rb
|
5
|
-
#++
|
3
|
+
# $Id: version.rb 248 2005-01-31 13:38:34Z gmosx $
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
class Og
|
6
|
+
# The version of Og.
|
7
|
+
|
8
|
+
Version = '0.9.3'
|
9
|
+
end
|
data/test/tc_og.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
2
|
|
3
3
|
require 'test/unit'
|
4
|
+
|
4
5
|
require 'og'
|
5
6
|
|
6
7
|
module Test # :nodoc: all
|
@@ -9,12 +10,17 @@ module Test # :nodoc: all
|
|
9
10
|
# correctly escaped.
|
10
11
|
class User
|
11
12
|
prop_accessor :name, String
|
12
|
-
|
13
|
+
prop_accessor :banned, TrueClass
|
14
|
+
|
13
15
|
def initialize(name = nil)
|
14
16
|
@name = name
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
20
|
+
class Role
|
21
|
+
prop_accessor :title, String
|
22
|
+
end
|
23
|
+
|
18
24
|
class Comment; end
|
19
25
|
|
20
26
|
class Article
|
@@ -46,10 +52,10 @@ class Article
|
|
46
52
|
end
|
47
53
|
|
48
54
|
class Comment
|
49
|
-
belongs_to :article, Test::Article, :extra_sql => 'NOT NULL'
|
50
|
-
belongs_to :author, Test::User
|
51
55
|
prop_accessor :body, String
|
52
56
|
prop_accessor :create_time, Time
|
57
|
+
belongs_to :article, Test::Article, :extra_sql => 'NOT NULL'
|
58
|
+
belongs_to :author, Test::User
|
53
59
|
|
54
60
|
def initialize(body = nil)
|
55
61
|
@create_time = Time.now
|
@@ -73,6 +79,11 @@ class MyClass
|
|
73
79
|
include Test::MyMixin
|
74
80
|
end
|
75
81
|
|
82
|
+
class OrderItem
|
83
|
+
prop_accessor :number, Fixnum
|
84
|
+
refers_to :article, Article
|
85
|
+
end
|
86
|
+
|
76
87
|
class TC_N_OG < Test::Unit::TestCase
|
77
88
|
|
78
89
|
def setup
|
@@ -176,9 +187,17 @@ class TC_N_OG < Test::Unit::TestCase
|
|
176
187
|
|
177
188
|
assert_equal("gmosx", comments[0].author.name)
|
178
189
|
|
190
|
+
article.delete_all_comments
|
191
|
+
assert article.comments.empty?
|
192
|
+
|
193
|
+
# test cascading delete
|
194
|
+
|
195
|
+
article.add_comment(Comment.new("hello"))
|
196
|
+
article.add_comment(Comment.new("world"))
|
197
|
+
|
179
198
|
Article.delete(article)
|
180
199
|
|
181
|
-
|
200
|
+
assert Comment.all.empty?
|
182
201
|
|
183
202
|
comment.delete!
|
184
203
|
|
@@ -199,6 +218,24 @@ class TC_N_OG < Test::Unit::TestCase
|
|
199
218
|
# test create
|
200
219
|
article = Article.create("title", "body")
|
201
220
|
assert_equal(3, article.oid)
|
221
|
+
|
222
|
+
# test refers_to
|
223
|
+
|
224
|
+
oi = OrderItem.new
|
225
|
+
oi.article = article
|
226
|
+
oi.save
|
227
|
+
|
228
|
+
assert_equal article.oid, oi.article_oid
|
229
|
+
|
230
|
+
# bug
|
231
|
+
|
232
|
+
user = User['gmosx']
|
233
|
+
user.banned = true
|
234
|
+
user.save!
|
235
|
+
|
236
|
+
user = User['gmosx']
|
237
|
+
assert_equal true, user.banned
|
238
|
+
|
202
239
|
end
|
203
240
|
|
204
241
|
end
|
metadata
CHANGED
@@ -3,14 +3,14 @@ rubygems_version: 0.8.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: og
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2005-01
|
6
|
+
version: 0.9.3
|
7
|
+
date: 2005-02-01
|
8
8
|
summary: Og (ObjectGraph)
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
11
|
email: gm@navel.gr
|
12
12
|
homepage: http://www.navel.gr/og
|
13
|
-
rubyforge_project:
|
13
|
+
rubyforge_project: nitro
|
14
14
|
description: An efficient and transparent Object-Relational mapping library
|
15
15
|
autorequire: og
|
16
16
|
default_executable:
|
@@ -47,9 +47,12 @@ files:
|
|
47
47
|
- lib/glue/number.rb
|
48
48
|
- lib/glue/time.rb
|
49
49
|
- lib/glue/property.rb
|
50
|
+
- lib/glue/misc.rb
|
50
51
|
- lib/glue/macro.rb
|
52
|
+
- lib/glue/flexob.rb
|
51
53
|
- lib/glue/cache.rb
|
52
54
|
- lib/glue/string.rb
|
55
|
+
- lib/glue/object.rb
|
53
56
|
- lib/glue/array.rb
|
54
57
|
- lib/glue/validation.rb
|
55
58
|
- lib/glue/attribute.rb
|