og 0.16.0 → 0.17.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/CHANGELOG +485 -0
- data/README +35 -12
- data/Rakefile +4 -7
- data/benchmark/bench.rb +1 -1
- data/doc/AUTHORS +3 -3
- data/doc/RELEASES +153 -2
- data/doc/config.txt +0 -7
- data/doc/tutorial.txt +7 -0
- data/examples/README +5 -0
- data/examples/mysql_to_psql.rb +25 -50
- data/examples/run.rb +62 -77
- data/install.rb +1 -1
- data/lib/og.rb +45 -106
- data/lib/og/collection.rb +156 -0
- data/lib/og/entity.rb +131 -0
- data/lib/og/errors.rb +10 -15
- data/lib/og/manager.rb +115 -0
- data/lib/og/{mixins → mixin}/hierarchical.rb +43 -37
- data/lib/og/{mixins → mixin}/orderable.rb +35 -35
- data/lib/og/{mixins → mixin}/timestamped.rb +0 -6
- data/lib/og/{mixins → mixin}/tree.rb +0 -4
- data/lib/og/relation.rb +178 -0
- data/lib/og/relation/belongs_to.rb +14 -0
- data/lib/og/relation/has_many.rb +62 -0
- data/lib/og/relation/has_one.rb +17 -0
- data/lib/og/relation/joins_many.rb +69 -0
- data/lib/og/relation/many_to_many.rb +17 -0
- data/lib/og/relation/refers_to.rb +31 -0
- data/lib/og/store.rb +223 -0
- data/lib/og/store/filesys.rb +113 -0
- data/lib/og/store/madeleine.rb +4 -0
- data/lib/og/store/memory.rb +291 -0
- data/lib/og/store/mysql.rb +283 -0
- data/lib/og/store/psql.rb +238 -0
- data/lib/og/store/sql.rb +599 -0
- data/lib/og/store/sqlite.rb +190 -0
- data/lib/og/store/sqlserver.rb +262 -0
- data/lib/og/types.rb +19 -0
- data/lib/og/validation.rb +0 -4
- data/test/og/{mixins → mixin}/tc_hierarchical.rb +21 -23
- data/test/og/{mixins → mixin}/tc_orderable.rb +15 -14
- data/test/og/mixin/tc_timestamped.rb +38 -0
- data/test/og/store/tc_filesys.rb +71 -0
- data/test/og/tc_relation.rb +36 -0
- data/test/og/tc_store.rb +290 -0
- data/test/og/tc_types.rb +21 -0
- metadata +54 -40
- data/examples/mock_example.rb +0 -50
- data/lib/og/adapters/base.rb +0 -706
- data/lib/og/adapters/filesys.rb +0 -117
- data/lib/og/adapters/mysql.rb +0 -350
- data/lib/og/adapters/oracle.rb +0 -368
- data/lib/og/adapters/psql.rb +0 -272
- data/lib/og/adapters/sqlite.rb +0 -265
- data/lib/og/adapters/sqlserver.rb +0 -356
- data/lib/og/database.rb +0 -290
- data/lib/og/enchant.rb +0 -149
- data/lib/og/meta.rb +0 -407
- data/lib/og/testing/mock.rb +0 -165
- data/lib/og/typemacros.rb +0 -24
- data/test/og/adapters/tc_filesys.rb +0 -83
- data/test/og/adapters/tc_sqlite.rb +0 -86
- data/test/og/adapters/tc_sqlserver.rb +0 -96
- data/test/og/tc_automanage.rb +0 -46
- data/test/og/tc_lifecycle.rb +0 -105
- data/test/og/tc_many_to_many.rb +0 -61
- data/test/og/tc_meta.rb +0 -55
- data/test/og/tc_validation.rb +0 -89
- data/test/tc_og.rb +0 -364
data/examples/run.rb
CHANGED
@@ -1,8 +1,4 @@
|
|
1
1
|
# A simple example to demonstrate the Og library.
|
2
|
-
#
|
3
|
-
# * George Moschovitis <gm@navel.gr>
|
4
|
-
# (c) 2004 Navel, all rights reserved.
|
5
|
-
# $Id: run.rb 1 2005-04-11 11:04:30Z gmosx $
|
6
2
|
|
7
3
|
require 'og'
|
8
4
|
|
@@ -13,7 +9,7 @@ $DBG = true
|
|
13
9
|
# A child class.
|
14
10
|
|
15
11
|
class Comment
|
16
|
-
|
12
|
+
property :body, String
|
17
13
|
|
18
14
|
def initialize(body = nil)
|
19
15
|
@body = body
|
@@ -24,20 +20,10 @@ class Comment
|
|
24
20
|
end
|
25
21
|
end
|
26
22
|
|
27
|
-
#
|
28
|
-
class ArticleComment < Comment; end
|
23
|
+
# = A Parent class.
|
29
24
|
|
30
|
-
# forward declaration
|
31
|
-
class UserComment < Comment; end
|
32
|
-
|
33
|
-
# forward declaration
|
34
|
-
class Part; end
|
35
|
-
|
36
|
-
# = A Parent class
|
37
|
-
#
|
38
25
|
class User
|
39
|
-
|
40
|
-
|
26
|
+
property :name, String, :unique => true
|
41
27
|
has_many :comments, UserComment
|
42
28
|
|
43
29
|
def initialize(name = nil)
|
@@ -53,31 +39,44 @@ end
|
|
53
39
|
# A parent class.
|
54
40
|
|
55
41
|
class Article
|
56
|
-
|
57
|
-
|
42
|
+
property :title, String
|
43
|
+
property :body, String
|
44
|
+
|
58
45
|
# override the default O->R mapping
|
59
|
-
|
46
|
+
|
47
|
+
property :level, Fixnum, :sql => "smallint DEFAULT 1"
|
48
|
+
|
60
49
|
# store a Ruby Hash in the Database. YAML
|
61
50
|
# is used for serializing the attribute.
|
62
51
|
# no need to define the class, but you can if you want.
|
63
|
-
|
52
|
+
|
53
|
+
property :options
|
54
|
+
|
64
55
|
# exactly like the standard Ruby attr creates only the reader.
|
56
|
+
|
65
57
|
prop :create_time, Time
|
66
58
|
|
67
59
|
# define comment relation:
|
60
|
+
|
68
61
|
has_many :comments, ArticleComment
|
69
62
|
|
70
63
|
has_many :parts, Part
|
64
|
+
|
65
|
+
# many to many relation.
|
66
|
+
|
67
|
+
many_to_many Category
|
71
68
|
|
72
69
|
# define author relation:
|
70
|
+
|
73
71
|
belongs_to :author, User
|
74
72
|
|
75
73
|
# this attribute is NOT stored in the db.
|
74
|
+
|
76
75
|
attr_accessor :other_options
|
77
76
|
|
78
77
|
# Managed object constructors with no args, take *args
|
79
78
|
# as parameter to allow for Mixin chaining.
|
80
|
-
|
79
|
+
|
81
80
|
def initialize(title = nil, body = nil)
|
82
81
|
@title, @body = title, body
|
83
82
|
@create_time = Time.now
|
@@ -93,11 +92,12 @@ end
|
|
93
92
|
# A parent class.
|
94
93
|
|
95
94
|
class Category
|
96
|
-
|
97
|
-
|
95
|
+
property :title, String
|
96
|
+
property :body, String
|
98
97
|
|
99
98
|
# define a 'many to many' relation.
|
100
|
-
|
99
|
+
|
100
|
+
many_to_many Article
|
101
101
|
|
102
102
|
def initialize(title = nil)
|
103
103
|
@title = title
|
@@ -108,7 +108,7 @@ end
|
|
108
108
|
# Article comment.
|
109
109
|
|
110
110
|
class ArticleComment < Comment
|
111
|
-
belongs_to
|
111
|
+
belongs_to Article
|
112
112
|
end
|
113
113
|
|
114
114
|
# User comment.
|
@@ -120,8 +120,8 @@ end
|
|
120
120
|
# Another child class.
|
121
121
|
|
122
122
|
class Part
|
123
|
-
|
124
|
-
belongs_to
|
123
|
+
property :name, String
|
124
|
+
belongs_to Article
|
125
125
|
|
126
126
|
def initialize(name = nil)
|
127
127
|
@name = name
|
@@ -133,68 +133,50 @@ class Part
|
|
133
133
|
end
|
134
134
|
|
135
135
|
# Og configuration.
|
136
|
-
config = {
|
137
|
-
:database => "test",
|
138
|
-
:adapter => "sqlite",
|
139
|
-
:connection_count => 2
|
140
|
-
}
|
141
|
-
=begin
|
142
|
-
config = {
|
143
|
-
# :address => "localhost",
|
144
|
-
:database => "test",
|
145
|
-
:adapter => "psql",
|
146
|
-
:user => "postgres",
|
147
|
-
:password => "navelrulez",
|
148
|
-
:connection_count => 1
|
149
|
-
}
|
150
136
|
|
151
137
|
config = {
|
152
|
-
:
|
153
|
-
:
|
154
|
-
:
|
155
|
-
:user => "
|
156
|
-
:password => "navelrulez"
|
157
|
-
:connection_count => 1
|
138
|
+
:destroy => true, # destroy table created from earlier runs.
|
139
|
+
:store => 'psql',
|
140
|
+
:name => 'test',
|
141
|
+
:user => "postgres",
|
142
|
+
:password => "navelrulez"
|
158
143
|
}
|
159
|
-
=end
|
160
|
-
# Cleanup the database for earlier executions
|
161
|
-
|
162
|
-
Og::Database.drop!(config)
|
163
144
|
|
164
145
|
# Initialize Og
|
165
146
|
|
166
|
-
db = Og
|
147
|
+
db = Og.setup(config)
|
167
148
|
|
168
149
|
# Create some articles
|
169
150
|
|
170
|
-
a1 = Article.new(
|
171
|
-
a1.save
|
151
|
+
a1 = Article.new('Title1', 'Body1')
|
152
|
+
a1.save
|
172
153
|
|
173
154
|
# shortcut
|
174
|
-
|
155
|
+
|
156
|
+
a2 = Article.create('Title2', 'Body2')
|
175
157
|
|
176
158
|
puts "\n\n"
|
177
159
|
puts "* Get and print all articles:"
|
178
|
-
articles = Article.all
|
160
|
+
articles = Article.all
|
179
161
|
articles.each { |a| puts a }
|
180
162
|
|
181
163
|
# Create some comments
|
182
164
|
|
183
|
-
c1 = ArticleComment.new(
|
165
|
+
c1 = ArticleComment.new('Comment 1')
|
184
166
|
c1.article = a1
|
185
|
-
c1.save
|
167
|
+
c1.save
|
186
168
|
|
187
|
-
c2 = ArticleComment.new(
|
169
|
+
c2 = ArticleComment.new('Comment 2')
|
188
170
|
# alternative way to set the parent.
|
189
171
|
c2.article_oid = a1.oid
|
190
172
|
# an alternative way to save
|
191
|
-
db << c2
|
173
|
+
db.store << c2
|
192
174
|
|
193
175
|
# an alternative (easier and cooler) way to add children in a
|
194
176
|
# has_many relation:
|
195
|
-
c3 = ArticleComment.new(
|
177
|
+
c3 = ArticleComment.new('Comment 3')
|
196
178
|
# add_comment is automatically added by Og.
|
197
|
-
a1.
|
179
|
+
a1.comments << c3
|
198
180
|
|
199
181
|
puts "\n\n"
|
200
182
|
puts "* Print all all comments for article 1:"
|
@@ -206,11 +188,11 @@ a1.comments.each { |c| puts c }
|
|
206
188
|
puts "\n\n"
|
207
189
|
puts "* comments with sql finetunings:"
|
208
190
|
# use a standard SQL limit clause
|
209
|
-
a1.comments(
|
191
|
+
a1.comments(:limit => 2).each { |c| puts c }
|
210
192
|
|
211
193
|
|
212
194
|
# Change a managed object
|
213
|
-
a1.title =
|
195
|
+
a1.title = 'Changed Title'
|
214
196
|
# Og knows that this is a managed object and executes
|
215
197
|
# an SQL UPDATE instead of an SQL INSERT
|
216
198
|
a1.save!
|
@@ -220,21 +202,24 @@ Article.all.each { |a| puts a }
|
|
220
202
|
|
221
203
|
# The previous command updates the whole object. It is used
|
222
204
|
# when there are many updates or you dont care about speed.
|
223
|
-
#
|
224
|
-
a2.
|
205
|
+
# You can also update specific fields
|
206
|
+
a2.title = 'A specific title'
|
207
|
+
a2.update(:title)
|
225
208
|
|
226
209
|
puts "\n\n"
|
227
210
|
Article.all.each { |a| puts a }
|
228
211
|
|
229
212
|
# delete an object
|
213
|
+
puts '-----------------1'
|
230
214
|
ArticleComment.delete(c3)
|
215
|
+
puts '-----------------2'
|
231
216
|
|
232
217
|
puts "\n\n"
|
233
218
|
ArticleComment.all.each { |a| puts a }
|
234
219
|
|
235
220
|
|
236
221
|
# Serialize a hash
|
237
|
-
a1.options = {
|
222
|
+
a1.options = { :k1 => 'val1', :k2 => 'val2' }
|
238
223
|
a1.save!
|
239
224
|
|
240
225
|
# lookup an object
|
@@ -243,15 +228,15 @@ article = Article[a1.oid]
|
|
243
228
|
puts "\n\n"
|
244
229
|
puts article.options.inspect
|
245
230
|
|
246
|
-
u = User.new(
|
231
|
+
u = User.new('gmosx')
|
247
232
|
u.save!
|
248
233
|
|
249
234
|
article = Article[1]
|
250
235
|
# you can also lookup by the name property.
|
251
|
-
article.author = User
|
236
|
+
article.author = User.find_by_name('gmosx')
|
252
237
|
article.save!
|
253
238
|
|
254
|
-
part = Part.new(
|
239
|
+
part = Part.new('admin')
|
255
240
|
part.article = article
|
256
241
|
part.save!
|
257
242
|
|
@@ -260,11 +245,11 @@ article.parts.each { |pa| puts pa }
|
|
260
245
|
puts "\n\n"
|
261
246
|
puts '---'
|
262
247
|
|
263
|
-
c1 = Category.new(
|
264
|
-
c2 = Category.new(
|
248
|
+
c1 = Category.new('Category1').save!
|
249
|
+
c2 = Category.new('Category2').save!
|
265
250
|
|
266
|
-
article.
|
267
|
-
article.
|
251
|
+
article.categories << c1
|
252
|
+
article.categories << c2
|
268
253
|
|
269
254
|
puts '---'
|
270
255
|
|
@@ -274,13 +259,13 @@ puts '---'
|
|
274
259
|
|
275
260
|
c2.articles.each { |a| puts a.title }
|
276
261
|
|
277
|
-
article.
|
262
|
+
article.categories.delete(c1)
|
278
263
|
|
279
264
|
puts '---'
|
280
265
|
|
281
266
|
article.categories.each { |c| puts c.title }
|
282
267
|
|
283
268
|
# create and save the article in one step.
|
284
|
-
article = Article.create(
|
269
|
+
article = Article.create('title', 'body')
|
285
270
|
|
286
271
|
puts '--', article.oid
|
data/install.rb
CHANGED
data/lib/og.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
1
|
+
# = Og
|
2
|
+
#
|
3
|
+
# Copyright (c) 2004-2005, George Moschovitis (http://www.gmosx.com)
|
4
|
+
# Copyright (c) 2004-2005, Navel Ltd (http://www.navel.gr)
|
5
|
+
#
|
6
|
+
# Og is copyrighted free software created and maintained by
|
7
|
+
# George Moschovitis (mailto:gm@navel.gr) and released under the
|
8
|
+
# standard BSD Licence. For details consult the file doc/LICENCE.
|
4
9
|
|
5
10
|
require 'glue'
|
6
11
|
require 'glue/logger'
|
@@ -14,8 +19,9 @@ require 'glue/inflector'
|
|
14
19
|
require 'glue/validation'
|
15
20
|
require 'glue/aspects'
|
16
21
|
|
17
|
-
# Og (ObjectGraph)
|
18
|
-
#
|
22
|
+
# Og (ObjectGraph) manages Ruby objects and their relations and
|
23
|
+
# provides transparent and efficient object-relational mapping
|
24
|
+
# and querying mechanisms.
|
19
25
|
#
|
20
26
|
# === Features
|
21
27
|
#
|
@@ -23,30 +29,22 @@ require 'glue/aspects'
|
|
23
29
|
#
|
24
30
|
# + Object-Relational mapping.
|
25
31
|
# + Absolutely no configuration files.
|
26
|
-
# + Multiple
|
32
|
+
# + Multiple stores (PostgreSQL, MySQL, SQLite, Oraclei, SqlServer, ..).
|
33
|
+
# + Supports non SQL stores.
|
27
34
|
# + ActiveRecord-style meta language and db aware methods.
|
28
35
|
# + Deserialize to Ruby Objects.
|
29
|
-
# + Deserialize sql join queries to Ruby Objects
|
36
|
+
# + Deserialize sql join queries to Ruby Objects.
|
37
|
+
# + Eager associations.
|
30
38
|
# + Serialize arbitrary ruby object graphs through YAML.
|
31
39
|
# + Connection pooling.
|
32
|
-
# + Thread safety.
|
40
|
+
# + Thread safety (temporarily dissabled).
|
33
41
|
# + SQL transactions.
|
34
|
-
#
|
35
|
-
# + Lifecycle observers.
|
42
|
+
# + Aspect oriented constructs allow interception of lifecycle callbacks.
|
36
43
|
# + Transparent support for cascading deletes for all backends.
|
37
|
-
# + Hierarchical structures (
|
44
|
+
# + Hierarchical structures (nested sets)
|
38
45
|
# + Works safely as part of distributed application.
|
39
46
|
# + Simple implementation.
|
40
47
|
#
|
41
|
-
# === Meta language
|
42
|
-
#
|
43
|
-
# primary_key :pid (NOT IMPLEMENTED)
|
44
|
-
# name_key :name (NOT IMPLEMENTED)
|
45
|
-
# prop_accessor Fixnum, :pid, :sql => "smallint DEFAULT 1"
|
46
|
-
# has_many Child, :children
|
47
|
-
# many_to_many Role, :roles
|
48
|
-
# sql_index :pid
|
49
|
-
#
|
50
48
|
# === Property Metadata
|
51
49
|
#
|
52
50
|
# Og defines, reserves and uses the following property
|
@@ -58,64 +56,31 @@ require 'glue/aspects'
|
|
58
56
|
# [+:unique+]
|
59
57
|
# This value of the property must be unique.
|
60
58
|
#
|
61
|
-
# [+:name_key+]
|
62
|
-
# This property is used as name-key.
|
63
|
-
#
|
64
59
|
# === Design
|
65
60
|
#
|
66
|
-
# Keep the main classes backend agnostic.
|
67
|
-
#
|
68
|
-
# For class ids we use the name instead of a hash. Class ids are
|
69
|
-
# typically not used in querys, they are stored for completeness.
|
70
|
-
# If we store a hash we cannot reclaim the class thus invalidating
|
71
|
-
# the point. Instead of .name(), to_s() is used so the methods
|
72
|
-
# are more flexible (they accept class names too!!)
|
73
|
-
#
|
74
61
|
# Og allows the serialization of arbitrary Ruby objects. Just
|
75
62
|
# mark them as Object (or Array or Hash) in the prop_accessor
|
76
63
|
# and the engine will serialize a YAML dump of the object.
|
77
64
|
# Arbitrary object graphs are supported too.
|
78
65
|
#
|
79
|
-
#
|
80
|
-
# databases.
|
81
|
-
#
|
82
|
-
# The og.xxx methods are more flexible and allow you to use
|
83
|
-
# multiple databases for example.
|
84
|
-
#
|
85
|
-
# === Managed Objects Lifecycle Callbacks
|
86
|
-
#
|
87
|
-
# * og_pre_read
|
88
|
-
# * og_post_read
|
89
|
-
# * og_pre_insert
|
90
|
-
# * og_post_insert
|
91
|
-
# * og_pre_update
|
92
|
-
# * og_post_update
|
93
|
-
# * og_pre_insert_update
|
94
|
-
# * og_post_insert_update
|
95
|
-
# * self.og_pre_delete
|
66
|
+
# === Lifecycle Callbacks
|
96
67
|
#
|
97
|
-
#
|
98
|
-
#
|
99
|
-
#
|
100
|
-
#
|
101
|
-
#
|
102
|
-
# * Support prepared statements (pgsql)
|
103
|
-
# * Support stored procedures (pgsql)
|
104
|
-
# * Support caching.
|
105
|
-
# * Deserialize to OpenStruct.
|
106
|
-
# * Better documentation.
|
68
|
+
# * og_read
|
69
|
+
# * og_insert
|
70
|
+
# * og_update
|
71
|
+
# * og_delete
|
107
72
|
|
108
73
|
module Og
|
109
74
|
|
110
75
|
# The version.
|
111
76
|
|
112
|
-
Version = '0.
|
77
|
+
Version = '0.17.0'
|
113
78
|
|
114
79
|
# Library path.
|
115
80
|
|
116
81
|
LibPath = File.dirname(__FILE__)
|
117
82
|
|
118
|
-
# If true, check for
|
83
|
+
# If true, check for implicit changes in the object
|
119
84
|
# graph. For example when you add an object to a parent
|
120
85
|
# the object might be removed from his previous parent.
|
121
86
|
# In this case Og emmits a warning.
|
@@ -128,63 +93,35 @@ module Og
|
|
128
93
|
|
129
94
|
mattr_accessor :read_only_mode, false
|
130
95
|
|
131
|
-
#
|
132
|
-
# In enchant mode, special db aware methods are added to
|
133
|
-
# managed classes and instances.
|
134
|
-
# If false, Og enchants only classes that define properties.
|
135
|
-
|
136
|
-
mattr_accessor :enchant_managed_classes, true
|
137
|
-
|
138
|
-
# If true, use Ruby's advanced introspection capabilities to
|
139
|
-
# automatically manage classes tha define properties.
|
140
|
-
|
141
|
-
mattr_accessor :auto_manage_classes, true
|
142
|
-
|
143
|
-
# If true, automatically include the Og meta-language into Module.
|
144
|
-
# If false, the polution of the Module object is avoided. However
|
145
|
-
# if you include a prop_accessor or a managed Mixin in your
|
146
|
-
# object MetaLanguage gets automatically extended in the class.
|
147
|
-
|
148
|
-
mattr_accessor :include_meta_language, true
|
149
|
-
|
150
|
-
# Attach the following prefix to all generated SQL table names.
|
96
|
+
# Prepend the following prefix to all generated SQL table names.
|
151
97
|
# Usefull on hosting scenarios where you have to run multiple
|
152
98
|
# web applications/sites on a single database.
|
99
|
+
#
|
100
|
+
# Don't set the table_prefix to nil, or you may face problems
|
101
|
+
# with reserved words on some RDBM systems. For example User
|
102
|
+
# maps to user which is reserved in postgresql). The prefix
|
103
|
+
# should start with an alphanumeric character to be compatible
|
104
|
+
# with all RDBM systems (most notable Oracle).
|
105
|
+
#--
|
106
|
+
# TODO: move this to the sql store.
|
107
|
+
#++
|
153
108
|
|
154
|
-
mattr_accessor :table_prefix,
|
109
|
+
mattr_accessor :table_prefix, 'og'
|
155
110
|
|
156
111
|
# If true, Og tries to create/update the schema in the
|
157
|
-
# data store. For production/live environments set this to
|
158
|
-
# and only set to true when the object model is
|
159
|
-
# For debug/development environments this should
|
160
|
-
# for convienience.
|
112
|
+
# data store. For production/live environments set this to
|
113
|
+
# false and only set to true when the object model is
|
114
|
+
# upadated. For debug/development environments this should
|
115
|
+
# stay true for convienience.
|
161
116
|
|
162
117
|
mattr_accessor :create_schema, true
|
163
118
|
|
164
|
-
# If true raises exceptions on
|
119
|
+
# If true raises exceptions on store errors, usefull when
|
165
120
|
# debugging. For production environments it should probably be
|
166
121
|
# set to false to make the application more fault tolerant.
|
167
122
|
|
168
|
-
mattr_accessor :
|
169
|
-
|
170
|
-
# The active database. Og allows you to access multiple
|
171
|
-
# databases from a single application.
|
123
|
+
mattr_accessor :raise_store_exceptions, true
|
172
124
|
|
173
|
-
mattr_accessor :db
|
174
|
-
|
175
|
-
# Set the active database.
|
176
|
-
|
177
|
-
def self.use(db)
|
178
|
-
@@db = db
|
179
|
-
@@db.get_connection
|
180
|
-
end
|
181
|
-
|
182
|
-
# The adapter of the active database.
|
183
|
-
|
184
|
-
def self.adapter
|
185
|
-
@@db.adapter
|
186
|
-
end
|
187
|
-
|
188
125
|
# Marker module. If included in a class, the Og automanager
|
189
126
|
# ignores this class.
|
190
127
|
|
@@ -194,5 +131,7 @@ end
|
|
194
131
|
|
195
132
|
# gmosx: leave this here.
|
196
133
|
|
197
|
-
require 'og/
|
134
|
+
require 'og/manager'
|
135
|
+
require 'og/errors'
|
136
|
+
require 'og/types'
|
198
137
|
require 'og/validation'
|