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