og 0.15.0 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +77 -0
- data/INSTALL +3 -0
- data/README +5 -3
- data/Rakefile +148 -5
- data/benchmark/bench.rb +1 -1
- data/doc/AUTHORS +4 -4
- data/doc/RELEASES +41 -1
- data/examples/mock_example.rb +1 -1
- data/examples/mysql_to_psql.rb +1 -1
- data/examples/run.rb +1 -1
- data/install.rb +1 -1
- data/lib/og.rb +4 -2
- data/lib/og/{adapter.rb → adapters/base.rb} +334 -152
- data/lib/og/adapters/filesys.rb +3 -7
- data/lib/og/adapters/mysql.rb +5 -9
- data/lib/og/adapters/oracle.rb +5 -9
- data/lib/og/adapters/psql.rb +5 -9
- data/lib/og/adapters/sqlite.rb +5 -9
- data/lib/og/adapters/sqlserver.rb +5 -9
- data/lib/og/database.rb +13 -11
- data/lib/og/enchant.rb +1 -1
- data/lib/og/errors.rb +21 -0
- data/lib/og/meta.rb +10 -9
- data/lib/og/mixins/hierarchical.rb +4 -4
- data/lib/og/mixins/orderable.rb +1 -1
- data/lib/og/mixins/timestamped.rb +24 -0
- data/lib/og/mixins/tree.rb +3 -1
- data/lib/og/testing/mock.rb +2 -2
- data/lib/og/typemacros.rb +1 -1
- data/lib/og/validation.rb +4 -4
- data/test/og/{tc_filesys.rb → adapters/tc_filesys.rb} +1 -1
- data/test/og/{tc_sqlite.rb → adapters/tc_sqlite.rb} +3 -4
- data/test/og/{tc_sqlserver.rb → adapters/tc_sqlserver.rb} +5 -2
- data/test/og/mixins/tc_hierarchical.rb +0 -1
- data/test/og/mixins/tc_orderable.rb +0 -1
- data/test/og/tc_automanage.rb +3 -2
- data/test/og/tc_lifecycle.rb +15 -14
- data/test/og/tc_many_to_many.rb +0 -1
- data/test/og/tc_meta.rb +5 -5
- data/test/og/tc_validation.rb +1 -1
- data/test/tc_og.rb +0 -20
- metadata +33 -34
- data/examples/test.db +0 -0
- data/lib/og/connection.rb +0 -325
- data/lib/og/observer.rb +0 -53
- data/test/og/tc_observer.rb +0 -85
data/CHANGELOG
CHANGED
@@ -1,5 +1,82 @@
|
|
1
|
+
16-04-2005 George Moschovitis <gm@navel.gr>
|
2
|
+
|
3
|
+
* lib/og/mixins/timestamped.rb: implemented with aspects.
|
4
|
+
|
5
|
+
15-04-2005 George Moschovitis <gm@navel.gr>
|
6
|
+
|
7
|
+
* test/og/observer.rb: removed, use Aspects instead.
|
8
|
+
|
9
|
+
* lib/og/observer.rb: removed, use Aspects instead.
|
10
|
+
|
11
|
+
14-04-2005 George Moschovitis <gm@navel.gr>
|
12
|
+
|
13
|
+
* lb/og/adapters/*: converted to the latest adapter interface.
|
14
|
+
|
15
|
+
* lib/og/adapters/base.rb (#eval_og_update): use aspects instead of
|
16
|
+
callbacks/observers,
|
17
|
+
(#eval_og_insert): use aspects,
|
18
|
+
set aspects in the base adapter code,
|
19
|
+
(#eval_og_read): use aspects.
|
20
|
+
|
21
|
+
13-04-2005 George Moschovitis <gm@navel.gr>
|
22
|
+
|
23
|
+
* lib/og/adapters/*: use klass.allocate instead of klass.new to avoid
|
24
|
+
restrictions on initialize methods. [jamesb]
|
25
|
+
|
26
|
+
* test/og/*: moved adapter test code to the adapters dir.
|
27
|
+
|
28
|
+
12-04-2005 George Moschovitis <gm@navel.gr>
|
29
|
+
|
30
|
+
* Rakefile: updated to support autoupload to Rubyforge. [flgr]
|
31
|
+
|
32
|
+
11-04-2005 George Moschovitis <gm@navel.gr>
|
33
|
+
|
34
|
+
* created new public SVN repository, to allow for easier
|
35
|
+
patching by the community.
|
36
|
+
|
37
|
+
* lib/og/mixins/timestamped.rb: introduced.
|
38
|
+
|
39
|
+
* lib/og/database.rb: set default connection_count > 1 to avoid
|
40
|
+
deadlocks.
|
41
|
+
|
42
|
+
10-04-2005 George Moschovitis <gm@navel.gr>
|
43
|
+
|
44
|
+
* test/*: many changes to make all run again.
|
45
|
+
|
46
|
+
* lib/og/adapters/sqlserver.rb: fix.
|
47
|
+
|
48
|
+
* lib/og/database.rb (Og##connect): added helper.
|
49
|
+
|
50
|
+
* lib/og/meta.rb: small fix.
|
51
|
+
|
52
|
+
08-04-2005 George Moschovitis <gm@navel.gr>
|
53
|
+
|
54
|
+
* hack-fixed dynamic require bug that used to fuckup RDoc.
|
55
|
+
|
56
|
+
* Rakefile: bumped required ruby version,
|
57
|
+
VERSION fix.
|
58
|
+
|
59
|
+
* code cleanup.
|
60
|
+
|
61
|
+
* MAJOR: fixed refs to N.
|
62
|
+
|
63
|
+
06-04-2005 George Moschovitis <gm@navel.gr>
|
64
|
+
|
65
|
+
* lib/og/adapters/*: all reuse the base now.
|
66
|
+
|
67
|
+
* lib/og/connection.rb: removed.
|
68
|
+
|
69
|
+
* lib/og/adapter.rb: removed.
|
70
|
+
|
71
|
+
* lib/og/adapters/base.rb: introduced,
|
72
|
+
copied code from adapter.rb and connection.rb
|
73
|
+
|
74
|
+
* lib/og/errors.rb: introduced, moved SqlException here.
|
75
|
+
|
1
76
|
04-04-2005 George Moschovitis <gm@navel.gr>
|
2
77
|
|
78
|
+
* --- VERSION 0.15.0 ---
|
79
|
+
|
3
80
|
* examples/run.rb: small fix.
|
4
81
|
|
5
82
|
* test/og/mixins/tc_tree.rb: removed.
|
data/INSTALL
CHANGED
data/README
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= Og 0.
|
1
|
+
= Og 0.16.0 README
|
2
2
|
|
3
3
|
Og (ObjectGraph) is a powerfull object-relational mapping library. Og provides
|
4
4
|
transparent serialization of object graphs to a RDBMS
|
@@ -35,8 +35,7 @@ The library provides the following features:
|
|
35
35
|
+ Connection pooling.
|
36
36
|
+ Thread safety.
|
37
37
|
+ SQL transactions.
|
38
|
-
+ Lifecycle
|
39
|
-
+ Lifecycle observers.
|
38
|
+
+ Lifecycle event interception and Observers.
|
40
39
|
+ Transparent support for cascading deletes for all backends.
|
41
40
|
+ Dynamic db related mixins (Orderable, etc).
|
42
41
|
+ Hierarchical structures (nested sets, more coming soon).
|
@@ -91,6 +90,9 @@ installed RubyGems on your system. Then run the following command:
|
|
91
90
|
|
92
91
|
gem install og
|
93
92
|
|
93
|
+
(make sure you have the latest stable versions of Ruby and RubyGems
|
94
|
+
installed)
|
95
|
+
|
94
96
|
Then try to run the examples in the examples directory.
|
95
97
|
|
96
98
|
A tar.gz distribution is also available on http://www.rubyforge.com/projects/nitro.
|
data/Rakefile
CHANGED
@@ -1,11 +1,34 @@
|
|
1
1
|
# * George Moschovitis <gm@navel.gr>
|
2
|
-
# (c)
|
2
|
+
# (c) 2005 Navel, all rights reserved.
|
3
3
|
# $Id$
|
4
4
|
|
5
5
|
require 'rake/rdoctask'
|
6
6
|
require 'rake/testtask'
|
7
7
|
require 'rake/gempackagetask'
|
8
8
|
|
9
|
+
# Initialize some variables.
|
10
|
+
|
11
|
+
readme = File.read('README')
|
12
|
+
Release = (readme[/^= (.+) README$/, 1] || 'unknown').downcase.tr(" ", "-")
|
13
|
+
Name = Release[/\D+/].sub(/\-+$/, '') || 'unknown'
|
14
|
+
Version = Release[/[\d.]+/] || 'unknown'
|
15
|
+
|
16
|
+
AuthorName, AuthorMail = 'George Moschovitis', 'gm@navel.gr'
|
17
|
+
RubyVersion = '1.8.2'
|
18
|
+
|
19
|
+
# Description = (readme[/README\s+(.+?)\n\n/m, 1] || "unknown").gsub(/\s+/, " ")
|
20
|
+
# Summary = Description[/^.+?>/] || "unknown"
|
21
|
+
|
22
|
+
# DocFiles = %w(README NEWS TODO COPYING GPL)
|
23
|
+
# RDocFiles = DocFiles - %w(GPL)
|
24
|
+
RDocOpts = ["--inline-source", "--line-numbers","--title", Name ]
|
25
|
+
# AdditionalFiles = DocFiles + %w(setup.rb)
|
26
|
+
VersionFile = MainFile = File.join("lib", Name + '.rb')
|
27
|
+
|
28
|
+
RubyForgeProject = 'nitro'
|
29
|
+
RubyForgeUser = 'gmosx'
|
30
|
+
Homepage = "http://#{RubyForgeProject}.rubyforge.org/"
|
31
|
+
|
9
32
|
task :default => :package
|
10
33
|
|
11
34
|
# Run the tests.
|
@@ -20,7 +43,7 @@ end
|
|
20
43
|
|
21
44
|
Rake::RDocTask.new do |rd|
|
22
45
|
rd.main = 'README'
|
23
|
-
rd.rdoc_dir = '
|
46
|
+
rd.rdoc_dir = 'rdoc'
|
24
47
|
rd.rdoc_files.include('README', 'INSTALL', 'doc/config.txt', 'doc/tutorial.txt', 'lib/**/*.rb')
|
25
48
|
rd.options << '--all --inline-source'
|
26
49
|
end
|
@@ -30,20 +53,20 @@ end
|
|
30
53
|
spec = Gem::Specification.new do |s|
|
31
54
|
s.name = 'og'
|
32
55
|
if File.read('lib/og.rb') =~ /Version\s+=\s+'(\d+\.\d+\.\d+)'/
|
33
|
-
|
56
|
+
s.version = $1
|
34
57
|
else
|
35
58
|
raise 'No version found'
|
36
59
|
end
|
37
60
|
s.summary = 'Og (ObjectGraph)'
|
38
61
|
s.description = 'An efficient and transparent Object-Relational mapping library'
|
39
62
|
|
40
|
-
s.add_dependency 'glue', "= #{
|
63
|
+
s.add_dependency 'glue', "= #{s.version}"
|
41
64
|
# s.add_dependency 'postgres-pr', '>= 0.3.0'
|
42
65
|
# s.add_dependency 'postgres', '>= 0.7.1'
|
43
66
|
# s.add_dependency 'sqlite3-ruby', '>= 1.0.0'
|
44
67
|
#s.add_dependency 'mysql', '>= 2.5.1'
|
45
68
|
|
46
|
-
s.required_ruby_version = '>= 1.8.
|
69
|
+
s.required_ruby_version = '>= 1.8.2'
|
47
70
|
|
48
71
|
s.files = FileList[
|
49
72
|
'[A-Z]*', 'install.rb', '{bin,benchmark,examples,doc,lib,test,vendor}/**/*'
|
@@ -75,3 +98,123 @@ task :install do
|
|
75
98
|
ruby 'install.rb'
|
76
99
|
end
|
77
100
|
|
101
|
+
# Release files to Rubyforge.
|
102
|
+
# The code for this task provided by Florian Gross.
|
103
|
+
|
104
|
+
desc "Publish the release files to RubyForge."
|
105
|
+
task :publish => [:package] do
|
106
|
+
files = ['gem', 'tgz', 'zip'].map { |ext| "dist/#{Release}.#{ext}" }
|
107
|
+
|
108
|
+
if RubyForgeProject then
|
109
|
+
require 'net/http'
|
110
|
+
require 'open-uri'
|
111
|
+
|
112
|
+
changes = ''
|
113
|
+
if File.exist?('doc/RELEASES') then
|
114
|
+
changes_re = /^== \s+ Version \s+ #{Regexp.quote(Version)} \s*
|
115
|
+
(.+?) (?:==|\Z)/mx
|
116
|
+
changes = File.read('doc/RELEASES')[changes_re, 1] || ''
|
117
|
+
end
|
118
|
+
|
119
|
+
project_uri = "http://rubyforge.org/projects/#{RubyForgeProject}/"
|
120
|
+
project_data = open(project_uri) { |data| data.read }
|
121
|
+
group_id = project_data[/[?&]group_id=(\d+)/, 1]
|
122
|
+
raise "Couldn't get group id" unless group_id
|
123
|
+
|
124
|
+
print "#{RubyForgeUser}@rubyforge.org's password: "
|
125
|
+
password = STDIN.gets.chomp
|
126
|
+
|
127
|
+
login_response = Net::HTTP.start('rubyforge.org', 80) do |http|
|
128
|
+
data = [
|
129
|
+
"login=1",
|
130
|
+
"form_loginname=#{RubyForgeUser}",
|
131
|
+
"form_pw=#{password}"
|
132
|
+
].join("&")
|
133
|
+
http.post('/account/login.php', data)
|
134
|
+
end
|
135
|
+
|
136
|
+
cookie = login_response['set-cookie']
|
137
|
+
raise 'Login failed' unless cookie
|
138
|
+
headers = { 'Cookie' => cookie }
|
139
|
+
|
140
|
+
release_uri = "http://rubyforge.org/frs/admin/?group_id=#{group_id}"
|
141
|
+
release_data = open(release_uri, headers) { |data| data.read }
|
142
|
+
package_id = release_data[/[?&]package_id=(\d+)/, 1]
|
143
|
+
raise "Couldn't get package id" unless package_id
|
144
|
+
|
145
|
+
first_file = true
|
146
|
+
release_id = ""
|
147
|
+
|
148
|
+
files.each do |filename|
|
149
|
+
basename = File.basename(filename)
|
150
|
+
file_ext = File.extname(filename)
|
151
|
+
file_data = File.open(filename, "rb") { |file| file.read }
|
152
|
+
|
153
|
+
puts "Releasing #{basename}..."
|
154
|
+
|
155
|
+
release_response = Net::HTTP.start('rubyforge.org', 80) do |http|
|
156
|
+
release_date = Time.now.strftime('%Y-%m-%d %H:%M')
|
157
|
+
type_map = {
|
158
|
+
'.zip' => '3000',
|
159
|
+
'.tgz' => '3110',
|
160
|
+
'.gz' => '3110',
|
161
|
+
'.gem' => '1400',
|
162
|
+
'.md5sum' => '8100'
|
163
|
+
}; type_map.default = '9999'
|
164
|
+
type = type_map[file_ext]
|
165
|
+
boundary = 'rubyqMY6QN9bp6e4kS21H4y0zxcvoor'
|
166
|
+
|
167
|
+
query_hash = if first_file then
|
168
|
+
{
|
169
|
+
'group_id' => group_id,
|
170
|
+
'package_id' => package_id,
|
171
|
+
'release_name' => Release,
|
172
|
+
'release_date' => release_date,
|
173
|
+
'type_id' => type,
|
174
|
+
'processor_id' => '8000', # Any
|
175
|
+
'release_notes' => '',
|
176
|
+
'release_changes' => changes,
|
177
|
+
'preformatted' => '1',
|
178
|
+
'submit' => '1'
|
179
|
+
}
|
180
|
+
else
|
181
|
+
{
|
182
|
+
'group_id' => group_id,
|
183
|
+
'release_id' => release_id,
|
184
|
+
'package_id' => package_id,
|
185
|
+
'step2' => '1',
|
186
|
+
'type_id' => type,
|
187
|
+
'processor_id' => '8000', # Any
|
188
|
+
'submit' => 'Add This File'
|
189
|
+
}
|
190
|
+
end
|
191
|
+
|
192
|
+
query = '?' + query_hash.map do |(name, value)|
|
193
|
+
[name, URI.encode(value)].join('=')
|
194
|
+
end.join('&')
|
195
|
+
|
196
|
+
data = [
|
197
|
+
"--" + boundary,
|
198
|
+
"Content-Disposition: form-data; name=\"userfile\"; filename=\"#{basename}\"",
|
199
|
+
"Content-Type: application/octet-stream",
|
200
|
+
"Content-Transfer-Encoding: binary",
|
201
|
+
"", file_data, ""
|
202
|
+
].join("\x0D\x0A")
|
203
|
+
|
204
|
+
release_headers = headers.merge(
|
205
|
+
'Content-Type' => "multipart/form-data; boundary=#{boundary}"
|
206
|
+
)
|
207
|
+
|
208
|
+
target = first_file ? '/frs/admin/qrs.php' : '/frs/admin/editrelease.php'
|
209
|
+
http.post(target + query, data, release_headers)
|
210
|
+
end
|
211
|
+
|
212
|
+
if first_file then
|
213
|
+
release_id = release_response.body[/release_id=(\d+)/, 1]
|
214
|
+
raise("Couldn't get release id") unless release_id
|
215
|
+
end
|
216
|
+
|
217
|
+
first_file = false
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
data/benchmark/bench.rb
CHANGED
data/doc/AUTHORS
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
MAIN DEVELOPER:
|
2
2
|
|
3
3
|
* George Moschovitis <gm@navel.gr>
|
4
|
-
Project leader, architecture and design,
|
4
|
+
Project leader, architecture and design, main coder,
|
5
5
|
documentation, maintainer.
|
6
6
|
|
7
7
|
IDEAS, ADDITIONAL CODING, SUPPORT:
|
8
8
|
|
9
|
+
* Matt Bowen <matt.bowen@farweststeel.com>
|
10
|
+
Additional code and documentation.
|
11
|
+
|
9
12
|
* Anastasios Koutoumanos <ak@navel.gr>
|
10
13
|
Design, additional coding.
|
11
14
|
|
12
15
|
* Michael Neumann <mneumann@ntecs.de>
|
13
16
|
Design, additional coding and bug reports.
|
14
17
|
|
15
|
-
* Matt Bowen <matt.bowen@farweststeel.com>
|
16
|
-
Additional code and documentation.
|
17
|
-
|
18
18
|
* Thomas Quas <tquas@yahoo.com>
|
19
19
|
Ideas, bug reports, unit tests.
|
data/doc/RELEASES
CHANGED
@@ -1,4 +1,44 @@
|
|
1
|
-
== Version 0.
|
1
|
+
== Version 0.16.0
|
2
|
+
|
3
|
+
A snapshot of the latest developments. Many, many subtle improvements,
|
4
|
+
new features and a major cleanup of the source code.
|
5
|
+
|
6
|
+
Most notable attitions:
|
7
|
+
|
8
|
+
* Aspect Oriented Programming support. This new system
|
9
|
+
is used to reimplement features such as Controller filters,
|
10
|
+
Og callbacks and Og observers. By using this unified
|
11
|
+
system you can now add Observers to controllers and use
|
12
|
+
a metalanguage for wraping Og object callbacks:
|
13
|
+
|
14
|
+
class Controller
|
15
|
+
pre :force_login, :where => :prepend
|
16
|
+
wrap Benchmark, :on => :index
|
17
|
+
post :taraa, :on => login
|
18
|
+
end
|
19
|
+
|
20
|
+
module Timestamped
|
21
|
+
pre :on => :og_insert { |this| this.create_time = Time.now }
|
22
|
+
pre :on => :og_update { |this| this.update_time = Time.now }
|
23
|
+
pre :on => [:og_insert, :og_update] { |this| this.create_time = Time.now }
|
24
|
+
end
|
25
|
+
|
26
|
+
This feature will be used extensivelly in future versions
|
27
|
+
to improve logging, the shaders and more.
|
28
|
+
|
29
|
+
* Major cleanup of the source. Converted the N namespace to
|
30
|
+
Nitro.
|
31
|
+
|
32
|
+
* Add Og Timestamped mixin.
|
33
|
+
|
34
|
+
* Og improvements.
|
35
|
+
|
36
|
+
* Improved the Gem installation process.
|
37
|
+
|
38
|
+
* Fixed all reported bugs.
|
39
|
+
|
40
|
+
|
41
|
+
== Version 0.15.0 was released on 04/04/2005.
|
2
42
|
|
3
43
|
A great release. Many cool new features and tons of subtle
|
4
44
|
improvements. We also welcome a new core developer, Anastastios
|
data/examples/mock_example.rb
CHANGED
data/examples/mysql_to_psql.rb
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
#
|
10
10
|
# * George Moschovitis <gm@navel.gr>
|
11
11
|
# (c) 2004-2005 Navel, all rights reserved.
|
12
|
-
# $Id: mysql_to_psql.rb
|
12
|
+
# $Id: mysql_to_psql.rb 1 2005-04-11 11:04:30Z gmosx $
|
13
13
|
|
14
14
|
raise 'WARNING, this example does not work yet, for the moment ' +
|
15
15
|
'just have a look at the source code.'
|
data/examples/run.rb
CHANGED
data/install.rb
CHANGED
data/lib/og.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# * George Moschovitis <gm@navel.gr>
|
2
2
|
# (c) 2004-2005 Navel, all rights reserved.
|
3
|
-
# $Id: og.rb
|
3
|
+
# $Id: og.rb 20 2005-04-15 15:18:36Z gmosx $
|
4
4
|
|
5
5
|
require 'glue'
|
6
6
|
require 'glue/logger'
|
@@ -10,7 +10,9 @@ require 'glue/array'
|
|
10
10
|
require 'glue/hash'
|
11
11
|
require 'glue/time'
|
12
12
|
require 'glue/pool'
|
13
|
+
require 'glue/inflector'
|
13
14
|
require 'glue/validation'
|
15
|
+
require 'glue/aspects'
|
14
16
|
|
15
17
|
# Og (ObjectGraph) is an efficient, yet simple Object-Relational
|
16
18
|
# mapping library.
|
@@ -107,7 +109,7 @@ module Og
|
|
107
109
|
|
108
110
|
# The version.
|
109
111
|
|
110
|
-
Version = '0.
|
112
|
+
Version = '0.16.0'
|
111
113
|
|
112
114
|
# Library path.
|
113
115
|
|