nitro 0.20.0 → 0.21.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 (115) hide show
  1. data/CHANGELOG +752 -543
  2. data/INSTALL +38 -38
  3. data/README +264 -225
  4. data/Rakefile +48 -49
  5. data/bin/nitro +3 -3
  6. data/bin/nitrogen +6 -6
  7. data/doc/AUTHORS +10 -10
  8. data/doc/CHANGELOG.1 +1939 -1939
  9. data/doc/CHANGELOG.2 +954 -954
  10. data/doc/LICENSE +3 -3
  11. data/doc/MIGRATION +28 -0
  12. data/doc/RELEASES +814 -643
  13. data/doc/config.txt +5 -5
  14. data/install.rb +7 -17
  15. data/lib/nitro.rb +38 -9
  16. data/lib/nitro/adapter/cgi.rb +311 -312
  17. data/lib/nitro/adapter/fastcgi.rb +18 -25
  18. data/lib/nitro/adapter/webrick.rb +128 -137
  19. data/lib/nitro/adapter/wee.rb +51 -0
  20. data/lib/nitro/caching.rb +20 -20
  21. data/lib/nitro/caching/actions.rb +43 -43
  22. data/lib/nitro/caching/fragments.rb +46 -46
  23. data/lib/nitro/caching/invalidation.rb +11 -11
  24. data/lib/nitro/caching/output.rb +65 -65
  25. data/lib/nitro/caching/stores.rb +67 -67
  26. data/lib/nitro/compiler.rb +262 -0
  27. data/lib/nitro/compiler/elements.rb +0 -0
  28. data/lib/nitro/compiler/errors.rb +65 -0
  29. data/lib/nitro/compiler/localization.rb +25 -0
  30. data/lib/nitro/compiler/markup.rb +19 -0
  31. data/lib/nitro/compiler/shaders.rb +206 -0
  32. data/lib/nitro/compiler/squeeze.rb +20 -0
  33. data/lib/nitro/compiler/xslt.rb +61 -0
  34. data/lib/nitro/context.rb +87 -88
  35. data/lib/nitro/controller.rb +151 -158
  36. data/lib/nitro/cookie.rb +34 -34
  37. data/lib/nitro/dispatcher.rb +195 -186
  38. data/lib/nitro/element.rb +132 -126
  39. data/lib/nitro/element/java_script.rb +6 -6
  40. data/lib/nitro/flash.rb +66 -66
  41. data/lib/nitro/mail.rb +192 -192
  42. data/lib/nitro/mixin/buffer.rb +66 -0
  43. data/lib/nitro/mixin/debug.rb +16 -16
  44. data/lib/nitro/mixin/form.rb +88 -0
  45. data/lib/nitro/mixin/helper.rb +2 -2
  46. data/lib/nitro/mixin/javascript.rb +108 -108
  47. data/lib/nitro/mixin/markup.rb +144 -0
  48. data/lib/nitro/mixin/pager.rb +202 -202
  49. data/lib/nitro/mixin/rss.rb +67 -0
  50. data/lib/nitro/mixin/table.rb +63 -0
  51. data/lib/nitro/mixin/xhtml.rb +75 -0
  52. data/lib/nitro/mixin/xml.rb +124 -0
  53. data/lib/nitro/render.rb +183 -359
  54. data/lib/nitro/request.rb +140 -140
  55. data/lib/nitro/response.rb +27 -27
  56. data/lib/nitro/routing.rb +21 -21
  57. data/lib/nitro/scaffold.rb +124 -118
  58. data/lib/nitro/server.rb +117 -80
  59. data/lib/nitro/server/runner.rb +341 -0
  60. data/lib/nitro/service.rb +12 -12
  61. data/lib/nitro/service/xmlrpc.rb +22 -22
  62. data/lib/nitro/session.rb +122 -120
  63. data/lib/nitro/session/drb.rb +9 -9
  64. data/lib/nitro/session/drbserver.rb +34 -34
  65. data/lib/nitro/template.rb +171 -155
  66. data/lib/nitro/testing/assertions.rb +90 -90
  67. data/lib/nitro/testing/context.rb +16 -16
  68. data/lib/nitro/testing/testcase.rb +34 -34
  69. data/proto/conf/lhttpd.conf +9 -9
  70. data/proto/public/error.xhtml +75 -75
  71. data/proto/public/index.xhtml +18 -18
  72. data/proto/public/js/behaviour.js +65 -65
  73. data/proto/public/js/controls.js +1 -1
  74. data/proto/public/js/prototype.js +3 -3
  75. data/proto/public/settings.xhtml +61 -61
  76. data/proto/run.rb +1 -5
  77. data/test/nitro/adapter/raw_post1.bin +0 -0
  78. data/test/nitro/adapter/tc_cgi.rb +57 -57
  79. data/test/nitro/adapter/tc_webrick.rb +4 -4
  80. data/test/nitro/mixin/tc_pager.rb +25 -25
  81. data/test/nitro/mixin/tc_rss.rb +24 -0
  82. data/test/nitro/mixin/tc_table.rb +31 -0
  83. data/test/nitro/mixin/tc_xhtml.rb +13 -0
  84. data/test/nitro/tc_caching.rb +10 -10
  85. data/test/nitro/tc_context.rb +8 -8
  86. data/test/nitro/tc_controller.rb +48 -48
  87. data/test/nitro/tc_cookie.rb +6 -6
  88. data/test/nitro/tc_dispatcher.rb +64 -64
  89. data/test/nitro/tc_element.rb +27 -27
  90. data/test/nitro/tc_flash.rb +31 -31
  91. data/test/nitro/tc_mail.rb +63 -63
  92. data/test/nitro/tc_server.rb +26 -26
  93. data/test/nitro/tc_session.rb +9 -9
  94. data/test/nitro/tc_template.rb +19 -19
  95. data/test/public/blog/list.xhtml +1 -1
  96. metadata +31 -37
  97. data/lib/nitro/buffering.rb +0 -45
  98. data/lib/nitro/builder/form.rb +0 -104
  99. data/lib/nitro/builder/rss.rb +0 -104
  100. data/lib/nitro/builder/table.rb +0 -80
  101. data/lib/nitro/builder/xhtml.rb +0 -132
  102. data/lib/nitro/builder/xml.rb +0 -131
  103. data/lib/nitro/conf.rb +0 -36
  104. data/lib/nitro/environment.rb +0 -21
  105. data/lib/nitro/errors.rb +0 -69
  106. data/lib/nitro/localization.rb +0 -153
  107. data/lib/nitro/markup.rb +0 -147
  108. data/lib/nitro/output.rb +0 -24
  109. data/lib/nitro/runner.rb +0 -348
  110. data/lib/nitro/shaders.rb +0 -206
  111. data/test/nitro/builder/tc_rss.rb +0 -23
  112. data/test/nitro/builder/tc_table.rb +0 -30
  113. data/test/nitro/builder/tc_xhtml.rb +0 -39
  114. data/test/nitro/builder/tc_xml.rb +0 -56
  115. data/test/nitro/tc_localization.rb +0 -49
@@ -323,7 +323,7 @@ Ajax.Autocompleter = Class.create();
323
323
  Ajax.Autocompleter.prototype = Object.extend(new Autocompleter.Base(),
324
324
  Object.extend(new Ajax.Base(), {
325
325
  initialize: function(element, update, url, options) {
326
- this.base_initialize(element, update, options);
326
+ this.base_initialize(element, update, options);
327
327
  this.options.asynchronous = true;
328
328
  this.options.onComplete = this.onComplete.bind(this)
329
329
  this.options.method = 'post';
@@ -121,10 +121,10 @@ function $() {
121
121
 
122
122
  if (!Array.prototype.push) {
123
123
  Array.prototype.push = function() {
124
- var startLength = this.length;
125
- for (var i = 0; i < arguments.length; i++)
124
+ var startLength = this.length;
125
+ for (var i = 0; i < arguments.length; i++)
126
126
  this[startLength + i] = arguments[i];
127
- return this.length;
127
+ return this.length;
128
128
  }
129
129
  }
130
130
 
@@ -1,64 +1,64 @@
1
1
  <html>
2
- <head>
3
- <title>Settings</title>
4
- <style>
5
- .path {
6
- padding: 5px;
7
- font-size: 140%;
8
- background: #ddd;
9
- }
10
- .error {
11
- padding: 5px;
12
- padding-top: 15px;
13
- font-size: 140%;
14
- color: #f00;
15
- }
16
- .load {
17
- padding: 5px;
18
- color: #555;
19
- }
20
- .source {
21
- border: 1px solid #ccc;
22
- padding: 10px;
23
- margin-top: 10px; margin-bottom: 10px;
24
- }
25
- h2 {
26
- padding-left: 5px;
27
- background: #eee;
28
- }
29
- table {
30
- border-collapse: collapse;
31
- width: 100%;
32
- }
33
- th {
34
- border: 1px solid #ccc; padding: 5px; background: #ff0
35
- }
36
- td {
37
- border: 1px solid #ccc; padding: 5px
38
- }
39
- </style>
40
- </head>
41
- <body>
42
- <h1>Settings</h1>
2
+ <head>
3
+ <title>Settings</title>
4
+ <style>
5
+ .path {
6
+ padding: 5px;
7
+ font-size: 140%;
8
+ background: #ddd;
9
+ }
10
+ .error {
11
+ padding: 5px;
12
+ padding-top: 15px;
13
+ font-size: 140%;
14
+ color: #f00;
15
+ }
16
+ .load {
17
+ padding: 5px;
18
+ color: #555;
19
+ }
20
+ .source {
21
+ border: 1px solid #ccc;
22
+ padding: 10px;
23
+ margin-top: 10px; margin-bottom: 10px;
24
+ }
25
+ h2 {
26
+ padding-left: 5px;
27
+ background: #eee;
28
+ }
29
+ table {
30
+ border-collapse: collapse;
31
+ width: 100%;
32
+ }
33
+ th {
34
+ border: 1px solid #ccc; padding: 5px; background: #ff0
35
+ }
36
+ td {
37
+ border: 1px solid #ccc; padding: 5px
38
+ }
39
+ </style>
40
+ </head>
41
+ <body>
42
+ <h1>Settings</h1>
43
43
 
44
- <table width="100%">
45
- <tr>
46
- <th>Name</th>
47
- <th>Value</th>
48
- <th>Type</th>
49
- <th>Description</th>
50
- </tr>
51
- <?r for s in Configuration.settings ?>
52
- <tr>
53
- <td>#{s.owner}.<strong>#{s.name}</strong></td>
54
- <td>#{s.value.inspect}</td>
55
- <td>#{s.type}</td>
56
- <td>#{s.options[:doc]}</td>
57
- </tr>
58
- <?r end ?>
59
- </table>
60
-
61
- <br /><br />
62
- Powered by <a href="http://www.nitrohq.com">Nitro</a> version #{Nitro::Version}
63
- </body>
44
+ <table width="100%">
45
+ <tr>
46
+ <th>Name</th>
47
+ <th>Value</th>
48
+ <th>Type</th>
49
+ <th>Description</th>
50
+ </tr>
51
+ <?r for s in Configuration.settings ?>
52
+ <tr>
53
+ <td>#{s.owner}.<strong>#{s.name}</strong></td>
54
+ <td>#{s.value.inspect}</td>
55
+ <td>#{s.type}</td>
56
+ <td>#{s.options[:doc]}</td>
57
+ </tr>
58
+ <?r end ?>
59
+ </table>
60
+
61
+ <br /><br />
62
+ Powered by <a href="http://www.nitrohq.com">Nitro</a> version #{Nitro::Version}
63
+ </body>
64
64
  </html>
data/proto/run.rb CHANGED
@@ -1,9 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # * George Moschovitis <gm@navel.gr>
4
- # (c) 2004-2005 Navel, all rights reserved.
5
- # $Id: run.rb 1 2005-04-11 11:04:30Z gmosx $
6
-
7
3
  require 'nitro'
8
4
 
9
- Nitro::Runner.run(:host => '127.0.0.1', :port => 9999)
5
+ Nitro.run
Binary file
@@ -8,66 +8,66 @@ require 'nitro/cookie'
8
8
  require 'nitro/adapter/cgi'
9
9
 
10
10
  class TC_AdaptersCgi < Test::Unit::TestCase # :nodoc: all
11
- include Nitro
12
-
13
- def test_parse_query_parameters
14
- qs = 'name=tml;id=12354'
15
- params = CgiUtils.parse_query_string(qs)
16
- assert_equal 2, params.size
17
- assert_equal 'tml', params['name']
18
-
19
- qs = ''
20
- params = CgiUtils.parse_query_string(qs)
21
- assert_equal 0, params.size
22
-
23
- qs = nil
24
- params = CgiUtils.parse_query_string(qs)
25
- assert_equal 0, params.size
26
-
27
- qs = 'name=tml;arr[]=1;arr[]=2;arr[]=3'
28
- params = CgiUtils.parse_query_string(qs)
29
- assert_equal 2, params.size
30
- arr = params['arr']
31
- assert_equal Array, arr.class
32
- assert_equal 3, arr.size
33
- end
11
+ include Nitro
12
+
13
+ def test_parse_query_parameters
14
+ qs = 'name=tml;id=12354'
15
+ params = CgiUtils.parse_query_string(qs)
16
+ assert_equal 2, params.size
17
+ assert_equal 'tml', params['name']
18
+
19
+ qs = ''
20
+ params = CgiUtils.parse_query_string(qs)
21
+ assert_equal 0, params.size
22
+
23
+ qs = nil
24
+ params = CgiUtils.parse_query_string(qs)
25
+ assert_equal 0, params.size
26
+
27
+ qs = 'name=tml;arr[]=1;arr[]=2;arr[]=3'
28
+ params = CgiUtils.parse_query_string(qs)
29
+ assert_equal 2, params.size
30
+ arr = params['arr']
31
+ assert_equal Array, arr.class
32
+ assert_equal 3, arr.size
33
+ end
34
34
 
35
- def test_parse_cookies
36
- context = OpenStruct.new
37
- context.env = {}
38
- context.env['HTTP_COOKIE'] = 'nsid=123; nauth=gmosx:passwd'
39
- CgiUtils.parse_cookies(context)
40
- assert_equal 2, context.cookies.size
41
- assert_equal '123', context.cookies['nsid']
42
-
43
- context.env = {}
44
- context.env['HTTP_COOKIE'] = 'nsid=123; nsid=23123'
45
- cookies = CgiUtils.parse_cookies(context)
46
- assert_equal 1, context.cookies.size
47
- assert_equal "123" + "\0" + "23123", context.cookies['nsid']
48
- end
35
+ def test_parse_cookies
36
+ context = OpenStruct.new
37
+ context.env = {}
38
+ context.env['HTTP_COOKIE'] = 'nsid=123; nauth=gmosx:passwd'
39
+ CgiUtils.parse_cookies(context)
40
+ assert_equal 2, context.cookies.size
41
+ assert_equal '123', context.cookies['nsid']
42
+
43
+ context.env = {}
44
+ context.env['HTTP_COOKIE'] = 'nsid=123; nsid=23123'
45
+ cookies = CgiUtils.parse_cookies(context)
46
+ assert_equal 1, context.cookies.size
47
+ assert_equal "123" + "\0" + "23123", context.cookies['nsid']
48
+ end
49
49
 
50
- def test_response_headers
51
- ctx = OpenStruct.new
52
- ctx.status = 200
53
- ctx.response_cookies = {
54
- 'nsid' => Cookie.new('nsid', '1233'),
55
- 'nauth' => Cookie.new('nauth', 'gmosx')
56
- }
57
- ctx.response_headers = {
58
- 'Content-Type' => 'text/html'
59
- }
50
+ def test_response_headers
51
+ ctx = OpenStruct.new
52
+ ctx.status = 200
53
+ ctx.response_cookies = {
54
+ 'nsid' => Cookie.new('nsid', '1233'),
55
+ 'nauth' => Cookie.new('nauth', 'gmosx')
56
+ }
57
+ ctx.response_headers = {
58
+ 'Content-Type' => 'text/html'
59
+ }
60
60
 
61
- res = "Status: 200 OK\r\nContent-Type: text/html\r\nSet-Cookie: nauthnauth=gmosx; Path=/\r\nSet-Cookie: nsidnsid=1233; Path=/\r\n\r\n"
62
- assert_equal res, CgiUtils.response_headers(ctx)
63
- end
61
+ res = "Status: 200 OK\r\nContent-Type: text/html\r\nSet-Cookie: nauthnauth=gmosx; Path=/\r\nSet-Cookie: nsidnsid=1233; Path=/\r\n\r\n"
62
+ assert_equal res, CgiUtils.response_headers(ctx)
63
+ end
64
64
  =begin
65
- def test_parse_multipart
66
- context = OpenStruct.new
67
- context.in = File.open(File.join(File.dirname(__FILE__), 'raw_post1.bin'))
68
- context.headers = { 'CONTENT_LENGTH' => 11963 }
69
- boundary = '---------------------------277124474474241471962886717'
70
- CgiUtils.parse_multipart(context, boundary)
71
- end
65
+ def test_parse_multipart
66
+ context = OpenStruct.new
67
+ context.in = File.open(File.join(File.dirname(__FILE__), 'raw_post1.bin'))
68
+ context.headers = { 'CONTENT_LENGTH' => 11963 }
69
+ boundary = '---------------------------277124474474241471962886717'
70
+ CgiUtils.parse_multipart(context, boundary)
71
+ end
72
72
  =end
73
73
  end
@@ -6,9 +6,9 @@ require 'ostruct'
6
6
  require 'nitro/adapter/webrick'
7
7
 
8
8
  class TC_AdaptersWebrick < Test::Unit::TestCase # :nodoc: all
9
- include Nitro
10
-
11
- def test_adaptor
12
- end
9
+ include Nitro
10
+
11
+ def test_adaptor
12
+ end
13
13
 
14
14
  end
@@ -5,31 +5,31 @@ require 'test/unit'
5
5
  require 'nitro/mixin/pager'
6
6
 
7
7
  class TC_Pager < Test::Unit::TestCase # :nodoc: all
8
- include Nitro
9
- include Nitro::PagerMixin
8
+ include Nitro
9
+ include Nitro::PagerMixin
10
10
 
11
- class RequestMock < Hash
12
- attr_accessor :query
13
-
14
- def initialize
15
- @query = {}
16
- end
17
-
18
- def get(k, default)
19
- return self[k] || default
20
- end
21
- end
22
-
23
- def request
24
- RequestMock.new
25
- end
26
-
27
- def test_all
28
- stuff = [1, 2, 3, 4, 5, 6, 7, 8, 9]
11
+ class RequestMock < Hash
12
+ attr_accessor :query
13
+
14
+ def initialize
15
+ @query = {}
16
+ end
17
+
18
+ def get(k, default)
19
+ return self[k] || default
20
+ end
21
+ end
22
+
23
+ def request
24
+ RequestMock.new
25
+ end
26
+
27
+ def test_all
28
+ stuff = [1, 2, 3, 4, 5, 6, 7, 8, 9]
29
29
 
30
- items, pager = paginate(stuff, :per_page => 2)
31
- assert_equal 2, items.size
32
- assert_equal 9, pager.total_count
33
- end
34
-
30
+ items, pager = paginate(stuff, :per_page => 2)
31
+ assert_equal 2, items.size
32
+ assert_equal 9, pager.total_count
33
+ end
34
+
35
35
  end
@@ -0,0 +1,24 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
2
+
3
+ require 'test/unit'
4
+ require 'nitro/mixin/rss'
5
+
6
+ class TC_RssMixin < Test::Unit::TestCase # :nodoc: all
7
+ include Nitro
8
+ include RssMixin
9
+
10
+ Blog = Struct.new(:title, :body, :to_href)
11
+
12
+ def test_render
13
+ blogs = []
14
+ blogs << Blog.new('Hello1', 'World1', 'uri1');
15
+ blogs << Blog.new('Hello2', 'World2', 'uri2');
16
+ blogs << Blog.new('Hello3', 'World3', 'uri3');
17
+
18
+ rss = build_rss(blogs, :link => 'http://www.navel.gr')
19
+
20
+ assert_match %r{<link>http://www.navel.gr/uri1</link>}, rss
21
+ assert_match %r{<link>http://www.navel.gr/uri2</link>}, rss
22
+ end
23
+
24
+ end
@@ -0,0 +1,31 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
2
+
3
+ require 'test/unit'
4
+ require 'nitro/mixin/table'
5
+
6
+ class TC_TableMixin < Test::Unit::TestCase # :nodoc: all
7
+ include Nitro
8
+ include TableMixin
9
+
10
+ User = Struct.new(:name, :password, :email)
11
+
12
+ def setup
13
+ @headers = %w{Name Password Email}
14
+ @users = [
15
+ User.new('gmosx', 'huh?', 'gm@nowhere.com'),
16
+ User.new('renos', 'nah', 'renos@nowhere.com'),
17
+ User.new('stella', 'hoh', 'stella@love.com')
18
+ ]
19
+ end
20
+
21
+ def teardown
22
+ @users = nil
23
+ end
24
+
25
+ def test_table
26
+ values = @users.collect { |u| [u.name, u.password, u.email] }
27
+ table = build_table(:id => 'test', :headers => @headers, :values => values)
28
+ res = %|<table id="test"><tr><th>Name</th><th>Password</th><th>Email</th></tr><tr><td>gmosx</td><td>huh?</td><td>gm@nowhere.com</td></tr><tr><td>renos</td><td>nah</td><td>renos@nowhere.com</td></tr><tr><td>stella</td><td>hoh</td><td>stella@love.com</td></tr></table>|
29
+ assert_equal res, table
30
+ end
31
+ end
@@ -0,0 +1,13 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
2
+
3
+ require 'test/unit'
4
+ require 'nitro/mixin/xhtml'
5
+
6
+ class TC_XhtmlMixin < Test::Unit::TestCase # :nodoc: all
7
+ include Nitro
8
+ include XhtmlMixin
9
+
10
+ def test_all
11
+ end
12
+
13
+ end
@@ -5,15 +5,15 @@ require 'test/unit'
5
5
  require 'nitro/caching'
6
6
 
7
7
  class TC_Caching < Test::Unit::TestCase # :nodoc: all
8
- include Nitro
9
-
10
- class DummyCa
11
- include Nitro::Caching
12
- end
8
+ include Nitro
9
+
10
+ class DummyCa
11
+ include Nitro::Caching
12
+ end
13
13
 
14
- def test_all
15
- # bug:
16
- assert_equal [], Caching.public_instance_methods
17
- assert_equal [], DummyCa.public_instance_methods.grep(/caching/)
18
- end
14
+ def test_all
15
+ # bug:
16
+ assert_equal [], Caching.public_instance_methods
17
+ assert_equal [], DummyCa.public_instance_methods.grep(/caching/)
18
+ end
19
19
  end