nitro 0.13.0 → 0.14.0
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/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
|