nitro 0.8.0 → 0.9.3
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.
- data/AUTHORS +3 -4
- data/ChangeLog +418 -0
- data/LICENSE +1 -1
- data/README +157 -89
- data/RELEASES +50 -0
- data/Rakefile +5 -7
- data/benchmark/nitro/bench.rb +5 -0
- data/benchmark/nitro/simple-webrick-n-200.txt +44 -0
- data/benchmark/nitro/static-webrick-n-200.txt +43 -0
- data/benchmark/nitro/tiny-lhttpd-n-200-c-5.txt +43 -0
- data/benchmark/nitro/tiny-webrick-n-200-c-5.txt +44 -0
- data/benchmark/nitro/tiny-webrick-n-200.txt +44 -0
- data/benchmark/nitro/tiny2-webrick-n-200.txt +44 -0
- data/{lib/nitro/server/cluster.rb → bin/cluster} +26 -30
- data/bin/proto/README +2 -2
- data/bin/proto/{apache.conf → conf/apache.conf} +0 -0
- data/bin/proto/conf/app.conf.rb +22 -0
- data/bin/proto/conf/lhttpd.conf +236 -0
- data/bin/proto/ctl +4 -0
- data/bin/proto/lib/README +5 -0
- data/bin/proto/log/README +3 -0
- data/bin/proto/root/fcgi.rb +6 -0
- data/bin/proto/root/index.xhtml +65 -7
- data/bin/proto/root/m/nitro.png +0 -0
- data/examples/blog/README +7 -5
- data/examples/blog/{apache.conf → conf/apache.conf} +0 -0
- data/examples/blog/conf/app.conf.rb +56 -0
- data/examples/blog/conf/lhttpd.conf +236 -0
- data/examples/blog/ctl +4 -0
- data/examples/blog/lib/blog.rb +11 -136
- data/examples/blog/lib/blog/controller.rb +99 -0
- data/examples/blog/lib/blog/model.rb +39 -0
- data/examples/blog/log/README +3 -0
- data/examples/blog/root/comments.xhtml +2 -2
- data/examples/blog/root/fcgi.rb +6 -0
- data/examples/blog/root/index.xhtml +4 -5
- data/examples/blog/root/login.xhtml +2 -2
- data/examples/blog/root/style.xsl +9 -9
- data/examples/blog/root/view_entry.xhtml +2 -2
- data/examples/flash/conf/app.conf.rb +23 -0
- data/examples/flash/ctl +4 -0
- data/examples/flash/log/README +3 -0
- data/examples/flash/root/index.xhtml +0 -9
- data/examples/flash/root/show_inline_text.xhtml +10 -5
- data/examples/no_xsl_blog/README +12 -0
- data/examples/no_xsl_blog/conf/apache.conf +0 -0
- data/examples/no_xsl_blog/conf/app.conf.rb +57 -0
- data/examples/no_xsl_blog/conf/lhttpd.conf +236 -0
- data/examples/no_xsl_blog/ctl +4 -0
- data/examples/no_xsl_blog/lib/blog.rb +20 -0
- data/examples/no_xsl_blog/lib/blog/controller.rb +102 -0
- data/examples/no_xsl_blog/lib/blog/model.rb +39 -0
- data/examples/no_xsl_blog/lib/blog/template.rb +134 -0
- data/examples/no_xsl_blog/log/README +3 -0
- data/examples/no_xsl_blog/root/comments.xhtml +41 -0
- data/examples/no_xsl_blog/root/entry_form.xhtml +22 -0
- data/examples/no_xsl_blog/root/fcgi.rb +6 -0
- data/examples/no_xsl_blog/root/index.xhtml +39 -0
- data/examples/no_xsl_blog/root/login.xhtml +21 -0
- data/examples/no_xsl_blog/root/m/bubbles.gif +0 -0
- data/examples/no_xsl_blog/root/m/comments_curve.gif +0 -0
- data/examples/no_xsl_blog/root/m/down.gif +0 -0
- data/examples/no_xsl_blog/root/m/footer_bg.gif +0 -0
- data/examples/no_xsl_blog/root/m/garrow.gif +0 -0
- data/examples/no_xsl_blog/root/m/gbull.gif +0 -0
- data/examples/no_xsl_blog/root/m/grbull.gif +0 -0
- data/examples/no_xsl_blog/root/m/h1_bg.gif +0 -0
- data/examples/no_xsl_blog/root/m/header_bg.gif +0 -0
- data/examples/no_xsl_blog/root/m/nitro.gif +0 -0
- data/examples/no_xsl_blog/root/m/obull.gif +0 -0
- data/examples/no_xsl_blog/root/m/page_bg.gif +0 -0
- data/examples/no_xsl_blog/root/m/rss.gif +0 -0
- data/examples/no_xsl_blog/root/m/side_title_bg.gif +0 -0
- data/examples/no_xsl_blog/root/m/sidebar_bg.gif +0 -0
- data/examples/no_xsl_blog/root/recent_posts.xhtml +14 -0
- data/examples/no_xsl_blog/root/style.css +301 -0
- data/examples/no_xsl_blog/root/view_entry.xhtml +25 -0
- data/examples/no_xsl_blog/root/view_entry.xml +12 -0
- data/examples/og/run.rb +2 -2
- data/examples/tiny/README +2 -2
- data/examples/tiny/conf/apache.conf +5 -0
- data/examples/tiny/conf/app.conf.rb +21 -0
- data/examples/tiny/conf/lhttpd.conf +236 -0
- data/examples/tiny/ctl +4 -0
- data/examples/tiny/log/README +3 -0
- data/examples/tiny/root/fcgi.rb +6 -0
- data/examples/tiny/root/index.xhtml +7 -4
- data/examples/tiny/root/nitro.png +0 -0
- data/lib/glue.rb +13 -9
- data/lib/glue/array.rb +1 -1
- data/lib/glue/cache.rb +1 -1
- data/lib/glue/flexob.rb +12 -0
- data/lib/glue/hash.rb +1 -1
- data/lib/glue/inflector.rb +2 -2
- data/lib/glue/logger.rb +4 -8
- data/lib/glue/misc.rb +14 -0
- data/lib/glue/number.rb +1 -1
- data/lib/glue/object.rb +26 -0
- data/lib/glue/pool.rb +1 -1
- data/lib/glue/property.rb +84 -91
- data/lib/glue/string.rb +1 -1
- data/lib/glue/time.rb +1 -1
- data/lib/glue/validation.rb +1 -1
- data/lib/nitro.rb +18 -6
- data/lib/nitro/adaptors/cgi.rb +291 -0
- data/lib/nitro/adaptors/fastcgi.rb +42 -0
- data/lib/nitro/adaptors/runner.rb +123 -0
- data/lib/nitro/adaptors/webrick.rb +110 -0
- data/lib/nitro/buffering.rb +43 -0
- data/lib/nitro/builders/form.rb +1 -1
- data/lib/nitro/builders/rss.rb +1 -1
- data/{bin → lib/nitro}/cluster.rb +26 -30
- data/lib/nitro/context.rb +82 -0
- data/lib/nitro/controller.rb +50 -0
- data/lib/nitro/cookie.rb +46 -0
- data/lib/nitro/dispatcher.rb +105 -0
- data/lib/nitro/filters.rb +9 -10
- data/lib/nitro/localization.rb +42 -0
- data/lib/nitro/mail.rb +11 -14
- data/lib/nitro/render.rb +275 -0
- data/lib/nitro/request.rb +128 -0
- data/lib/nitro/response.rb +38 -0
- data/lib/nitro/scaffold.rb +11 -11
- data/lib/nitro/session.rb +84 -0
- data/lib/nitro/{server/shaders.rb → shaders.rb} +56 -36
- data/lib/nitro/ui/pager.rb +23 -26
- data/lib/nitro/{sitemap.rb → ui/sitemap.rb} +4 -12
- data/lib/nitro/uri.rb +1 -1
- data/lib/nitro/version.rb +10 -8
- data/lib/og.rb +66 -65
- data/lib/og/backend.rb +1 -1
- data/lib/og/backends/mysql.rb +48 -52
- data/lib/og/backends/psql.rb +34 -37
- data/lib/og/connection.rb +15 -15
- data/lib/og/enchant.rb +16 -9
- data/lib/og/meta.rb +127 -54
- data/lib/og/mock.rb +18 -18
- data/lib/og/version.rb +6 -4
- data/lib/parts/content.rb +4 -8
- data/test/glue/tc_logger.rb +3 -0
- data/test/glue/tc_property.rb +19 -3
- data/test/nitro/adaptors/tc_cgi.rb +63 -0
- data/test/nitro/adaptors/tc_webrick.rb +15 -0
- data/test/nitro/builders/tc_xml.rb +2 -2
- data/test/nitro/tc_context.rb +13 -0
- data/test/nitro/tc_controller.rb +47 -0
- data/test/nitro/tc_dispatcher.rb +64 -0
- data/test/nitro/tc_session.rb +20 -0
- data/test/nitro/{tc_sitemap.rb → ui/tc_sitemap.rb} +1 -1
- data/test/root/blog/list.xhtml +6 -0
- data/test/tc_og.rb +41 -4
- metadata +115 -59
- data/bin/proto/app.rb +0 -20
- data/bin/proto/config.rb +0 -77
- data/examples/blog/app.rb +0 -21
- data/examples/blog/config.rb +0 -95
- data/examples/blog/env.rb +0 -22
- data/examples/flash/README +0 -34
- data/examples/flash/app.rb +0 -20
- data/examples/flash/config.rb +0 -38
- data/examples/flash/lib/flash.rb +0 -40
- data/examples/flash/tmp.swf +0 -0
- data/examples/tiny/app.rb +0 -19
- data/examples/tiny/config.rb +0 -29
- data/examples/tiny/root/nitro-small.png +0 -0
- data/lib/nitro/application.rb +0 -217
- data/lib/nitro/config.rb +0 -128
- data/lib/nitro/events.rb +0 -122
- data/lib/nitro/html.rb +0 -151
- data/lib/nitro/http.rb +0 -102
- data/lib/nitro/l10n.rb +0 -30
- data/lib/nitro/server.rb +0 -59
- data/lib/nitro/server/appserver.rb +0 -67
- data/lib/nitro/server/cookie.rb +0 -87
- data/lib/nitro/server/dispatcher.rb +0 -62
- data/lib/nitro/server/filters.rb +0 -75
- data/lib/nitro/server/filters/autologin.rb +0 -51
- data/lib/nitro/server/fragment.rb +0 -70
- data/lib/nitro/server/handlers.rb +0 -127
- data/lib/nitro/server/render.rb +0 -426
- data/lib/nitro/server/request.rb +0 -658
- data/lib/nitro/server/requestpart.rb +0 -54
- data/lib/nitro/server/script.rb +0 -387
- data/lib/nitro/server/server.rb +0 -57
- data/lib/nitro/server/session.rb +0 -220
- data/lib/nitro/server/user.rb +0 -46
- data/lib/nitro/server/webrick.rb +0 -180
- data/lib/nitro/service.rb +0 -26
- data/lib/xsl/ui.xsl +0 -51
- data/lib/xsl/xforms.xsl +0 -28
- data/test/nitro/server/tc_cookie.rb +0 -34
- data/test/nitro/server/tc_filters.rb +0 -38
- data/test/nitro/server/tc_request.rb +0 -70
- data/test/nitro/server/tc_requestpart.rb +0 -28
- data/test/nitro/server/tc_session.rb +0 -34
- data/test/nitro/tc_events.rb +0 -44
- data/test/nitro/tc_html.rb +0 -79
- data/test/nitro/tc_http.rb +0 -18
data/lib/og/mock.rb
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
# code:
|
|
2
1
|
# * George Moschovitis <gm@navel.gr>
|
|
3
2
|
# * Thomas Quas <tquas@yahoo.com>
|
|
4
|
-
#
|
|
5
|
-
# (c) 2004 Navel, all rights reserved.
|
|
3
|
+
# (c) 2004-2005 Navel, all rights reserved.
|
|
6
4
|
# $Id$
|
|
7
5
|
|
|
8
6
|
require 'og'
|
|
@@ -12,15 +10,12 @@ require_gem 'flexmock'
|
|
|
12
10
|
|
|
13
11
|
class Og
|
|
14
12
|
|
|
15
|
-
# = MockDatabase
|
|
16
|
-
#
|
|
17
13
|
# A utility object to Mock a Database in test units.
|
|
18
14
|
# Extends the standard FlexMock object.
|
|
19
|
-
#
|
|
20
15
|
#--
|
|
21
16
|
# TODO: Factor out common functionality with Database
|
|
22
17
|
# to avoid code duplication.
|
|
23
|
-
|
|
18
|
+
|
|
24
19
|
class MockDatabase < ::FlexMock
|
|
25
20
|
include Og::Enchant
|
|
26
21
|
|
|
@@ -40,16 +35,19 @@ class MockDatabase < ::FlexMock
|
|
|
40
35
|
end
|
|
41
36
|
|
|
42
37
|
# hash of configuration options.
|
|
38
|
+
|
|
43
39
|
attr_accessor :config
|
|
44
40
|
|
|
45
41
|
# Pool of connections to the backend.
|
|
42
|
+
|
|
46
43
|
attr_accessor :connection_pool
|
|
47
44
|
|
|
48
45
|
# Managed classes.
|
|
46
|
+
|
|
49
47
|
attr_accessor :managed_classes
|
|
50
48
|
|
|
51
49
|
# Initialize the database interface.
|
|
52
|
-
|
|
50
|
+
|
|
53
51
|
def initialize
|
|
54
52
|
# Initialize FlexMock
|
|
55
53
|
super
|
|
@@ -61,6 +59,7 @@ class MockDatabase < ::FlexMock
|
|
|
61
59
|
if Og.auto_manage_classes
|
|
62
60
|
# automatically manage classes with properties and metadata.
|
|
63
61
|
# gmosx: Any idea how to optimize this?
|
|
62
|
+
|
|
64
63
|
classes_to_manage = []
|
|
65
64
|
ObjectSpace.each_object(Class) do |c|
|
|
66
65
|
if c.respond_to?(:__props) and c.__props
|
|
@@ -73,31 +72,32 @@ class MockDatabase < ::FlexMock
|
|
|
73
72
|
end
|
|
74
73
|
|
|
75
74
|
# use the newly created database.
|
|
75
|
+
|
|
76
76
|
Og.use(self)
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
# Shutdown the database interface.
|
|
80
|
-
|
|
80
|
+
|
|
81
81
|
def shutdown
|
|
82
82
|
end
|
|
83
83
|
alias_method :close, :shutdown
|
|
84
84
|
|
|
85
85
|
# Get a connection from the pool to access the database.
|
|
86
86
|
# Stores the connection in a thread-local variable.
|
|
87
|
-
|
|
87
|
+
|
|
88
88
|
def get_connection
|
|
89
89
|
# nop
|
|
90
90
|
end
|
|
91
91
|
alias_method :connection, :get_connection
|
|
92
92
|
|
|
93
93
|
# Restore an unused connection to the pool.
|
|
94
|
-
|
|
94
|
+
|
|
95
95
|
def put_connection
|
|
96
96
|
# nop
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
# Register a standard Ruby class as managed.
|
|
100
|
-
|
|
100
|
+
|
|
101
101
|
def manage(klass)
|
|
102
102
|
return if managed?(klass) or klass.ancestors.include?(Og::Unmanageable)
|
|
103
103
|
|
|
@@ -111,7 +111,7 @@ class MockDatabase < ::FlexMock
|
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
# Helper method to set multiple managed classes.
|
|
114
|
-
|
|
114
|
+
|
|
115
115
|
def manage_classes(*klasses)
|
|
116
116
|
for klass in klasses
|
|
117
117
|
manage(klass)
|
|
@@ -119,19 +119,19 @@ class MockDatabase < ::FlexMock
|
|
|
119
119
|
end
|
|
120
120
|
|
|
121
121
|
# Stop managing a Ruby class
|
|
122
|
-
|
|
122
|
+
|
|
123
123
|
def unmanage(klass)
|
|
124
124
|
@managed_classes.delete(klass)
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
# Is this class managed?
|
|
128
|
-
|
|
128
|
+
|
|
129
129
|
def managed?(klass)
|
|
130
130
|
return @managed_classes.include?(klass)
|
|
131
131
|
end
|
|
132
132
|
|
|
133
133
|
# Add standard og functionality to the class
|
|
134
|
-
|
|
134
|
+
|
|
135
135
|
def convert(klass)
|
|
136
136
|
klass.class_eval %{
|
|
137
137
|
DBTABLE = "#{Og::Backend.table(klass)}"
|
|
@@ -144,7 +144,7 @@ class MockDatabase < ::FlexMock
|
|
|
144
144
|
end
|
|
145
145
|
|
|
146
146
|
# Automatically wrap connection methods.
|
|
147
|
-
|
|
147
|
+
|
|
148
148
|
def self.wrap_method(method, args)
|
|
149
149
|
args = args.split(/,/)
|
|
150
150
|
class_eval %{
|
|
@@ -163,4 +163,4 @@ class MockDatabase < ::FlexMock
|
|
|
163
163
|
end
|
|
164
164
|
end
|
|
165
165
|
|
|
166
|
-
end
|
|
166
|
+
end
|
data/lib/og/version.rb
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
#--
|
|
2
2
|
# George Moschovitis <gm@navel.gr>
|
|
3
3
|
# (c) 2004-2005 Navel, all rights reserved.
|
|
4
|
-
# $Id: version.rb
|
|
4
|
+
# $Id: version.rb 248 2005-01-31 13:38:34Z gmosx $
|
|
5
5
|
#++
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
class Og
|
|
8
|
+
# The version of Og.
|
|
9
|
+
|
|
10
|
+
Version = '0.9.0'
|
|
11
|
+
end
|
data/lib/parts/content.rb
CHANGED
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
#
|
|
2
|
-
#
|
|
3
|
-
# Content management foundation.
|
|
4
|
-
#
|
|
5
|
-
# George Moschovitis <gm@navel.gr>
|
|
1
|
+
# * George Moschovitis <gm@navel.gr>
|
|
6
2
|
# (c) 2004 Navel, all rights reserved.
|
|
7
3
|
# $Id$
|
|
8
4
|
|
|
9
5
|
require 'nitro/markup'
|
|
10
6
|
|
|
11
|
-
module N
|
|
7
|
+
module N
|
|
12
8
|
|
|
13
9
|
# = BaseContent
|
|
14
10
|
#
|
|
15
11
|
# The foundamental Content Unit.
|
|
16
12
|
#
|
|
17
13
|
module BaseContent
|
|
18
|
-
include
|
|
14
|
+
include Markup
|
|
19
15
|
|
|
20
16
|
prop_accessor :title, String
|
|
21
17
|
prop_accessor :body, String, :markup => true, :ui => :textarea
|
|
@@ -57,7 +53,7 @@ end
|
|
|
57
53
|
# = Category
|
|
58
54
|
|
|
59
55
|
class Category
|
|
60
|
-
include
|
|
56
|
+
include BaseContent
|
|
61
57
|
end
|
|
62
58
|
|
|
63
59
|
# = ACL
|
data/test/glue/tc_logger.rb
CHANGED
data/test/glue/tc_property.rb
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require 'test/unit'
|
|
4
4
|
|
|
5
|
-
require
|
|
5
|
+
require 'og'
|
|
6
|
+
require 'glue/logger'
|
|
7
|
+
require 'glue/property'
|
|
8
|
+
|
|
9
|
+
def VarChar(size)
|
|
10
|
+
return String, :sql => "VARCHAR(#{ size })"
|
|
11
|
+
end
|
|
12
|
+
NotNull = {:sql => "NOT NULL"}.freeze
|
|
13
|
+
Null = {:sql => "NULL"}.freeze
|
|
6
14
|
|
|
7
15
|
module Test # :nodoc: all
|
|
8
16
|
|
|
@@ -18,6 +26,9 @@ class Msg
|
|
|
18
26
|
|
|
19
27
|
# a marshaled property
|
|
20
28
|
prop_accessor Array, :options
|
|
29
|
+
|
|
30
|
+
# property with macro arguments!
|
|
31
|
+
prop_accessor :address, VarChar(30), NotNull
|
|
21
32
|
|
|
22
33
|
def initialize
|
|
23
34
|
@create_time = Time.now
|
|
@@ -65,6 +76,11 @@ class TC_N_Properties < Test::Unit::TestCase
|
|
|
65
76
|
@msg1.__force_count(2.4)
|
|
66
77
|
assert_equal(Fixnum, @msg1.count.class)
|
|
67
78
|
end
|
|
79
|
+
|
|
80
|
+
def test_macro_params
|
|
81
|
+
sql = Msg.__props.find { |p| :address == p.symbol }.meta[:sql]
|
|
82
|
+
assert_equal 'VARCHAR(30) NOT NULL', sql
|
|
83
|
+
end
|
|
68
84
|
|
|
69
85
|
end
|
|
70
86
|
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
|
|
2
|
+
|
|
3
|
+
require 'ostruct'
|
|
4
|
+
require 'test/unit'
|
|
5
|
+
|
|
6
|
+
require 'nitro/cookie'
|
|
7
|
+
require 'nitro/adaptors/cgi'
|
|
8
|
+
|
|
9
|
+
class TC_AdaptorsCgi < Test::Unit::TestCase # :nodoc: all
|
|
10
|
+
include N
|
|
11
|
+
|
|
12
|
+
def test_parse_query_parameters
|
|
13
|
+
qs = 'name=tml;id=12354'
|
|
14
|
+
params = CgiUtils.parse_query_string(qs)
|
|
15
|
+
assert_equal 2, params.size
|
|
16
|
+
assert_equal 'tml', params['name']
|
|
17
|
+
|
|
18
|
+
qs = ''
|
|
19
|
+
params = CgiUtils.parse_query_string(qs)
|
|
20
|
+
assert_equal 0, params.size
|
|
21
|
+
|
|
22
|
+
qs = nil
|
|
23
|
+
params = CgiUtils.parse_query_string(qs)
|
|
24
|
+
assert_equal 0, params.size
|
|
25
|
+
|
|
26
|
+
qs = 'name=tml;arr[]=1;arr[]=2;arr[]=3'
|
|
27
|
+
params = CgiUtils.parse_query_string(qs)
|
|
28
|
+
assert_equal 2, params.size
|
|
29
|
+
arr = params['arr']
|
|
30
|
+
assert_equal Array, arr.class
|
|
31
|
+
assert_equal 3, arr.size
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_parse_cookies
|
|
35
|
+
context = OpenStruct.new
|
|
36
|
+
context.env = {}
|
|
37
|
+
context.env['HTTP_COOKIE'] = 'nsid=123; nauth=gmosx:passwd'
|
|
38
|
+
CgiUtils.parse_cookies(context)
|
|
39
|
+
assert_equal 2, context.cookies.size
|
|
40
|
+
assert_equal '123', context.cookies['nsid']
|
|
41
|
+
|
|
42
|
+
context.env = {}
|
|
43
|
+
context.env['HTTP_COOKIE'] = 'nsid=123; nsid=23123'
|
|
44
|
+
cookies = CgiUtils.parse_cookies(context)
|
|
45
|
+
assert_equal 1, context.cookies.size
|
|
46
|
+
assert_equal "123" + "\0" + "23123", context.cookies['nsid']
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_response_headers
|
|
50
|
+
ctx = OpenStruct.new
|
|
51
|
+
ctx.status = 200
|
|
52
|
+
ctx.response_cookies = {
|
|
53
|
+
'nsid' => Cookie.new('nsid', '1233'),
|
|
54
|
+
'nauth' => Cookie.new('nauth', 'gmosx')
|
|
55
|
+
}
|
|
56
|
+
ctx.response_headers = {
|
|
57
|
+
'Content-Type' => 'text/html'
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
res = "HTTP/1.1 200 OK \r\nContent-Type: text/html\r\nSet-Cookie: nauthnauth=gmosx\r\nSet-Cookie: nsidnsid=1233\r\n\r\n"
|
|
61
|
+
assert_equal res, CgiUtils.response_headers(ctx)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
|
|
2
|
+
|
|
3
|
+
require 'test/unit'
|
|
4
|
+
require 'ostruct'
|
|
5
|
+
|
|
6
|
+
require 'nitro/adaptors/webrick'
|
|
7
|
+
|
|
8
|
+
class TC_Webrick < Test::Unit::TestCase # :nodoc: all
|
|
9
|
+
include N
|
|
10
|
+
|
|
11
|
+
def test_adaptor
|
|
12
|
+
# w = WebrickAdaptor.new()
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
@@ -21,8 +21,8 @@ class TC_BuildersXml < Test::Unit::TestCase # :nodoc: all
|
|
|
21
21
|
assert_equal '<b>This is bold</b>', x
|
|
22
22
|
|
|
23
23
|
x = N::XmlString.new
|
|
24
|
-
x.a('Navel', :href => 'http://www.navel.gr'
|
|
25
|
-
assert_equal '<a
|
|
24
|
+
x.a('Navel', :href => 'http://www.navel.gr')
|
|
25
|
+
assert_equal '<a href="http://www.navel.gr">Navel</a>', x
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
x = N::XmlString.new
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
|
|
2
|
+
|
|
3
|
+
require 'test/unit'
|
|
4
|
+
require 'ostruct'
|
|
5
|
+
|
|
6
|
+
require 'nitro/context'
|
|
7
|
+
require 'nitro/dispatcher'
|
|
8
|
+
require 'nitro/controller'
|
|
9
|
+
|
|
10
|
+
class TC_Controller < Test::Unit::TestCase # :nodoc: all
|
|
11
|
+
include N
|
|
12
|
+
|
|
13
|
+
class BlogController < Controller
|
|
14
|
+
attr_accessor :aflag, :tflag
|
|
15
|
+
|
|
16
|
+
def list
|
|
17
|
+
@aflag = true
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def setup
|
|
22
|
+
@disp = Dispatcher.new({
|
|
23
|
+
'blog' => BlogController,
|
|
24
|
+
})
|
|
25
|
+
@disp.root = File.join(File.dirname(__FILE__), '..', 'root')
|
|
26
|
+
@conf = OpenStruct.new
|
|
27
|
+
@conf.dispatcher = @disp
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_render
|
|
31
|
+
ctx = Context.new(@conf)
|
|
32
|
+
ctx.headers = {}
|
|
33
|
+
puts '=', ctx.dispatcher.root
|
|
34
|
+
klass, action, base = ctx.dispatcher.dispatch('/blog/list')
|
|
35
|
+
c = klass.new(ctx, base)
|
|
36
|
+
begin
|
|
37
|
+
c.send(action)
|
|
38
|
+
rescue RenderExit
|
|
39
|
+
# drink
|
|
40
|
+
end
|
|
41
|
+
assert_equal true, c.aflag
|
|
42
|
+
|
|
43
|
+
# the template is compiled
|
|
44
|
+
assert_equal true, c.tflag
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
|
|
2
|
+
|
|
3
|
+
require 'test/unit'
|
|
4
|
+
require 'nitro/dispatcher'
|
|
5
|
+
|
|
6
|
+
class TC_Dispatcher < Test::Unit::TestCase # :nodoc: all
|
|
7
|
+
|
|
8
|
+
class MainController
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class BlogController
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def setup
|
|
15
|
+
@d = N::Dispatcher.new({
|
|
16
|
+
:index => MainController,
|
|
17
|
+
'blog' => BlogController
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
@dxml = N::Dispatcher.new({
|
|
21
|
+
:index => MainController,
|
|
22
|
+
'blog' => BlogController
|
|
23
|
+
})
|
|
24
|
+
@dxml.add_api('xml', 'xml')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def teardown
|
|
28
|
+
@d = @dxml = nil
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_dispatch
|
|
32
|
+
klass, action = @d.dispatch('/blog/list')
|
|
33
|
+
assert_equal BlogController, klass
|
|
34
|
+
assert_equal '__xhtml__list', action
|
|
35
|
+
|
|
36
|
+
klass, action, base = @d.dispatch('/blog')
|
|
37
|
+
assert_equal BlogController, klass
|
|
38
|
+
assert_equal '__xhtml__index', action
|
|
39
|
+
assert_equal 'root/blog', base
|
|
40
|
+
|
|
41
|
+
klass, action, base = @d.dispatch('/login')
|
|
42
|
+
assert_equal MainController, klass
|
|
43
|
+
assert_equal '__xhtml__login', action
|
|
44
|
+
assert_equal 'root', base
|
|
45
|
+
|
|
46
|
+
klass, action, base = @d.dispatch('/')
|
|
47
|
+
assert_equal MainController, klass
|
|
48
|
+
assert_equal '__xhtml__index', action
|
|
49
|
+
assert_equal 'root', base
|
|
50
|
+
|
|
51
|
+
# multi-api dispatcher.
|
|
52
|
+
|
|
53
|
+
# no xml prefix, use xhtml api.
|
|
54
|
+
klass, action = @dxml.dispatch('/blog/list')
|
|
55
|
+
assert_equal BlogController, klass
|
|
56
|
+
assert_equal '__xhtml__list', action
|
|
57
|
+
|
|
58
|
+
# xml prefix, use xml api.
|
|
59
|
+
klass, action = @dxml.dispatch('/xml/blog/list')
|
|
60
|
+
assert_equal BlogController, klass
|
|
61
|
+
assert_equal '__xml__list', action
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|