nitro 0.20.0 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
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