nitro 0.12.0 → 0.13.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 (193) hide show
  1. data/{ChangeLog → CHANGELOG} +137 -0
  2. data/INSTALL +1 -2
  3. data/README +1 -1
  4. data/Rakefile +10 -61
  5. data/benchmark/{nitro/bench.rb → bench.rb} +1 -1
  6. data/benchmark/{nitro/simple-webrick-n-200.txt → simple-webrick-n-200.txt} +0 -0
  7. data/benchmark/{nitro/static-webrick-n-200.txt → static-webrick-n-200.txt} +0 -0
  8. data/benchmark/{nitro/tiny-lhttpd-n-200-c-5.txt → tiny-lhttpd-n-200-c-5.txt} +0 -0
  9. data/benchmark/{nitro/tiny-webrick-n-200-c-5.txt → tiny-webrick-n-200-c-5.txt} +0 -0
  10. data/benchmark/{nitro/tiny-webrick-n-200.txt → tiny-webrick-n-200.txt} +0 -0
  11. data/benchmark/{nitro/tiny2-webrick-n-200.txt → tiny2-webrick-n-200.txt} +0 -0
  12. data/doc/{ChangeLog.1 → CHANGELOG.1} +0 -0
  13. data/{RELEASES → doc/RELEASES} +46 -0
  14. data/doc/faq.txt +7 -0
  15. data/examples/README.windows +1 -1
  16. data/examples/ajax/controller.rb +21 -0
  17. data/examples/ajax/public/index.xhtml +70 -0
  18. data/examples/ajax/public/js/ajax.js +64 -0
  19. data/examples/ajax/run.rb +16 -0
  20. data/examples/blog/README +6 -3
  21. data/examples/blog/conf/apache.conf +2 -2
  22. data/examples/blog/conf/lhttpd.conf +2 -2
  23. data/examples/blog/log/apache.error_log +777 -0
  24. data/examples/blog/{root → public}/base.xsl +0 -0
  25. data/examples/blog/{root → public}/fcgi.rb +0 -0
  26. data/examples/blog/{root → public}/m/bubbles.gif +0 -0
  27. data/examples/blog/{root → public}/m/comments_curve.gif +0 -0
  28. data/examples/blog/{root → public}/m/down.gif +0 -0
  29. data/examples/blog/{root → public}/m/footer_bg.gif +0 -0
  30. data/examples/blog/{root → public}/m/garrow.gif +0 -0
  31. data/examples/blog/{root → public}/m/gbull.gif +0 -0
  32. data/examples/blog/{root → public}/m/grbull.gif +0 -0
  33. data/examples/blog/{root → public}/m/h1_bg.gif +0 -0
  34. data/examples/blog/{root → public}/m/header_bg.gif +0 -0
  35. data/examples/blog/{root → public}/m/nitro.gif +0 -0
  36. data/examples/blog/{root → public}/m/obull.gif +0 -0
  37. data/examples/blog/{root → public}/m/page_bg.gif +0 -0
  38. data/examples/blog/{root → public}/m/rss.gif +0 -0
  39. data/examples/blog/{root → public}/m/side_title_bg.gif +0 -0
  40. data/examples/blog/{root → public}/m/sidebar_bg.gif +0 -0
  41. data/examples/{no_xsl_blog/root → blog/public}/style.css +6 -0
  42. data/examples/blog/run.rb +10 -12
  43. data/examples/blog/{lib → src}/blog.rb +3 -3
  44. data/examples/blog/{lib/blog → src}/controller.rb +13 -2
  45. data/examples/blog/src/mailer.rb +23 -0
  46. data/examples/blog/{lib/blog/model.rb → src/models/blog.rb} +4 -7
  47. data/examples/blog/src/models/content.rb +52 -0
  48. data/examples/blog/src/views/blog_entry_email.xhtml +16 -0
  49. data/examples/blog/{root → src/views}/comments.xhtml +0 -0
  50. data/examples/blog/{root → src/views}/entry_form.xhtml +0 -0
  51. data/examples/blog/{root → src/views}/error.xhtml +0 -0
  52. data/examples/blog/{root → src/views}/index.xhtml +0 -0
  53. data/examples/blog/{root → src/views}/login.xhtml +0 -0
  54. data/examples/blog/{root → src/views}/recent_posts.xhtml +0 -0
  55. data/examples/blog/{root → src/views}/view_entry.xhtml +8 -0
  56. data/examples/blog/{root → src/views}/view_entry.xml +0 -0
  57. data/examples/blog/src/xsl/base.xsl +153 -0
  58. data/examples/blog/{root → src/xsl}/style.xsl +2 -2
  59. data/examples/no_xsl_blog/README +5 -1
  60. data/examples/no_xsl_blog/conf/apache.conf +2 -2
  61. data/examples/no_xsl_blog/conf/lhttpd.conf +2 -2
  62. data/examples/no_xsl_blog/lib/blog/model.rb +1 -1
  63. data/{lib/parts → examples/no_xsl_blog/lib}/content.rb +1 -11
  64. data/examples/no_xsl_blog/log/apache.error_log +405 -0
  65. data/examples/no_xsl_blog/{root → public}/comments.xhtml +0 -0
  66. data/examples/no_xsl_blog/{root → public}/entry_form.xhtml +0 -0
  67. data/examples/no_xsl_blog/{root → public}/fcgi.rb +0 -0
  68. data/examples/no_xsl_blog/{root → public}/index.xhtml +0 -0
  69. data/examples/no_xsl_blog/{root → public}/login.xhtml +0 -0
  70. data/examples/no_xsl_blog/{root → public}/m/bubbles.gif +0 -0
  71. data/examples/no_xsl_blog/{root → public}/m/comments_curve.gif +0 -0
  72. data/examples/no_xsl_blog/{root → public}/m/down.gif +0 -0
  73. data/examples/no_xsl_blog/{root → public}/m/footer_bg.gif +0 -0
  74. data/examples/no_xsl_blog/{root → public}/m/garrow.gif +0 -0
  75. data/examples/no_xsl_blog/{root → public}/m/gbull.gif +0 -0
  76. data/examples/no_xsl_blog/{root → public}/m/grbull.gif +0 -0
  77. data/examples/no_xsl_blog/{root → public}/m/h1_bg.gif +0 -0
  78. data/examples/no_xsl_blog/{root → public}/m/header_bg.gif +0 -0
  79. data/examples/no_xsl_blog/{root → public}/m/nitro.gif +0 -0
  80. data/examples/no_xsl_blog/{root → public}/m/obull.gif +0 -0
  81. data/examples/no_xsl_blog/{root → public}/m/page_bg.gif +0 -0
  82. data/examples/no_xsl_blog/{root → public}/m/rss.gif +0 -0
  83. data/examples/no_xsl_blog/{root → public}/m/side_title_bg.gif +0 -0
  84. data/examples/no_xsl_blog/{root → public}/m/sidebar_bg.gif +0 -0
  85. data/examples/no_xsl_blog/{root → public}/recent_posts.xhtml +0 -0
  86. data/examples/{blog/root → no_xsl_blog/public}/style.css +0 -0
  87. data/examples/no_xsl_blog/{root → public}/view_entry.xhtml +0 -0
  88. data/examples/no_xsl_blog/{root → public}/view_entry.xml +0 -0
  89. data/examples/tiny/conf/apache.conf +2 -2
  90. data/examples/tiny/log/apache.error_log +100 -0
  91. data/examples/tiny/{root → public}/fcgi.rb +0 -0
  92. data/examples/tiny/{root → public}/include.xhtml +0 -0
  93. data/examples/tiny/{root → public}/index.xhtml +0 -0
  94. data/{bin/proto/root/m → examples/tiny/public}/nitro.png +0 -0
  95. data/examples/tiny/{root → public}/upload.xhtml +0 -0
  96. data/examples/tiny/run.rb +1 -2
  97. data/examples/why_wiki/wiki.yml +1 -0
  98. data/install.rb +5 -2
  99. data/lib/nitro.rb +2 -6
  100. data/lib/nitro/adapters/fastcgi.rb +2 -2
  101. data/lib/nitro/adapters/webrick.rb +4 -4
  102. data/lib/nitro/conf.rb +5 -2
  103. data/lib/nitro/controller.rb +2 -2
  104. data/lib/nitro/dispatcher.rb +19 -8
  105. data/lib/nitro/mail.rb +252 -8
  106. data/lib/nitro/render.rb +24 -21
  107. data/lib/nitro/runner.rb +1 -1
  108. data/lib/nitro/scaffold.rb +2 -5
  109. data/lib/nitro/simple.rb +2 -1
  110. data/lib/nitro/template.rb +42 -2
  111. data/test/nitro/tc_controller.rb +9 -4
  112. data/test/nitro/tc_dispatcher.rb +4 -6
  113. data/test/nitro/tc_mail.rb +95 -0
  114. data/test/{root → public}/blog/list.xhtml +0 -0
  115. data/test/public/dummy_mailer/registration.xhtml +5 -0
  116. data/vendor/README +0 -1
  117. metadata +136 -181
  118. data/benchmark/og/bench.rb +0 -75
  119. data/benchmark/og/sqlite-no-prepare.1.txt +0 -13
  120. data/benchmark/og/sqlite-no-prepare.2.txt +0 -13
  121. data/benchmark/og/sqlite-prepare.1.txt +0 -13
  122. data/benchmark/og/sqlite-prepare.2.txt +0 -13
  123. data/bin/proto/README +0 -34
  124. data/bin/proto/conf/apache.conf +0 -1
  125. data/bin/proto/conf/app.conf.rb +0 -14
  126. data/bin/proto/conf/lhttpd.conf +0 -236
  127. data/bin/proto/ctl +0 -4
  128. data/bin/proto/lib/README +0 -5
  129. data/bin/proto/log/README +0 -3
  130. data/bin/proto/root/fcgi.rb +0 -6
  131. data/bin/proto/root/index.xhtml +0 -69
  132. data/bin/proto/root/style.css +0 -152
  133. data/bin/proto/root/style.xsl +0 -99
  134. data/doc/og_config.txt +0 -35
  135. data/doc/og_tutorial.txt +0 -595
  136. data/examples/og/README +0 -11
  137. data/examples/og/mock_example.rb +0 -50
  138. data/examples/og/mysql_to_psql.rb +0 -96
  139. data/examples/og/run.rb +0 -286
  140. data/examples/tiny/root/nitro.png +0 -0
  141. data/lib/glue.rb +0 -55
  142. data/lib/glue/array.rb +0 -61
  143. data/lib/glue/attribute.rb +0 -83
  144. data/lib/glue/cache.rb +0 -138
  145. data/lib/glue/flexob.rb +0 -12
  146. data/lib/glue/hash.rb +0 -122
  147. data/lib/glue/inflector.rb +0 -91
  148. data/lib/glue/logger.rb +0 -147
  149. data/lib/glue/misc.rb +0 -14
  150. data/lib/glue/mixins.rb +0 -36
  151. data/lib/glue/number.rb +0 -24
  152. data/lib/glue/object.rb +0 -32
  153. data/lib/glue/pool.rb +0 -60
  154. data/lib/glue/property.rb +0 -408
  155. data/lib/glue/string.rb +0 -162
  156. data/lib/glue/time.rb +0 -85
  157. data/lib/glue/validation.rb +0 -394
  158. data/lib/og.rb +0 -185
  159. data/lib/og/adapter.rb +0 -513
  160. data/lib/og/adapters/filesys.rb +0 -121
  161. data/lib/og/adapters/mysql.rb +0 -347
  162. data/lib/og/adapters/oracle.rb +0 -375
  163. data/lib/og/adapters/psql.rb +0 -273
  164. data/lib/og/adapters/sqlite.rb +0 -262
  165. data/lib/og/backend.rb +0 -297
  166. data/lib/og/connection.rb +0 -304
  167. data/lib/og/database.rb +0 -282
  168. data/lib/og/enchant.rb +0 -125
  169. data/lib/og/meta.rb +0 -373
  170. data/lib/og/mock.rb +0 -165
  171. data/lib/og/observer.rb +0 -53
  172. data/lib/og/typemacros.rb +0 -23
  173. data/lib/parts/README +0 -9
  174. data/test/glue/tc_attribute.rb +0 -22
  175. data/test/glue/tc_cache.rb +0 -45
  176. data/test/glue/tc_hash.rb +0 -38
  177. data/test/glue/tc_logger.rb +0 -39
  178. data/test/glue/tc_numbers.rb +0 -20
  179. data/test/glue/tc_property.rb +0 -89
  180. data/test/glue/tc_property_mixins.rb +0 -93
  181. data/test/glue/tc_property_type_checking.rb +0 -35
  182. data/test/glue/tc_strings.rb +0 -103
  183. data/test/glue/tc_validation.rb +0 -188
  184. data/test/og/tc_filesys.rb +0 -83
  185. data/test/og/tc_lifecycle.rb +0 -104
  186. data/test/og/tc_many_to_many.rb +0 -62
  187. data/test/og/tc_meta.rb +0 -55
  188. data/test/og/tc_observer.rb +0 -85
  189. data/test/og/tc_sqlite.rb +0 -87
  190. data/test/tc_og.rb +0 -355
  191. data/vendor/composite_sexp_processor.rb +0 -43
  192. data/vendor/parse_tree.rb +0 -745
  193. data/vendor/sexp_processor.rb +0 -453
@@ -1,104 +0,0 @@
1
- #! /usr/bin/env ruby
2
- # vim:sw=2:ai
3
-
4
- # * Thomas Quas <tquas@yahoo.com>
5
- # * George Moschovitis <gm@navel.gr>
6
- # $Id$
7
-
8
- $LOAD_PATH.unshift 'lib'
9
-
10
- require 'test/unit'
11
- require 'glue/logger'
12
- require 'og/mock'
13
-
14
- $DBG = false
15
-
16
- class Dummy
17
- prop_accessor :date, Time
18
- attr_reader :call_stack
19
-
20
- def og_pre_insert( oid )
21
- @call_stack << 'pre_insert'
22
- end
23
-
24
- def og_post_insert( oid )
25
- @call_stack << 'post_insert'
26
- end
27
-
28
- def og_pre_update( oid )
29
- @call_stack << 'pre_update'
30
- end
31
-
32
- def og_post_update( oid )
33
- @call_stack << 'post_update'
34
- end
35
-
36
- def self.og_pre_delete( conn, oid )
37
- raise 'undeletable'
38
- end
39
-
40
- def initialize
41
- @call_stack = []
42
- end
43
- end
44
-
45
- # Tests the Og managed objects lifecycle.
46
- class TC_CallbackTest < ::Test::Unit::TestCase
47
- def test_insert
48
- obj = Dummy.new
49
- obj.save!
50
-
51
- assert( obj.call_stack.shift == 'pre_insert' )
52
- assert( obj.call_stack.shift == 'post_insert' )
53
- assert( obj.call_stack.empty? )
54
- end
55
-
56
- def test_update
57
- obj = Dummy.new
58
- obj.save!
59
- obj.call_stack.shift
60
- obj.call_stack.shift
61
-
62
- obj.date = Time.now
63
- obj.save
64
- assert( obj.call_stack.shift == "pre_update" )
65
- assert( obj.call_stack.shift == "post_update" )
66
- assert( obj.call_stack.empty? )
67
- end
68
-
69
- def test_delete
70
- obj = Dummy.new
71
- obj.save!
72
- obj.call_stack.shift
73
- obj.call_stack.shift
74
-
75
- assert_raise( RuntimeError, 'undeletable' ) { obj.delete! }
76
- end
77
-
78
- def setup
79
- psql = true
80
-
81
- if psql
82
- config = {
83
- :adapter => 'psql',
84
- # :address => 'localhost',
85
- :database => 'test',
86
- :user => 'postgres',
87
- :password => 'navelrulez',
88
- :connection_count => 1
89
- }
90
- else
91
- config = {
92
- :adapter => 'mysql',
93
- # :address => 'localhost',
94
- :database => 'test',
95
- :user => 'root',
96
- :password => 'navelrulez',
97
- :connection_count => 1
98
- }
99
- end
100
- Og::Database.drop_db!(config)
101
- $og = Og::Database.new(config)
102
- $og.get_connection()
103
- end
104
- end
@@ -1,62 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
2
-
3
- require 'test/unit'
4
- require 'ostruct'
5
-
6
- require 'og'
7
-
8
- class TC_OgManyToMany < Test::Unit::TestCase # :nodoc: all
9
- include N
10
-
11
- class Attribute
12
- property :name, String
13
-
14
- def initialize(name = nil)
15
- @name = name
16
- end
17
- end
18
-
19
- class Klass
20
- property :name, String
21
- many_to_many :observed_attributes, Attribute, :linkback => :klass_observers
22
- many_to_many :controlled_attributes, Attribute, :linkback => :klass_controllers
23
-
24
- def initialize(name = nil)
25
- @name = name
26
- end
27
- end
28
-
29
- def test_all
30
- config = {
31
- :adapter => 'psql',
32
- :database => 'test',
33
- :user => 'postgres',
34
- :password => 'navelrulez',
35
- :connection_count => 2
36
- }
37
-
38
- Og::Database.drop_db!(config)
39
- og = Og::Database.new(config)
40
-
41
- og.get_connection
42
-
43
- k = Klass.create('klass1')
44
- a1 = Attribute.create('attr1')
45
- a2 = Attribute.create('attr2')
46
-
47
- k.add_observed_attribute(a1)
48
- k.add_observed_attribute(a2)
49
-
50
- assert_equal 2, k.observed_attributes.size
51
- assert_equal 1, a1.klass_observers.size
52
-
53
- k.add_controlled_attribute(a1)
54
-
55
- assert_equal 1, k.controlled_attributes.size
56
- assert_equal 1, a1.klass_controllers.size
57
-
58
- og.put_connection
59
- og.shutdown
60
- end
61
-
62
- end
data/test/og/tc_meta.rb DELETED
@@ -1,55 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
2
-
3
- require 'test/unit'
4
- require 'ostruct'
5
-
6
- require 'og'
7
-
8
- class TC_OgMeta < Test::Unit::TestCase # :nodoc: all
9
- include N
10
-
11
- # Forward declaration.
12
-
13
- class Comment; end
14
-
15
- class Article
16
- property :name, String
17
- property :age, Fixnum
18
- has_many :comments, Comment
19
-
20
- def initialize (name = nil, age = nil)
21
- @name, @age = name, age
22
- end
23
- end
24
-
25
- class Comment
26
- prop_accessor :text, String
27
- belongs_to :article, Article
28
-
29
- def initialize(text = nil)
30
- @text = text
31
- end
32
- end
33
-
34
- def setup
35
- end
36
-
37
- def teardown
38
- end
39
-
40
- def test_all
41
- par = Article.__meta[:props_and_relations]
42
- assert_equal 3, par.size
43
- assert_equal N::Property, par[1].class
44
- assert_equal Og::HasMany, par[2].class
45
-
46
- par = Comment.__meta[:props_and_relations]
47
- assert_equal 3, par.size
48
- assert_equal N::Property, par[0].class
49
- assert_equal Og::BelongsTo, par[1].class
50
- assert_equal 'article_oid', par[1].meta[:property].to_s
51
- assert_equal String, par[0].klass
52
- assert_equal Article, par[1].foreign_class
53
- end
54
-
55
- end
@@ -1,85 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
2
-
3
- require 'test/unit'
4
- require 'ostruct'
5
-
6
- require 'og'
7
-
8
- class TC_OgObserver < Test::Unit::TestCase # :nodoc: all
9
- include N
10
-
11
- class User
12
- property :name
13
- end
14
-
15
- class Article
16
- property :name, String
17
- property :age, Fixnum
18
-
19
- def initialize (name = nil, age = nil)
20
- @name, @age = name, age
21
- end
22
- end
23
-
24
- # Example of a simple class that acts as an observer.
25
-
26
- class ArticleObserver
27
- attr :count
28
-
29
- def initialize
30
- @count = 0
31
- end
32
-
33
- def og_pre_insert(conn, obj)
34
- @count += 1
35
- end
36
- end
37
-
38
- # Rails style observer, baaah...
39
-
40
- class MultiObserver < Og::Observer
41
- observe Article, User
42
-
43
- attr :count
44
-
45
- def initialize
46
- @count = 0
47
- end
48
-
49
- def og_pre_insert(conn, obj)
50
- @count += 1
51
- end
52
- end
53
-
54
- def setup
55
- end
56
-
57
- def teardown
58
- end
59
-
60
- def test_all
61
- config = {
62
- :adapter => 'psql',
63
- :database => 'test',
64
- :user => 'postgres',
65
- :password => 'navelrulez',
66
- :connection_count => 2
67
- }
68
-
69
- Og::Database.drop_db!(config)
70
- og = Og::Database.new(config)
71
-
72
- og.get_connection
73
-
74
- ao = ArticleObserver.new
75
- Article.add_observer(ao)
76
- Article.create('Hello', 5)
77
-
78
- assert_equal 1, ao.count
79
- assert_equal 1, MultiObserver.instance.count
80
-
81
- og.put_connection
82
- og.shutdown
83
- end
84
-
85
- end
data/test/og/tc_sqlite.rb DELETED
@@ -1,87 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
2
-
3
- =begin
4
-
5
- require 'test/unit'
6
- require 'ostruct'
7
-
8
- require 'og'
9
- require 'og/adapters/sqlite'
10
-
11
- class TC_OgSqlite3 < Test::Unit::TestCase # :nodoc: all
12
- include N
13
-
14
- # Forward declaration.
15
-
16
- class Comment; end
17
-
18
- class Article
19
- prop_accessor :name, String
20
- prop_accessor :age, Fixnum
21
- has_many :comments, Comment
22
-
23
- def initialize (name = nil, age = nil)
24
- @name, @age = name, age
25
- end
26
- end
27
-
28
- class Comment
29
- prop_accessor :text, String
30
- belongs_to :article, Article
31
-
32
- def initialize(text = nil)
33
- @text = text
34
- end
35
- end
36
-
37
- def setup
38
- config = {
39
- :adapter => 'sqlite',
40
- :database => 'test',
41
- :connection_count => 2
42
- }
43
-
44
- $DBG = true
45
-
46
- Og::Database.drop_db!(config)
47
- @og = Og::Database.new(config)
48
- end
49
-
50
- def teardown
51
- @og.shutdown
52
- end
53
-
54
- def test_all
55
- a = Article.new('gmosx', 30)
56
- a.save!
57
-
58
- a1 = Article[1]
59
-
60
- assert_equal 'gmosx', a1.name
61
- assert_equal 30, a1.age
62
- assert_equal 1, a1.oid
63
-
64
- Article.create('drak', 12)
65
- Article.create('ekarak', 34)
66
- Article.create('mario', 53)
67
- Article.create('elathan', 34)
68
-
69
- articles = Article.all
70
-
71
- assert_equal 5, articles.size
72
-
73
- a3 = Article[3]
74
-
75
- assert_equal 'ekarak', a3.name
76
-
77
- c1 = Comment.new('a comment')
78
- c1.save!
79
- a3.add_comment(c1)
80
-
81
- a5 = Article[3]
82
- assert_equal 1, a5.comments.size
83
- end
84
-
85
- end
86
-
87
- =end
data/test/tc_og.rb DELETED
@@ -1,355 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
-
3
- $DBG = true
4
-
5
- require 'test/unit'
6
-
7
- require 'og'
8
-
9
- module Test # :nodoc: all
10
-
11
- # bug: creates a table that fucks-up postgres if not
12
- # correctly escaped.
13
- class User
14
- prop_accessor :name, String, :unique => true
15
- prop_accessor :banned, TrueClass
16
-
17
- def initialize(name = nil)
18
- @name = name
19
- end
20
- end
21
-
22
- class Role
23
- prop_accessor :title, String
24
- property :chk_not_null, Fixnum, :default => 2
25
- end
26
-
27
- class Comment; end
28
- class Article; end
29
-
30
- class Category
31
- prop_accessor :title, String
32
- many_to_many :articles, Article
33
- end
34
-
35
- class Article
36
- prop_accessor :title, String
37
- prop_accessor :body, String
38
- prop_accessor :owner_oid, Fixnum, :sql_index => true
39
- prop_accessor :another_oid, Fixnum
40
- property :create_time, Time
41
- property :rate, Float
42
- sql_index 'owner_oid, another_oid'
43
- prop_accessor :options, Hash
44
- has_many :comments, Test::Comment
45
-
46
- def initialize(title = nil, body = nil)
47
- @title = title
48
- @body = body
49
- @options = {"hello" => "world"}
50
- end
51
-
52
- def og_pre_insert(conn)
53
- puts "-- PRE INSERT CALLED FOR ARTICLE"
54
- end
55
-
56
- def og_post_insert_update(conn)
57
- puts "-- POST INSERT UPDATE CALLED FOR ARTICLE"
58
- end
59
-
60
- def og_post_update(conn)
61
- puts "-- POST UPDATE CALLED FOR ARTICLE"
62
- end
63
- end
64
-
65
- class Comment
66
- prop_accessor :body, String
67
- prop_accessor :create_time, Time
68
- belongs_to :article, Test::Article, :extra_sql => 'NOT NULL'
69
- belongs_to :author, Test::User
70
-
71
- def initialize(body = nil)
72
- @create_time = Time.now
73
- @body = body
74
- end
75
-
76
- def og_pre_insert(conn)
77
- puts "-- PRE INSERT CALLED FOR COMMENT"
78
- end
79
-
80
- def og_post_insert(conn)
81
- puts "-- POST INSERT CALLED FOR COMMENT"
82
- end
83
- end
84
-
85
- module MyMixin
86
- prop_accessor :title, String
87
- end
88
-
89
- class MyClass
90
- include Test::MyMixin
91
- end
92
-
93
- class OrderItem
94
- prop_accessor :onumber, Fixnum
95
- refers_to :article, Article
96
- end
97
-
98
- class TC_N_OG < Test::Unit::TestCase
99
-
100
- @@adapter = :psql
101
-
102
- case @@adapter
103
-
104
- when :psql
105
- def test_psql
106
- config = {
107
- :adapter => 'psql',
108
- # :address => 'localhost',
109
- :database => 'test',
110
- :user => 'postgres',
111
- :password => 'navelrulez',
112
- :connection_count => 2
113
- }
114
-
115
- run_all_tests(config)
116
- end
117
-
118
- when :mysql
119
- def test_mysql
120
- config = {
121
- :adapter => 'mysql',
122
- # :address => 'localhost',
123
- :database => 'test',
124
- :user => 'root',
125
- :password => 'navelrulez',
126
- :connection_count => 2
127
- }
128
-
129
- run_all_tests(config)
130
- end
131
-
132
- when :oracle
133
- def test_oracle
134
- config = {
135
- :adapter => 'oracle',
136
- # :address => 'localhost',
137
- :database => 'test',
138
- :user => 'root',
139
- :password => 'navelrulez',
140
- :connection_count => 2
141
- }
142
-
143
- run_all_tests(config)
144
- end
145
-
146
- when :sqlite
147
- def test_sqlite
148
- config = {
149
- :adapter => 'sqlite',
150
- :database => 'test',
151
- :connection_count => 2
152
- }
153
-
154
- run_all_tests(config)
155
- end
156
- end
157
-
158
- # gmosx: hmm, implemented in one method to enforce order.
159
-
160
- def run_all_tests(config)
161
- Og::Database.drop_db!(config)
162
- og = Og::Database.new(config)
163
-
164
- og.get_connection
165
-
166
- article = Article.new("Title", "Here comes the body")
167
- article.create_time = now = Time.now
168
- article.rate = rate = 12.33
169
- og << article
170
-
171
- article.title = "Changed"
172
- article.save!
173
-
174
- og.pupdate("body='Hello'", article)
175
-
176
- article.update_properties "body='Hello'"
177
-
178
- another = Article[1]
179
- assert_equal(1, another.oid)
180
- assert_equal now.to_i, another.create_time.to_i
181
- assert_equal rate, another.rate
182
-
183
- # bug: yaml load problem.
184
- assert_equal("world", another.options["hello"])
185
-
186
- # bug: YAMLing nil property
187
- another.options = nil
188
- another.save!
189
-
190
- assert_equal(nil, og.load(30000, Article))
191
-
192
- articles = og.load_all(Article)
193
-
194
- # p articles
195
- # p Article[23]
196
-
197
- user = User.new("gmosx")
198
- user.save!
199
-
200
- user = User["gmosx"]
201
-
202
- assert_equal("gmosx", user.name)
203
-
204
- users1 = og.select("name='gmosx' ORDER BY oid", User)
205
-
206
- users = og.select("SELECT * FROM #{User::DBTABLE} WHERE name='gmosx' ORDER BY oid", User)
207
-
208
- users2 = User.select "name='gmosx' ORDER BY oid"
209
-
210
- assert_equal(users1.size, users2.size)
211
-
212
- article = Article.new("Title", "Body")
213
- article.save!
214
-
215
- # advanced finder
216
-
217
- users3 = User.find_by_banned(true)
218
- assert users3.empty?
219
-
220
- user3 = User.find_by_name('gmosx')
221
- assert_equal 'gmosx', user3.name
222
-
223
- user3.banned = true
224
- user3.save
225
-
226
- users3 = User.find_by_banned(true)
227
- assert !users3.empty?
228
-
229
- comment = Comment.new("This is a comment")
230
- comment.article = article
231
- comment.author = User["gmosx"]
232
- comment.save!
233
-
234
- # test automatically generated add_comment
235
- comment = Comment.new("This is another comment")
236
- comment.author = User["gmosx"]
237
- article.add_comment(comment)
238
-
239
- # test add_comment with block.
240
- article.add_comment do |c|
241
- c.body = 'Another one'
242
- c.author = User['gmosx']
243
- end
244
-
245
- assert_equal(article.oid, comment.article_oid)
246
-
247
- comments = article.comments
248
-
249
- assert_equal(3, comments.size)
250
-
251
- # test many_to_many relations.
252
-
253
- category = Category.create
254
- category.add_article(article)
255
-
256
- assert_equal 1, category.articles.size
257
-
258
- # bug: test many_to_many with non-saved object.
259
-
260
- ans = Article.new
261
- ans.title = 'non saved'
262
- category.add_article(ans)
263
-
264
- category.add_article do |a|
265
- a.title = 'another'
266
- end
267
-
268
- assert_equal 3, category.articles.size
269
-
270
- assert_equal 1, article.categories.size
271
-
272
- assert_equal("gmosx", comments[0].author.name)
273
-
274
- article.delete_all_comments
275
- assert article.comments.empty?
276
-
277
- # test cascading delete
278
-
279
- article.add_comment(Comment.new("hello"))
280
- article.add_comment(Comment.new("world"))
281
-
282
- assert_equal 2, Comment.count
283
-
284
- Article.delete(article)
285
-
286
- assert Comment.all.empty?
287
-
288
- comment.delete!
289
-
290
- # test extra_sql
291
-
292
- for p in Comment.__props
293
- if :article_oid == p.symbol
294
- assert_equal('NOT NULL', p.meta[:extra_sql])
295
- break
296
- end
297
- end
298
-
299
- assert(og.managed_classes.include?(Test::Article))
300
-
301
- # bug: indirectly managed (includes managed Module)
302
- assert(og.managed_classes.include?(Test::MyClass))
303
-
304
- # test create
305
- article = Article.create("title", "body")
306
- # assert_equal(3, article.oid)
307
-
308
- # test refers_to
309
-
310
- oi = OrderItem.new
311
- oi.article = article
312
- oi.save
313
-
314
- assert_equal article.oid, oi.article_oid
315
-
316
- # bug
317
-
318
- user = User['gmosx']
319
- user.banned = true
320
- user.save!
321
-
322
- user = User['gmosx']
323
- assert_equal true, user.banned
324
-
325
- # test not null
326
-
327
- role = Role.new
328
-
329
- begin
330
- role.save
331
- rescue Exception, StandardError
332
- # drink it
333
- end
334
-
335
- role = Role[1]
336
-
337
- # not saved due to not nul constraint.
338
- assert_equal nil, role
339
-
340
- og.put_connection
341
- og.shutdown
342
-
343
- # Test database allready exists
344
-
345
- og = Og::Database.new(config)
346
-
347
- user = User.new("kokoriko")
348
- user.save!
349
-
350
- og.shutdown
351
- end
352
-
353
- end
354
-
355
- end