nitro 0.7.0 → 0.8.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.
Files changed (102) hide show
  1. data/AUTHORS +14 -4
  2. data/ChangeLog +192 -1
  3. data/README +50 -6
  4. data/RELEASES +60 -0
  5. data/Rakefile +1 -1
  6. data/bin/cluster.rb +2 -2
  7. data/bin/new_form.rb +1 -1
  8. data/examples/blog/config.rb +5 -4
  9. data/examples/blog/lib/blog.rb +56 -36
  10. data/examples/blog/root/comments.xhtml +5 -2
  11. data/examples/blog/root/entry_form.xhtml +7 -2
  12. data/examples/blog/root/login.xhtml +1 -1
  13. data/examples/blog/root/style.xsl +7 -0
  14. data/examples/og/mock_example.rb +6 -9
  15. data/examples/og/mysql_to_psql.rb +100 -0
  16. data/examples/og/run.rb +8 -17
  17. data/lib/glue.rb +7 -8
  18. data/lib/glue/array.rb +1 -1
  19. data/lib/glue/attribute.rb +86 -0
  20. data/lib/glue/cache.rb +1 -1
  21. data/lib/glue/hash.rb +1 -1
  22. data/lib/glue/inflector.rb +1 -1
  23. data/lib/glue/logger.rb +118 -18
  24. data/lib/glue/mixins.rb +1 -1
  25. data/lib/glue/number.rb +1 -1
  26. data/lib/glue/pool.rb +1 -1
  27. data/lib/glue/property.rb +48 -31
  28. data/lib/glue/string.rb +1 -1
  29. data/lib/glue/time.rb +2 -2
  30. data/lib/glue/validation.rb +400 -0
  31. data/lib/nitro/application.rb +6 -6
  32. data/lib/nitro/builders/form.rb +5 -5
  33. data/lib/nitro/builders/rss.rb +1 -1
  34. data/lib/nitro/builders/xhtml.rb +119 -0
  35. data/lib/nitro/builders/xml.rb +111 -0
  36. data/lib/nitro/config.rb +6 -6
  37. data/lib/nitro/events.rb +1 -1
  38. data/lib/nitro/html.rb +1 -1
  39. data/lib/nitro/markup.rb +15 -20
  40. data/lib/nitro/scaffold.rb +2 -2
  41. data/lib/nitro/server/appserver.rb +3 -3
  42. data/lib/nitro/server/cluster.rb +2 -2
  43. data/lib/nitro/server/dispatcher.rb +2 -2
  44. data/lib/nitro/server/filters/autologin.rb +1 -1
  45. data/lib/nitro/server/fragment.rb +2 -2
  46. data/lib/nitro/server/handlers.rb +2 -2
  47. data/lib/nitro/server/render.rb +17 -15
  48. data/lib/nitro/server/request.rb +6 -6
  49. data/lib/nitro/server/script.rb +2 -2
  50. data/lib/nitro/server/server.rb +2 -2
  51. data/lib/nitro/server/session.rb +6 -6
  52. data/lib/nitro/server/shaders.rb +2 -2
  53. data/lib/nitro/server/webrick.rb +1 -1
  54. data/lib/nitro/sitemap.rb +2 -2
  55. data/lib/nitro/uri.rb +1 -1
  56. data/lib/nitro/version.rb +7 -5
  57. data/lib/og.rb +95 -129
  58. data/lib/og/backend.rb +47 -46
  59. data/lib/og/backends/mysql.rb +64 -63
  60. data/lib/og/backends/psql.rb +73 -72
  61. data/lib/og/connection.rb +7 -8
  62. data/lib/og/enchant.rb +80 -0
  63. data/lib/og/meta.rb +21 -21
  64. data/lib/og/mock.rb +31 -88
  65. data/lib/og/version.rb +6 -5
  66. data/lib/parts/README +9 -0
  67. data/lib/parts/content.rb +23 -9
  68. data/test/glue/tc_attribute.rb +22 -0
  69. data/test/glue/tc_cache.rb +4 -6
  70. data/test/glue/tc_hash.rb +2 -2
  71. data/test/glue/tc_logger.rb +36 -0
  72. data/test/glue/tc_numbers.rb +2 -2
  73. data/test/glue/tc_property_mixins.rb +35 -4
  74. data/test/glue/tc_strings.rb +32 -32
  75. data/test/glue/tc_validation.rb +186 -0
  76. data/test/nitro/builders/tc_xhtml.rb +38 -0
  77. data/test/nitro/builders/tc_xml.rb +47 -0
  78. data/test/nitro/server/tc_request.rb +2 -2
  79. data/test/nitro/server/tc_session.rb +1 -1
  80. data/test/nitro/tc_sitemap.rb +1 -1
  81. data/test/nitro/ui/tc_pager.rb +1 -10
  82. data/test/tc_og.rb +3 -3
  83. data/vendor/blankslate.rb +53 -0
  84. data/vendor/extensions/_base.rb +153 -0
  85. data/vendor/extensions/_template.rb +36 -0
  86. data/vendor/extensions/all.rb +21 -0
  87. data/vendor/extensions/array.rb +68 -0
  88. data/vendor/extensions/binding.rb +224 -0
  89. data/vendor/extensions/class.rb +50 -0
  90. data/vendor/extensions/continuation.rb +71 -0
  91. data/vendor/extensions/enumerable.rb +250 -0
  92. data/vendor/extensions/hash.rb +23 -0
  93. data/vendor/extensions/io.rb +58 -0
  94. data/vendor/extensions/kernel.rb +42 -0
  95. data/vendor/extensions/module.rb +114 -0
  96. data/vendor/extensions/numeric.rb +230 -0
  97. data/vendor/extensions/object.rb +164 -0
  98. data/vendor/extensions/ostruct.rb +41 -0
  99. data/vendor/extensions/string.rb +316 -0
  100. data/vendor/extensions/symbol.rb +28 -0
  101. metadata +35 -13
  102. data/lib/glue/property.rb.old +0 -307
@@ -4,7 +4,7 @@
4
4
  # (c) 2004 Navel, all rights reserved.
5
5
  # $Id: connection.rb 167 2004-11-23 14:03:10Z gmosx $
6
6
 
7
- module Og;
7
+ class Og;
8
8
 
9
9
  require "glue/property"
10
10
  require "glue/array"
@@ -38,14 +38,14 @@ class Connection
38
38
  @og = og
39
39
  @db = @og.config[:backend].new(@og.config)
40
40
  @deserialize = true
41
- $log.debug "Created DB connection."
41
+ Logger.debug "Created DB connection." if $DBG
42
42
  end
43
43
 
44
44
  # Close the connection to the database
45
45
  #
46
46
  def close()
47
47
  @db.close()
48
- $log.debug "Closed DB connection."
48
+ Logger.debug "Closed DB connection." if $DBG
49
49
  end
50
50
 
51
51
  # Save an object to the database. Insert if this is a new object or
@@ -252,14 +252,13 @@ class Connection
252
252
  yield(@db)
253
253
  @db.commit()
254
254
  rescue => ex
255
- $log.error "DB Error: ERROR IN TRANSACTION"
256
- $log.error #{ex}
257
- $log.error #{ex.backtrace}
255
+ Logger.error "DB Error: ERROR IN TRANSACTION"
256
+ Logger.error #{ex}
257
+ Logger.error #{ex.backtrace}
258
258
  @db.rollback()
259
259
  end
260
260
  end
261
261
 
262
262
  end
263
263
 
264
- end # module
265
-
264
+ end
@@ -0,0 +1,80 @@
1
+ # code:
2
+ # * George Moschovitis <gm@navel.gr>
3
+ #
4
+ # (c) 2004 Navel, all rights reserved.
5
+ # $Id: meta.rb 198 2004-12-22 11:26:59Z gmosx $
6
+
7
+ class Og
8
+
9
+ module Enchant
10
+
11
+ # Enchant a managed class. Add useful DB related methods to the
12
+ # class and its instances.
13
+ #
14
+ def enchant(klass)
15
+ klass.module_eval <<-"end_eval", __FILE__, __LINE__
16
+ def self.create(*params)
17
+ obj = #{klass}.new(*params)
18
+ obj.save!
19
+ end
20
+
21
+ def self.save(obj)
22
+ Og.db << obj
23
+ end
24
+
25
+ def self.load(oid_or_name)
26
+ Og.db.load(oid_or_name, #{klass})
27
+ end
28
+
29
+ def self.[](oid_or_name)
30
+ Og.db.load(oid_or_name, #{klass})
31
+ end
32
+
33
+ def self.load_all(extra_sql = nil)
34
+ Og.db.load_all(#{klass}, extra_sql)
35
+ end
36
+
37
+ def self.all(extra_sql = nil)
38
+ Og.db.load_all(#{klass}, extra_sql)
39
+ end
40
+
41
+ def self.count(sql = "SELECT COUNT(*) FROM #{klass::DBTABLE}")
42
+ Og.db.count(sql, #{klass})
43
+ end
44
+
45
+ def self.select(sql)
46
+ Og.db.select(sql, #{klass})
47
+ end
48
+
49
+ def self.select_one(sql)
50
+ Og.db.select_one(sql, #{klass})
51
+ end
52
+
53
+ def self.one(sql)
54
+ Og.db.select_one(sql, #{klass})
55
+ end
56
+
57
+ def self.delete(obj_or_oid)
58
+ Og.db.delete(obj_or_oid, #{klass})
59
+ end
60
+
61
+ def save
62
+ Og.db << self
63
+ return self
64
+ end
65
+ alias_method :save!, :save
66
+
67
+ def update_properties(updatesql)
68
+ Og.db.pupdate(updatesql, self.oid, #{klass})
69
+ end
70
+ alias_method :pupdate!, :update_properties
71
+
72
+ def delete!
73
+ Og.db.delete(@oid, #{klass})
74
+ end
75
+ end_eval
76
+ end
77
+
78
+ end
79
+
80
+ end # namespace
@@ -7,7 +7,7 @@
7
7
  require 'og/backend'
8
8
  require 'glue/inflector'
9
9
 
10
- module Og
10
+ class Og
11
11
 
12
12
  # = MetaUtils
13
13
  #
@@ -66,7 +66,7 @@ module MetaLanguage
66
66
  #{prop_eval}
67
67
 
68
68
  def #{name}
69
- $og.load_by_oid(@#{name}_oid, #{klass})
69
+ Og.db.load_by_oid(@#{name}_oid, #{klass})
70
70
  end
71
71
 
72
72
  def #{name}=(obj_or_oid)
@@ -104,7 +104,7 @@ module MetaLanguage
104
104
  end
105
105
 
106
106
  def #{name}(extrasql = nil)
107
- $og.select_one("SELECT * FROM #{Utils.table(klass)} WHERE #{linkback}=\#\@oid \#\{extrasql\}", #{klass})
107
+ Og.db.select_one("SELECT * FROM #{Og::Backend.table(klass)} WHERE #{linkback}=\#\@oid \#\{extrasql\}", #{klass})
108
108
  end
109
109
  }
110
110
  end
@@ -123,7 +123,7 @@ module MetaLanguage
123
123
  # def children; ... end
124
124
  #
125
125
  def has_many(name, klass, options = {})
126
- name_s = G::Inflector.singularize(name.to_s)
126
+ name_s = N::Inflector.singularize(name.to_s)
127
127
 
128
128
  # linkback is the property of the child object that 'links back'
129
129
  # to this object.
@@ -140,11 +140,11 @@ module MetaLanguage
140
140
  end
141
141
 
142
142
  def #{name}(extrasql = nil)
143
- $og.select("SELECT * FROM #{Utils.table(klass)} WHERE #{linkback}=\#\@oid \#\{extrasql\}", #{klass})
143
+ Og.db.select("SELECT * FROM #{Og::Backend.table(klass)} WHERE #{linkback}=\#\@oid \#\{extrasql\}", #{klass})
144
144
  end
145
145
 
146
146
  def #{name}_count(extrasql = nil)
147
- $og.count("SELECT COUNT(*) FROM #{Utils.table(klass)} WHERE #{linkback}=\#\@oid \#\{extrasql\}")
147
+ Og.db.count("SELECT COUNT(*) FROM #{Og::Backend.table(klass)} WHERE #{linkback}=\#\@oid \#\{extrasql\}")
148
148
  end
149
149
 
150
150
  def add_#{name_s}(obj, extra = nil)
@@ -179,9 +179,9 @@ module MetaLanguage
179
179
  #++
180
180
  def many_to_many(name, klass, options = {})
181
181
  list_o = name.to_s
182
- prop_o = G::Inflector.singularize(list_o)
183
- list_m = options[:linkback] || G::Inflector.plural_name(self)
184
- prop_m = G::Inflector.singularize(list_m)
182
+ prop_o = N::Inflector.singularize(list_o)
183
+ list_m = options[:linkback] || N::Inflector.plural_name(self)
184
+ prop_m = N::Inflector.singularize(list_m)
185
185
 
186
186
  # exit if the class is allready indirectly 'enchanted' from the
187
187
  # other class of the many_to_many relation.
@@ -197,24 +197,24 @@ module MetaLanguage
197
197
 
198
198
  module_eval %{
199
199
  def #{list_o}(extrasql = nil)
200
- $og.select("SELECT d.* FROM #{Utils.table(klass)} AS d, #{Utils.join_table(self, klass)} AS j WHERE j.key1=\#\@oid AND j.key2=d.oid \#\{extrasql\}", #{klass})
200
+ Og.db.select("SELECT d.* FROM #{Og::Backend.table(klass)} AS d, #{Og::Backend.join_table(self, klass)} AS j WHERE j.key1=\#\@oid AND j.key2=d.oid \#\{extrasql\}", #{klass})
201
201
  end
202
202
 
203
203
  def #{list_o}_count(extrasql = nil)
204
- $og.select("SELECT COUNT(*) FROM #{Utils.table(klass)} AS d, #{Utils.join_table(self, klass)} AS j WHERE j.key1=\#\@oid AND j.key2=d.oid \#\{extrasql\}", #{klass})
204
+ Og.db.select("SELECT COUNT(*) FROM #{Og::Backend.table(klass)} AS d, #{Og::Backend.join_table(self, klass)} AS j WHERE j.key1=\#\@oid AND j.key2=d.oid \#\{extrasql\}", #{klass})
205
205
  end
206
206
 
207
207
  def add_#{prop_o}(obj, extra = nil)
208
- $og.exec("INSERT INTO #{Utils.join_table(self, klass)} (key1, key2) VALUES (\#\@oid, \#\{obj.oid\})")
208
+ Og.db.exec("INSERT INTO #{Og::Backend.join_table(self, klass)} (key1, key2) VALUES (\#\@oid, \#\{obj.oid\})")
209
209
  end
210
210
 
211
211
  def del_#{prop_o}(obj_or_oid, extra = nil)
212
- $og.exec("DELETE FROM #{Utils.join_table(self, klass)} WHERE key2=\#\{obj_or_oid.to_i\}")
212
+ Og.db.exec("DELETE FROM #{Og::Backend.join_table(self, klass)} WHERE key2=\#\{obj_or_oid.to_i\}")
213
213
  end
214
214
  alias_method :delete_#{prop_o}, :del_#{prop_o}
215
215
 
216
216
  def clear_#{list_o}
217
- $og.exec("DELETE FROM #{Utils.join_table(self, klass)} WHERE key1=\#\@oid")
217
+ Og.db.exec("DELETE FROM #{Og::Backend.join_table(self, klass)} WHERE key1=\#\@oid")
218
218
  end
219
219
  }
220
220
 
@@ -222,24 +222,24 @@ module MetaLanguage
222
222
 
223
223
  klass.module_eval %{
224
224
  def #{list_m}(extrasql = nil)
225
- $og.select("SELECT s.* FROM #{Utils.table(self)} AS s, #{Utils.join_table(self, klass)} AS j WHERE j.key2=\#\@oid AND j.key1=s.oid \#\{extrasql\}", #{self})
225
+ Og.db.select("SELECT s.* FROM #{Og::Backend.table(self)} AS s, #{Og::Backend.join_table(self, klass)} AS j WHERE j.key2=\#\@oid AND j.key1=s.oid \#\{extrasql\}", #{self})
226
226
  end
227
227
 
228
228
  def #{list_m}_count(extrasql = nil)
229
- $og.select("SELECT COUNT(*) FROM #{Utils.table(self)} AS s, #{Utils.join_table(self, klass)} AS j WHERE j.key2=\#\@oid AND j.key1=s.oid \#\{extrasql\}", #{self})
229
+ Og.db.select("SELECT COUNT(*) FROM #{Og::Backend.table(self)} AS s, #{Og::Backend.join_table(self, klass)} AS j WHERE j.key2=\#\@oid AND j.key1=s.oid \#\{extrasql\}", #{self})
230
230
  end
231
231
 
232
232
  def add_#{prop_m}(obj, extra = nil)
233
- $og.exec("INSERT INTO #{Utils.join_table(self, klass)} (key1, key2) VALUES (\#\{obj.oid\}, \#\@oid)")
233
+ Og.db.exec("INSERT INTO #{Og::Backend.join_table(self, klass)} (key1, key2) VALUES (\#\{obj.oid\}, \#\@oid)")
234
234
  end
235
235
 
236
236
  def del_#{prop_m}(obj_or_oid, extra = nil)
237
- $og.exec("DELETE FROM #{Utils.join_table(self, klass)} WHERE key1=\#\{obj_or_oid.to_i\}")
237
+ Og.db.exec("DELETE FROM #{Og::Backend.join_table(self, klass)} WHERE key1=\#\{obj_or_oid.to_i\}")
238
238
  end
239
239
  alias_method :delete_#{prop_m}, :del_#{prop_m}
240
240
 
241
241
  def clear_#{list_m}
242
- $og.exec("DELETE FROM #{Utils.join_table(self, klass)} WHERE key2=\#\@oid")
242
+ Og.db.exec("DELETE FROM #{Og::Backend.join_table(self, klass)} WHERE key2=\#\@oid")
243
243
  end
244
244
  }
245
245
  end
@@ -247,13 +247,13 @@ module MetaLanguage
247
247
 
248
248
  end
249
249
 
250
- end # module
250
+ end # namespace
251
251
 
252
252
  # Include the meta-language extensions into Module. If the flag is
253
253
  # false the developer is responsible for including the MetaLanguage
254
254
  # module where needed.
255
255
  #
256
- if $og_include_meta_language
256
+ if Og.include_meta_language
257
257
  class Module # :nodoc: all
258
258
  include Og::MetaLanguage
259
259
  end
@@ -10,7 +10,7 @@ require 'og'
10
10
  require 'rubygems'
11
11
  require_gem 'flexmock'
12
12
 
13
- module Og
13
+ class Og
14
14
 
15
15
  # = MockDatabase
16
16
  #
@@ -22,6 +22,7 @@ module Og
22
22
  # to avoid code duplication.
23
23
  #++
24
24
  class MockDatabase < ::FlexMock
25
+ include Og::Enchant
25
26
 
26
27
  # Managed class metadata
27
28
  #
@@ -53,11 +54,11 @@ class MockDatabase < ::FlexMock
53
54
  # Initialize FlexMock
54
55
  super
55
56
 
56
- @managed_classes = G::SafeHash.new
57
+ @managed_classes = N::SafeHash.new
57
58
 
58
- $log.info "Using mock database."
59
+ Logger.info "Using mock database."
59
60
 
60
- if $og_auto_manage_classes
61
+ if Og.auto_manage_classes
61
62
  # automatically manage classes with properties and metadata.
62
63
  # gmosx: Any idea how to optimize this?
63
64
  classes_to_manage = []
@@ -66,10 +67,13 @@ class MockDatabase < ::FlexMock
66
67
  classes_to_manage << c
67
68
  end
68
69
  end
69
- $log.info "Og auto manages the following classes:"
70
- $log.info "#{classes_to_manage.inspect}"
70
+ Logger.info "Og auto manages the following classes:"
71
+ Logger.info "#{classes_to_manage.inspect}"
71
72
  manage_classes(*classes_to_manage)
72
73
  end
74
+
75
+ # use the newly created database.
76
+ Og.use(self)
73
77
  end
74
78
 
75
79
  # Shutdown the database interface.
@@ -78,6 +82,20 @@ class MockDatabase < ::FlexMock
78
82
  end
79
83
  alias_method :close, :shutdown
80
84
 
85
+ # Get a connection from the pool to access the database.
86
+ # Stores the connection in a thread-local variable.
87
+ #
88
+ def get_connection
89
+ # nop
90
+ end
91
+ alias_method :connection, :get_connection
92
+
93
+ # Restore an unused connection to the pool.
94
+ #
95
+ def put_connection
96
+ # nop
97
+ end
98
+
81
99
  # Register a standard Ruby class as managed.
82
100
  #
83
101
  def manage(klass)
@@ -89,7 +107,7 @@ class MockDatabase < ::FlexMock
89
107
  convert(klass)
90
108
 
91
109
  # Add helper methods to the class.
92
- enchant(klass) if $og_enchant_managed_classes
110
+ enchant(klass) if Og.enchant_managed_classes
93
111
  end
94
112
 
95
113
  # Helper method to set multiple managed classes.
@@ -116,72 +134,14 @@ class MockDatabase < ::FlexMock
116
134
  #
117
135
  def convert(klass)
118
136
  klass.class_eval %{
119
- DBTABLE = "#{Og::Utils.table(klass)}"
120
- DBSEQ = "#{Og::Utils.table(klass)}_oids_seq"
137
+ DBTABLE = "#{Og::Backend.table(klass)}"
138
+ DBSEQ = "#{Og::Backend.table(klass)}_oids_seq"
121
139
 
122
140
  def to_i()
123
141
  @oid
124
142
  end
125
143
  }
126
144
  end
127
-
128
- # Enchant a managed class. Add useful DB related methods to the
129
- # class and its instances.
130
- #
131
- def enchant(klass)
132
- klass.class_eval %{
133
- def self.save(obj)
134
- $og << obj
135
- end
136
-
137
- def self.load(oid_or_name)
138
- $og.load(oid_or_name, #{klass})
139
- end
140
-
141
- def self.[](oid_or_name)
142
- $og.load(oid_or_name, #{klass})
143
- end
144
-
145
- def self.load_all(extra_sql = nil)
146
- $og.load_all(#{klass}, extra_sql)
147
- end
148
-
149
- def self.all(extra_sql = nil)
150
- $og.load_all(#{klass}, extra_sql)
151
- end
152
-
153
- def self.count(sql = "SELECT COUNT(*) FROM #{klass::DBTABLE}")
154
- $og.count(sql, #{klass})
155
- end
156
-
157
- def self.select(sql)
158
- $og.select(sql, #{klass})
159
- end
160
-
161
- def self.select_one(sql)
162
- $og.select_one(sql, #{klass})
163
- end
164
-
165
- def self.delete(obj_or_oid)
166
- $og.delete(obj_or_oid, #{klass})
167
- end
168
-
169
- def save
170
- $og << self
171
- return self
172
- end
173
- alias_method :save!, :save
174
-
175
- def update_properties(updatesql)
176
- $og.pupdate(updatesql, self.oid, #{klass})
177
- end
178
- alias_method :pupdate!, :update_properties
179
-
180
- def delete!
181
- $og.delete(@oid, #{klass})
182
- end
183
- }
184
- end
185
145
 
186
146
  # Automatically wrap connection methods.
187
147
  #
@@ -193,31 +153,14 @@ class MockDatabase < ::FlexMock
193
153
  end
194
154
  }
195
155
  end
196
- =begin
197
- wrap_method :create_table, "klass"
198
- wrap_method :drop_table, "klass"
199
- wrap_method :save, "obj"; alias_method :<<, :save; alias_method :put, :save
200
- wrap_method :insert, "obj"
201
- wrap_method :update, "obj"
202
- wrap_method :update_properties, "update_sql, obj_or_oid, klass = nil"
203
- wrap_method :pupdate, "update_sql, obj_or_oid, klass = nil"
204
- wrap_method :load, "oid, klass"; alias_method :get, :load
205
- wrap_method :load_by_oid, "oid, klass"
206
- wrap_method :load_by_name, "name, klass"
207
- wrap_method :load_all, "klass, extrasql = nil"
208
- wrap_method :select, "sql, klass"
209
- wrap_method :select_one, "sql, klass"
210
- wrap_method :count, "sql, klass = nil"
211
- wrap_method :delete, "obj_or_oid, klass = nil"
212
- wrap_method :query, "sql"
213
- wrap_method :exec, "sql"
214
- =end
156
+
215
157
  def self.create_db!(config)
158
+ # nop
216
159
  end
217
160
 
218
161
  def self.drop_db!(config)
162
+ # nop
219
163
  end
220
164
  end
221
165
 
222
- end # module
223
-
166
+ end # namespace
@@ -1,8 +1,9 @@
1
- # code:
2
- # * George Moschovitis <gm@navel.gr>
3
- #
4
- # (c) 2004 Navel, all rights reserved.
1
+ #--
2
+ # George Moschovitis <gm@navel.gr>
3
+ # (c) 2004-2005 Navel, all rights reserved.
5
4
  # $Id: version.rb 198 2004-12-22 11:26:59Z gmosx $
5
+ #++
6
6
 
7
7
  # The version of Og.
8
- $og_version = '0.7.0'
8
+
9
+ $og_version = '0.8.0'