nitro 0.13.0 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +91 -1632
- data/INSTALL +44 -0
- data/README +1 -1
- data/Rakefile +3 -3
- data/doc/CHANGELOG.2 +1688 -0
- data/doc/RELEASES +84 -1
- data/examples/blog/cache/entriesadmin +12 -0
- data/examples/blog/conf/apache.conf.new +53 -0
- data/examples/blog/conf/lhttpd.conf +23 -180
- data/examples/blog/log/apache.error_log +271 -0
- data/examples/blog/log/rewrite_log +161 -0
- data/examples/blog/public/fcgi.rb +2 -0
- data/examples/blog/run.rb +4 -3
- data/examples/blog/src/controller.rb +10 -4
- data/examples/blog/src/views/index.xhtml +3 -0
- data/examples/blog/src/xsl/base.xsl +7 -0
- data/examples/no_xsl_blog/conf/lhttpd.conf +24 -181
- data/examples/tiny/conf/lhttpd.conf +24 -181
- data/examples/tiny/log/apache.error_log +24 -0
- data/examples/tiny/public/index.xhtml +0 -6
- data/examples/tiny/public/upload.xhtml +12 -14
- data/examples/wee_style/run.rb +2 -0
- data/examples/why_wiki/run.rb +2 -0
- data/lib/nitro.rb +2 -2
- data/lib/nitro/adapters/cgi.rb +36 -109
- data/lib/nitro/adapters/webrick.rb +76 -62
- data/lib/nitro/caching.rb +29 -0
- data/lib/nitro/caching/actions.rb +67 -0
- data/lib/nitro/caching/fragments.rb +72 -0
- data/lib/nitro/caching/invalidation.rb +51 -0
- data/lib/nitro/caching/output.rb +72 -0
- data/lib/nitro/caching/stores.rb +84 -0
- data/lib/nitro/controller.rb +3 -1
- data/lib/nitro/dispatcher.rb +0 -1
- data/lib/nitro/filters.rb +112 -55
- data/lib/nitro/mail.rb +6 -3
- data/lib/nitro/render.rb +27 -4
- data/lib/nitro/request.rb +13 -1
- data/test/nitro/tc_controller.rb +6 -4
- data/test/nitro/tc_filters.rb +111 -0
- metadata +19 -29
- data/examples/why_wiki/wiki.yml +0 -1
- data/vendor/README +0 -11
- data/vendor/binding_of_caller.rb +0 -81
- data/vendor/blankslate.rb +0 -53
- data/vendor/breakpoint.rb +0 -523
- data/vendor/breakpoint_client.rb +0 -196
- data/vendor/extensions/_base.rb +0 -153
- data/vendor/extensions/_template.rb +0 -36
- data/vendor/extensions/all.rb +0 -21
- data/vendor/extensions/array.rb +0 -68
- data/vendor/extensions/binding.rb +0 -224
- data/vendor/extensions/class.rb +0 -50
- data/vendor/extensions/continuation.rb +0 -71
- data/vendor/extensions/enumerable.rb +0 -250
- data/vendor/extensions/hash.rb +0 -23
- data/vendor/extensions/io.rb +0 -58
- data/vendor/extensions/kernel.rb +0 -42
- data/vendor/extensions/module.rb +0 -114
- data/vendor/extensions/numeric.rb +0 -230
- data/vendor/extensions/object.rb +0 -164
- data/vendor/extensions/ostruct.rb +0 -41
- data/vendor/extensions/string.rb +0 -316
- data/vendor/extensions/symbol.rb +0 -28
data/lib/nitro/request.rb
CHANGED
@@ -52,7 +52,7 @@ module Request
|
|
52
52
|
# The path is the uri without the query string.
|
53
53
|
|
54
54
|
def path
|
55
|
-
uri ? uri.split('?').first : ''
|
55
|
+
path = uri ? uri.split('?').first : ''
|
56
56
|
end
|
57
57
|
|
58
58
|
def path_info
|
@@ -71,6 +71,12 @@ module Request
|
|
71
71
|
@headers['REQUEST_METHOD'].downcase.intern
|
72
72
|
end
|
73
73
|
|
74
|
+
# Is this a post method?
|
75
|
+
|
76
|
+
def post?
|
77
|
+
method == :post
|
78
|
+
end
|
79
|
+
|
74
80
|
# Return the referer. For the initial page in the
|
75
81
|
# clickstream there is no referer, set "/" by default.
|
76
82
|
|
@@ -78,6 +84,12 @@ module Request
|
|
78
84
|
return @headers['HTTP_REFERER'] || '/'
|
79
85
|
end
|
80
86
|
|
87
|
+
# The content_length
|
88
|
+
|
89
|
+
def content_length
|
90
|
+
return @headers['CONTENT_LENGTH'].to_i
|
91
|
+
end
|
92
|
+
|
81
93
|
# The remote IP address. REMOTE_ADDR is the standard
|
82
94
|
# but will fail if the user is behind a proxy.
|
83
95
|
# HTTP_CLIENT_IP and/or HTTP_X_FORWARDED_FOR are set by
|
data/test/nitro/tc_controller.rb
CHANGED
@@ -10,7 +10,7 @@ require 'nitro/controller'
|
|
10
10
|
class TC_Controller < Test::Unit::TestCase # :nodoc: all
|
11
11
|
include N
|
12
12
|
|
13
|
-
class
|
13
|
+
class Blog2Controller < Controller
|
14
14
|
attr_reader :aflag, :tflag
|
15
15
|
|
16
16
|
def initialize(context)
|
@@ -25,7 +25,7 @@ class TC_Controller < Test::Unit::TestCase # :nodoc: all
|
|
25
25
|
|
26
26
|
def setup
|
27
27
|
@disp = Dispatcher.new({
|
28
|
-
'blog' =>
|
28
|
+
'blog' => Blog2Controller,
|
29
29
|
})
|
30
30
|
@disp.template_root = File.join(File.dirname(__FILE__), '..', 'public')
|
31
31
|
@conf = OpenStruct.new
|
@@ -39,6 +39,8 @@ class TC_Controller < Test::Unit::TestCase # :nodoc: all
|
|
39
39
|
ctx.headers['REQUEST_URI'] = '/blog/list'
|
40
40
|
klass, action = ctx.dispatcher.dispatch(ctx.path, ctx)
|
41
41
|
c = klass.new(ctx)
|
42
|
+
p klass.before_filters, klass.after_filters
|
43
|
+
p '--', Controller.before_filters, Controller.after_filters
|
42
44
|
begin
|
43
45
|
c.send(action)
|
44
46
|
rescue RenderExit
|
@@ -52,8 +54,8 @@ class TC_Controller < Test::Unit::TestCase # :nodoc: all
|
|
52
54
|
|
53
55
|
def test_action_methods
|
54
56
|
# aflag/tflag are counted too!
|
55
|
-
assert_equal 3,
|
56
|
-
assert
|
57
|
+
assert_equal 3, Blog2Controller.action_methods.size
|
58
|
+
assert Blog2Controller.action_methods.include?('list')
|
57
59
|
end
|
58
60
|
|
59
61
|
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
require 'nitro/dispatcher'
|
7
|
+
require 'nitro/context'
|
8
|
+
require 'nitro/controller'
|
9
|
+
require 'nitro/filters'
|
10
|
+
|
11
|
+
class TestCaseFilters < Test::Unit::TestCase # :nodoc: all
|
12
|
+
include N
|
13
|
+
|
14
|
+
class MyController < Controller
|
15
|
+
|
16
|
+
attr_accessor :login_f, :pre_f, :post_f
|
17
|
+
|
18
|
+
before_filter :pre, :only => :login
|
19
|
+
after_filter :post, :except => :login
|
20
|
+
|
21
|
+
def initialize(*args)
|
22
|
+
super
|
23
|
+
@login_f = @pre_f = @post_f = 0
|
24
|
+
end
|
25
|
+
|
26
|
+
def login
|
27
|
+
@login_f = @pre_f + @post_f + 1
|
28
|
+
render_nothing
|
29
|
+
end
|
30
|
+
|
31
|
+
def logout
|
32
|
+
@login_f = @pre_f + @post_f + 1
|
33
|
+
render_nothing
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def pre
|
39
|
+
@pre_f += 1
|
40
|
+
end
|
41
|
+
|
42
|
+
def post
|
43
|
+
@post_f += 1
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class AnotherController < MyController
|
48
|
+
before_filter :more
|
49
|
+
|
50
|
+
def register
|
51
|
+
@login_f = @pre_f + @post_f + 1
|
52
|
+
render_nothing
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def more
|
58
|
+
@a = 2
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def setup
|
63
|
+
@disp = Dispatcher.new(
|
64
|
+
'my' => MyController,
|
65
|
+
'another' => AnotherController
|
66
|
+
)
|
67
|
+
@conf = OpenStruct.new
|
68
|
+
@conf.dispatcher = @disp
|
69
|
+
@ctx = Context.new(@conf)
|
70
|
+
@ctx.headers = {}
|
71
|
+
@ctx.params = {}
|
72
|
+
end
|
73
|
+
|
74
|
+
def teardown
|
75
|
+
@conf = @ctx = nil
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_options
|
79
|
+
c = MyController.new(@ctx)
|
80
|
+
|
81
|
+
c.__xhtml__login
|
82
|
+
assert_equal 2, c.login_f
|
83
|
+
assert_equal 1, c.pre_f
|
84
|
+
assert_equal 0, c.post_f
|
85
|
+
|
86
|
+
c.__xhtml__logout
|
87
|
+
assert_equal 2, c.login_f
|
88
|
+
assert_equal 1, c.pre_f
|
89
|
+
assert_equal 1, c.post_f
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_inheritable
|
93
|
+
c = AnotherController.new(@ctx)
|
94
|
+
|
95
|
+
c.__xhtml__register
|
96
|
+
assert_equal 1, c.login_f
|
97
|
+
assert_equal 0, c.pre_f
|
98
|
+
assert_equal 1, c.post_f
|
99
|
+
|
100
|
+
# bug: test filters not propageted.
|
101
|
+
|
102
|
+
assert_equal 0, Controller.before_filters.size
|
103
|
+
assert_equal 1, MyController.before_filters.size
|
104
|
+
assert_equal 2, AnotherController.before_filters.size
|
105
|
+
|
106
|
+
assert_equal 0, Controller.after_filters.size
|
107
|
+
assert_equal 1, MyController.after_filters.size
|
108
|
+
assert_equal 1, AnotherController.after_filters.size
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.8.
|
2
|
+
rubygems_version: 0.8.10
|
3
3
|
specification_version: 1
|
4
4
|
name: nitro
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2005-03-
|
6
|
+
version: 0.14.0
|
7
|
+
date: 2005-03-28
|
8
8
|
summary: Nitro Web Engine
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -98,7 +98,6 @@ files:
|
|
98
98
|
- examples/no_xsl_blog/lib/blog/template.rb
|
99
99
|
- examples/no_xsl_blog/lib/blog/model.rb
|
100
100
|
- examples/no_xsl_blog/lib/blog/controller.rb
|
101
|
-
- examples/why_wiki/wiki.yml
|
102
101
|
- examples/why_wiki/run.rb
|
103
102
|
- examples/why_wiki/README
|
104
103
|
- examples/flash/log
|
@@ -126,14 +125,18 @@ files:
|
|
126
125
|
- examples/wee_style/README
|
127
126
|
- examples/blog/log
|
128
127
|
- examples/blog/conf
|
128
|
+
- examples/blog/cache
|
129
129
|
- examples/blog/public
|
130
130
|
- examples/blog/src
|
131
131
|
- examples/blog/run.rb
|
132
132
|
- examples/blog/README
|
133
133
|
- examples/blog/log/apache.error_log
|
134
|
+
- examples/blog/log/rewrite_log
|
134
135
|
- examples/blog/log/README
|
135
136
|
- examples/blog/conf/apache.conf
|
136
137
|
- examples/blog/conf/lhttpd.conf
|
138
|
+
- examples/blog/conf/apache.conf.new
|
139
|
+
- examples/blog/cache/entriesadmin
|
137
140
|
- examples/blog/public/style.css
|
138
141
|
- examples/blog/public/m
|
139
142
|
- examples/blog/public/fcgi.rb
|
@@ -181,9 +184,13 @@ files:
|
|
181
184
|
- doc/RELEASES
|
182
185
|
- doc/tutorial.txt
|
183
186
|
- doc/architecture.txt
|
187
|
+
- doc/CHANGELOG.2
|
184
188
|
- doc/bugs.txt
|
185
189
|
- lib/nitro
|
186
190
|
- lib/nitro.rb
|
191
|
+
- lib/nitro/caching.rb
|
192
|
+
- lib/nitro/caching
|
193
|
+
- lib/nitro/testing
|
187
194
|
- lib/nitro/localization.rb
|
188
195
|
- lib/nitro/cookie.rb
|
189
196
|
- lib/nitro/session.rb
|
@@ -213,6 +220,11 @@ files:
|
|
213
220
|
- lib/nitro/component.rb
|
214
221
|
- lib/nitro/markup.rb
|
215
222
|
- lib/nitro/filters.rb
|
223
|
+
- lib/nitro/caching/invalidation.rb
|
224
|
+
- lib/nitro/caching/output.rb
|
225
|
+
- lib/nitro/caching/fragments.rb
|
226
|
+
- lib/nitro/caching/actions.rb
|
227
|
+
- lib/nitro/caching/stores.rb
|
216
228
|
- lib/nitro/adapters/cgi.rb
|
217
229
|
- lib/nitro/adapters/fastcgi.rb
|
218
230
|
- lib/nitro/adapters/webrick.rb
|
@@ -239,6 +251,7 @@ files:
|
|
239
251
|
- test/nitro/ui
|
240
252
|
- test/nitro/tc_mail.rb
|
241
253
|
- test/nitro/tc_context.rb
|
254
|
+
- test/nitro/tc_filters.rb
|
242
255
|
- test/nitro/tc_dispatcher.rb
|
243
256
|
- test/nitro/adapters/tc_webrick.rb
|
244
257
|
- test/nitro/adapters/tc_cgi.rb
|
@@ -252,29 +265,6 @@ files:
|
|
252
265
|
- test/public/dummy_mailer
|
253
266
|
- test/public/blog/list.xhtml
|
254
267
|
- test/public/dummy_mailer/registration.xhtml
|
255
|
-
- vendor/breakpoint_client.rb
|
256
|
-
- vendor/extensions
|
257
|
-
- vendor/binding_of_caller.rb
|
258
|
-
- vendor/blankslate.rb
|
259
|
-
- vendor/breakpoint.rb
|
260
|
-
- vendor/README
|
261
|
-
- vendor/extensions/enumerable.rb
|
262
|
-
- vendor/extensions/all.rb
|
263
|
-
- vendor/extensions/hash.rb
|
264
|
-
- vendor/extensions/continuation.rb
|
265
|
-
- vendor/extensions/module.rb
|
266
|
-
- vendor/extensions/binding.rb
|
267
|
-
- vendor/extensions/ostruct.rb
|
268
|
-
- vendor/extensions/kernel.rb
|
269
|
-
- vendor/extensions/class.rb
|
270
|
-
- vendor/extensions/numeric.rb
|
271
|
-
- vendor/extensions/_base.rb
|
272
|
-
- vendor/extensions/io.rb
|
273
|
-
- vendor/extensions/string.rb
|
274
|
-
- vendor/extensions/object.rb
|
275
|
-
- vendor/extensions/array.rb
|
276
|
-
- vendor/extensions/symbol.rb
|
277
|
-
- vendor/extensions/_template.rb
|
278
268
|
test_files: []
|
279
269
|
rdoc_options:
|
280
270
|
- "--main"
|
@@ -301,7 +291,7 @@ dependencies:
|
|
301
291
|
-
|
302
292
|
- "="
|
303
293
|
- !ruby/object:Gem::Version
|
304
|
-
version: 0.
|
294
|
+
version: 0.14.0
|
305
295
|
version:
|
306
296
|
- !ruby/object:Gem::Dependency
|
307
297
|
name: og
|
@@ -311,7 +301,7 @@ dependencies:
|
|
311
301
|
-
|
312
302
|
- "="
|
313
303
|
- !ruby/object:Gem::Version
|
314
|
-
version: 0.
|
304
|
+
version: 0.14.0
|
315
305
|
version:
|
316
306
|
- !ruby/object:Gem::Dependency
|
317
307
|
name: ruby-breakpoint
|
data/examples/why_wiki/wiki.yml
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--- {}
|
data/vendor/README
DELETED
data/vendor/binding_of_caller.rb
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
begin
|
2
|
-
require 'simplecc'
|
3
|
-
rescue LoadError
|
4
|
-
def Continuation.create(*args, &block)
|
5
|
-
cc = nil; result = callcc {|c| cc = c; block.call(cc) if block and args.empty?}
|
6
|
-
result ||= args
|
7
|
-
return *[cc, *result]
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
# This method returns the binding of the method that called your
|
12
|
-
# method. It will raise an Exception when you're not inside a method.
|
13
|
-
#
|
14
|
-
# It's used like this:
|
15
|
-
# def inc_counter(amount = 1)
|
16
|
-
# Binding.of_caller do |binding|
|
17
|
-
# # Create a lambda that will increase the variable 'counter'
|
18
|
-
# # in the caller of this method when called.
|
19
|
-
# inc = eval("lambda { |arg| counter += arg }", binding)
|
20
|
-
# # We can refer to amount from inside this block safely.
|
21
|
-
# inc.call(amount)
|
22
|
-
# end
|
23
|
-
# # No other statements can go here. Put them inside the block.
|
24
|
-
# end
|
25
|
-
# counter = 0
|
26
|
-
# 2.times { inc_counter }
|
27
|
-
# counter # => 2
|
28
|
-
#
|
29
|
-
# Binding.of_caller must be the last statement in the method.
|
30
|
-
# This means that you will have to put everything you want to
|
31
|
-
# do after the call to Binding.of_caller into the block of it.
|
32
|
-
# This should be no problem however, because Ruby has closures.
|
33
|
-
# If you don't do this an Exception will be raised. Because of
|
34
|
-
# the way that Binding.of_caller is implemented it has to be
|
35
|
-
# done this way.
|
36
|
-
def Binding.of_caller(&block)
|
37
|
-
old_critical = Thread.critical
|
38
|
-
Thread.critical = true
|
39
|
-
count = 0
|
40
|
-
cc, result, error, extra_data = Continuation.create(nil, nil)
|
41
|
-
error.call if error
|
42
|
-
|
43
|
-
tracer = lambda do |*args|
|
44
|
-
type, context, extra_data = args[0], args[4], args
|
45
|
-
if type == "return"
|
46
|
-
count += 1
|
47
|
-
# First this method and then calling one will return --
|
48
|
-
# the trace event of the second event gets the context
|
49
|
-
# of the method which called the method that called this
|
50
|
-
# method.
|
51
|
-
if count == 2
|
52
|
-
# It would be nice if we could restore the trace_func
|
53
|
-
# that was set before we swapped in our own one, but
|
54
|
-
# this is impossible without overloading set_trace_func
|
55
|
-
# in current Ruby.
|
56
|
-
set_trace_func(nil)
|
57
|
-
cc.call(eval("binding", context), nil, extra_data)
|
58
|
-
end
|
59
|
-
elsif type == "line" then
|
60
|
-
nil
|
61
|
-
elsif type == "c-return" and extra_data[3] == :set_trace_func then
|
62
|
-
nil
|
63
|
-
else
|
64
|
-
set_trace_func(nil)
|
65
|
-
error_msg = "Binding.of_caller used in non-method context or " +
|
66
|
-
"trailing statements of method using it aren't in the block."
|
67
|
-
cc.call(nil, lambda { raise(ArgumentError, error_msg) }, nil)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
unless result
|
72
|
-
set_trace_func(tracer)
|
73
|
-
return nil
|
74
|
-
else
|
75
|
-
Thread.critical = old_critical
|
76
|
-
case block.arity
|
77
|
-
when 1 then yield(result)
|
78
|
-
else yield(result, extra_data)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
data/vendor/blankslate.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#--
|
3
|
-
# Copyright 2004 by Jim Weirich (jim@weirichhouse.org).
|
4
|
-
# All rights reserved.
|
5
|
-
|
6
|
-
# Permission is granted for use, copying, modification, distribution,
|
7
|
-
# and distribution of modified versions of this work as long as the
|
8
|
-
# above copyright notice is included.
|
9
|
-
#++
|
10
|
-
|
11
|
-
module Builder #:nodoc:
|
12
|
-
|
13
|
-
# BlankSlate provides an abstract base class with no predefined
|
14
|
-
# methods (except for <tt>\_\_send__</tt> and <tt>\_\_id__</tt>).
|
15
|
-
# BlankSlate is useful as a base class when writing classes that
|
16
|
-
# depend upon <tt>method_missing</tt> (e.g. dynamic proxies).
|
17
|
-
class BlankSlate #:nodoc:
|
18
|
-
class << self
|
19
|
-
def hide(name)
|
20
|
-
undef_method name if
|
21
|
-
instance_methods.include?(name.to_s) and
|
22
|
-
name !~ /^(__|instance_eval)/
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
instance_methods.each { |m| hide(m) }
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
# Since Ruby is very dynamic, methods added to the ancestors of
|
31
|
-
# BlankSlate <em>after BlankSlate is defined</em> will show up in the
|
32
|
-
# list of available BlankSlate methods. We handle this by defining a hook in the Object and Kernel classes that will hide any defined
|
33
|
-
module Kernel #:nodoc:
|
34
|
-
class << self
|
35
|
-
alias_method :blank_slate_method_added, :method_added
|
36
|
-
def method_added(name)
|
37
|
-
blank_slate_method_added(name)
|
38
|
-
return if self != Kernel
|
39
|
-
Builder::BlankSlate.hide(name)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
class Object #:nodoc:
|
45
|
-
class << self
|
46
|
-
alias_method :blank_slate_method_added, :method_added
|
47
|
-
def method_added(name)
|
48
|
-
blank_slate_method_added(name)
|
49
|
-
return if self != Object
|
50
|
-
Builder::BlankSlate.hide(name)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|