nitro 0.20.0 → 0.21.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +752 -543
- data/INSTALL +38 -38
- data/README +264 -225
- data/Rakefile +48 -49
- data/bin/nitro +3 -3
- data/bin/nitrogen +6 -6
- data/doc/AUTHORS +10 -10
- data/doc/CHANGELOG.1 +1939 -1939
- data/doc/CHANGELOG.2 +954 -954
- data/doc/LICENSE +3 -3
- data/doc/MIGRATION +28 -0
- data/doc/RELEASES +814 -643
- data/doc/config.txt +5 -5
- data/install.rb +7 -17
- data/lib/nitro.rb +38 -9
- data/lib/nitro/adapter/cgi.rb +311 -312
- data/lib/nitro/adapter/fastcgi.rb +18 -25
- data/lib/nitro/adapter/webrick.rb +128 -137
- data/lib/nitro/adapter/wee.rb +51 -0
- data/lib/nitro/caching.rb +20 -20
- data/lib/nitro/caching/actions.rb +43 -43
- data/lib/nitro/caching/fragments.rb +46 -46
- data/lib/nitro/caching/invalidation.rb +11 -11
- data/lib/nitro/caching/output.rb +65 -65
- data/lib/nitro/caching/stores.rb +67 -67
- data/lib/nitro/compiler.rb +262 -0
- data/lib/nitro/compiler/elements.rb +0 -0
- data/lib/nitro/compiler/errors.rb +65 -0
- data/lib/nitro/compiler/localization.rb +25 -0
- data/lib/nitro/compiler/markup.rb +19 -0
- data/lib/nitro/compiler/shaders.rb +206 -0
- data/lib/nitro/compiler/squeeze.rb +20 -0
- data/lib/nitro/compiler/xslt.rb +61 -0
- data/lib/nitro/context.rb +87 -88
- data/lib/nitro/controller.rb +151 -158
- data/lib/nitro/cookie.rb +34 -34
- data/lib/nitro/dispatcher.rb +195 -186
- data/lib/nitro/element.rb +132 -126
- data/lib/nitro/element/java_script.rb +6 -6
- data/lib/nitro/flash.rb +66 -66
- data/lib/nitro/mail.rb +192 -192
- data/lib/nitro/mixin/buffer.rb +66 -0
- data/lib/nitro/mixin/debug.rb +16 -16
- data/lib/nitro/mixin/form.rb +88 -0
- data/lib/nitro/mixin/helper.rb +2 -2
- data/lib/nitro/mixin/javascript.rb +108 -108
- data/lib/nitro/mixin/markup.rb +144 -0
- data/lib/nitro/mixin/pager.rb +202 -202
- data/lib/nitro/mixin/rss.rb +67 -0
- data/lib/nitro/mixin/table.rb +63 -0
- data/lib/nitro/mixin/xhtml.rb +75 -0
- data/lib/nitro/mixin/xml.rb +124 -0
- data/lib/nitro/render.rb +183 -359
- data/lib/nitro/request.rb +140 -140
- data/lib/nitro/response.rb +27 -27
- data/lib/nitro/routing.rb +21 -21
- data/lib/nitro/scaffold.rb +124 -118
- data/lib/nitro/server.rb +117 -80
- data/lib/nitro/server/runner.rb +341 -0
- data/lib/nitro/service.rb +12 -12
- data/lib/nitro/service/xmlrpc.rb +22 -22
- data/lib/nitro/session.rb +122 -120
- data/lib/nitro/session/drb.rb +9 -9
- data/lib/nitro/session/drbserver.rb +34 -34
- data/lib/nitro/template.rb +171 -155
- data/lib/nitro/testing/assertions.rb +90 -90
- data/lib/nitro/testing/context.rb +16 -16
- data/lib/nitro/testing/testcase.rb +34 -34
- data/proto/conf/lhttpd.conf +9 -9
- data/proto/public/error.xhtml +75 -75
- data/proto/public/index.xhtml +18 -18
- data/proto/public/js/behaviour.js +65 -65
- data/proto/public/js/controls.js +1 -1
- data/proto/public/js/prototype.js +3 -3
- data/proto/public/settings.xhtml +61 -61
- data/proto/run.rb +1 -5
- data/test/nitro/adapter/raw_post1.bin +0 -0
- data/test/nitro/adapter/tc_cgi.rb +57 -57
- data/test/nitro/adapter/tc_webrick.rb +4 -4
- data/test/nitro/mixin/tc_pager.rb +25 -25
- data/test/nitro/mixin/tc_rss.rb +24 -0
- data/test/nitro/mixin/tc_table.rb +31 -0
- data/test/nitro/mixin/tc_xhtml.rb +13 -0
- data/test/nitro/tc_caching.rb +10 -10
- data/test/nitro/tc_context.rb +8 -8
- data/test/nitro/tc_controller.rb +48 -48
- data/test/nitro/tc_cookie.rb +6 -6
- data/test/nitro/tc_dispatcher.rb +64 -64
- data/test/nitro/tc_element.rb +27 -27
- data/test/nitro/tc_flash.rb +31 -31
- data/test/nitro/tc_mail.rb +63 -63
- data/test/nitro/tc_server.rb +26 -26
- data/test/nitro/tc_session.rb +9 -9
- data/test/nitro/tc_template.rb +19 -19
- data/test/public/blog/list.xhtml +1 -1
- metadata +31 -37
- data/lib/nitro/buffering.rb +0 -45
- data/lib/nitro/builder/form.rb +0 -104
- data/lib/nitro/builder/rss.rb +0 -104
- data/lib/nitro/builder/table.rb +0 -80
- data/lib/nitro/builder/xhtml.rb +0 -132
- data/lib/nitro/builder/xml.rb +0 -131
- data/lib/nitro/conf.rb +0 -36
- data/lib/nitro/environment.rb +0 -21
- data/lib/nitro/errors.rb +0 -69
- data/lib/nitro/localization.rb +0 -153
- data/lib/nitro/markup.rb +0 -147
- data/lib/nitro/output.rb +0 -24
- data/lib/nitro/runner.rb +0 -348
- data/lib/nitro/shaders.rb +0 -206
- data/test/nitro/builder/tc_rss.rb +0 -23
- data/test/nitro/builder/tc_table.rb +0 -30
- data/test/nitro/builder/tc_xhtml.rb +0 -39
- data/test/nitro/builder/tc_xml.rb +0 -56
- data/test/nitro/tc_localization.rb +0 -49
data/proto/public/js/controls.js
CHANGED
@@ -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
|
-
|
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
|
-
|
125
|
-
|
124
|
+
var startLength = this.length;
|
125
|
+
for (var i = 0; i < arguments.length; i++)
|
126
126
|
this[startLength + i] = arguments[i];
|
127
|
-
|
127
|
+
return this.length;
|
128
128
|
}
|
129
129
|
}
|
130
130
|
|
data/proto/public/settings.xhtml
CHANGED
@@ -1,64 +1,64 @@
|
|
1
1
|
<html>
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
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
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
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
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
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
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
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
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
|
-
|
62
|
-
|
63
|
-
|
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
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
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
|
@@ -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
|
-
|
9
|
-
|
8
|
+
include Nitro
|
9
|
+
include Nitro::PagerMixin
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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
|
data/test/nitro/tc_caching.rb
CHANGED
@@ -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
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
include Nitro
|
9
|
+
|
10
|
+
class DummyCa
|
11
|
+
include Nitro::Caching
|
12
|
+
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
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
|