ramaze 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +26 -6
- data/bin/ramaze +8 -1
- data/doc/AUTHORS +13 -11
- data/doc/CHANGELOG +472 -13
- data/doc/LEGAL +22 -0
- data/doc/README +1 -4
- data/doc/TODO +7 -2
- data/doc/changes.txt +472 -13
- data/doc/changes.xml +472 -13
- data/doc/meta/announcement.txt +21 -23
- data/doc/readme_chunks/appendix.txt +0 -3
- data/doc/readme_chunks/features.txt +1 -1
- data/examples/auth/auth.rb +49 -0
- data/examples/auth/template/layout.haml +20 -0
- data/examples/auth/template/login.haml +16 -0
- data/examples/blog/spec/blog.rb +1 -0
- data/examples/caching.rb +5 -6
- data/examples/css.rb +37 -0
- data/examples/layout.rb +3 -17
- data/examples/simple_auth.rb +23 -0
- data/examples/sourceview/public/images/file.gif +0 -0
- data/examples/sourceview/public/images/folder.gif +0 -0
- data/examples/sourceview/public/images/tv-collapsable-last.gif +0 -0
- data/examples/sourceview/public/images/tv-collapsable.gif +0 -0
- data/examples/sourceview/public/images/tv-expandable-last.gif +0 -0
- data/examples/sourceview/public/images/tv-expandable.gif +0 -0
- data/examples/sourceview/public/images/tv-item-last.gif +0 -0
- data/examples/sourceview/public/images/tv-item.gif +0 -0
- data/examples/sourceview/public/jquery.js +11 -0
- data/examples/sourceview/public/jquery.treeview.css +47 -0
- data/examples/sourceview/public/jquery.treeview.js +223 -0
- data/examples/sourceview/public/sourceview.js +16 -0
- data/examples/sourceview/sourceview.rb +74 -0
- data/examples/sourceview/template/index.haml +43 -0
- data/examples/templates/template/external.nag +28 -0
- data/examples/templates/template/external.xsl +57 -0
- data/examples/templates/template_amrita2.rb +2 -4
- data/examples/templates/template_erubis.rb +1 -1
- data/examples/templates/template_haml.rb +1 -1
- data/examples/templates/template_liquid.rb +2 -4
- data/examples/templates/template_markaby.rb +2 -4
- data/examples/templates/template_nagoro.rb +53 -0
- data/examples/templates/template_remarkably.rb +2 -4
- data/examples/templates/template_xslt.rb +52 -0
- data/examples/whywiki/spec/whywiki.rb +63 -0
- data/examples/whywiki/start.rb +11 -13
- data/examples/whywiki/template/edit.xhtml +3 -3
- data/examples/whywiki/template/show.xhtml +5 -8
- data/examples/wikore/spec/wikore.rb +115 -0
- data/examples/wikore/src/controller.rb +81 -0
- data/examples/wikore/src/model.rb +51 -0
- data/examples/wikore/start.rb +6 -0
- data/examples/wikore/template/index.xhtml +8 -0
- data/examples/wiktacular/spec/wiktacular.rb +1 -0
- data/examples/wiktacular/src/controller.rb +1 -1
- data/lib/ramaze.rb +6 -3
- data/lib/ramaze/action.rb +2 -13
- data/lib/ramaze/action/render.rb +36 -18
- data/lib/ramaze/adapter.rb +1 -1
- data/lib/ramaze/adapter/cgi.rb +0 -3
- data/lib/ramaze/adapter/evented_mongrel.rb +7 -0
- data/lib/ramaze/adapter/mongrel.rb +4 -13
- data/lib/ramaze/adapter/swiftiplied_mongrel.rb +7 -0
- data/lib/ramaze/cache.rb +12 -7
- data/lib/ramaze/contrib.rb +22 -0
- data/lib/ramaze/contrib/auto_params.rb +128 -0
- data/lib/ramaze/contrib/auto_params/get_args.rb +56 -0
- data/lib/ramaze/contrib/gzip_filter.rb +57 -0
- data/lib/ramaze/contrib/route.rb +40 -0
- data/lib/ramaze/contrib/sequel/fill.rb +12 -0
- data/lib/ramaze/controller.rb +17 -6
- data/lib/ramaze/controller/resolve.rb +51 -14
- data/lib/ramaze/dispatcher.rb +15 -13
- data/lib/ramaze/dispatcher/action.rb +4 -3
- data/lib/ramaze/dispatcher/directory.rb +3 -3
- data/lib/ramaze/dispatcher/error.rb +1 -1
- data/lib/ramaze/dispatcher/file.rb +17 -6
- data/lib/ramaze/error.rb +3 -0
- data/lib/ramaze/gestalt.rb +28 -8
- data/lib/ramaze/global.rb +26 -6
- data/lib/ramaze/global/globalstruct.rb +31 -6
- data/lib/ramaze/helper.rb +2 -1
- data/lib/ramaze/helper/aspect.rb +2 -2
- data/lib/ramaze/helper/auth.rb +6 -9
- data/lib/ramaze/helper/cache.rb +89 -9
- data/lib/ramaze/helper/cgi.rb +2 -2
- data/lib/ramaze/helper/formatting.rb +44 -0
- data/lib/ramaze/helper/link.rb +7 -5
- data/lib/ramaze/helper/partial.rb +6 -4
- data/lib/ramaze/helper/redirect.rb +24 -9
- data/lib/ramaze/helper/stack.rb +6 -1
- data/lib/ramaze/inform/growl.rb +1 -1
- data/lib/ramaze/inform/informer.rb +2 -1
- data/lib/ramaze/inform/informing.rb +6 -0
- data/lib/ramaze/inform/syslog.rb +1 -0
- data/lib/ramaze/snippets/array/put_within.rb +24 -0
- data/lib/ramaze/snippets/dictionary.rb +499 -0
- data/lib/ramaze/snippets/numeric/filesize_format.rb +19 -0
- data/lib/ramaze/snippets/ordered_set.rb +31 -0
- data/lib/ramaze/snippets/string/DIVIDE.rb +1 -1
- data/lib/ramaze/snippets/string/snake_case.rb +1 -1
- data/lib/ramaze/snippets/struct/values_at.rb +5 -1
- data/lib/ramaze/snippets/thread/into.rb +25 -0
- data/lib/ramaze/sourcereload.rb +39 -19
- data/lib/ramaze/spec/helper.rb +4 -1
- data/lib/ramaze/spec/helper/{context.rb → browser.rb} +3 -0
- data/lib/ramaze/spec/helper/layout.rb +3 -0
- data/lib/ramaze/spec/helper/minimal.rb +3 -0
- data/lib/ramaze/spec/helper/mock_http.rb +8 -5
- data/lib/ramaze/spec/helper/requester.rb +4 -1
- data/lib/ramaze/spec/helper/wrap.rb +15 -7
- data/lib/ramaze/template.rb +5 -1
- data/lib/ramaze/template/ezamar/engine.rb +2 -3
- data/lib/ramaze/template/ezamar/morpher.rb +26 -45
- data/lib/ramaze/template/nagoro.rb +53 -0
- data/lib/ramaze/template/none.rb +14 -0
- data/lib/ramaze/template/xslt.rb +96 -0
- data/lib/ramaze/tool.rb +0 -1
- data/lib/ramaze/tool/localize.rb +7 -2
- data/lib/ramaze/trinity/request.rb +1 -0
- data/lib/ramaze/trinity/session.rb +3 -3
- data/lib/ramaze/version.rb +2 -2
- data/rake_tasks/conf.rake +1 -2
- data/rake_tasks/{maintaince.rake → maintenance.rake} +25 -17
- data/spec/contrib/auto_params.rb +97 -0
- data/spec/contrib/route.rb +60 -0
- data/spec/contrib/sequel/fill.rb +46 -0
- data/spec/examples/caching.rb +1 -2
- data/spec/examples/css.rb +12 -0
- data/spec/examples/element.rb +0 -1
- data/spec/examples/hello.rb +0 -1
- data/spec/examples/simple.rb +0 -1
- data/spec/helper.rb +3 -2
- data/spec/ramaze/action/cache.rb +24 -7
- data/spec/ramaze/action/layout.rb +19 -11
- data/spec/ramaze/action/template/sub/sub_wrapper.xhtml +1 -0
- data/spec/ramaze/controller.rb +11 -0
- data/spec/ramaze/controller/template_resolving.rb +28 -27
- data/spec/ramaze/dispatcher.rb +32 -0
- data/spec/ramaze/dispatcher/directory.rb +2 -1
- data/spec/ramaze/element.rb +1 -1
- data/spec/ramaze/gestalt.rb +28 -0
- data/spec/ramaze/helper/aspect.rb +14 -3
- data/spec/ramaze/helper/cache.rb +78 -13
- data/spec/ramaze/helper/formatting.rb +20 -0
- data/spec/ramaze/helper/link.rb +2 -0
- data/spec/ramaze/helper/partial.rb +12 -1
- data/spec/ramaze/helper/redirect.rb +44 -8
- data/spec/ramaze/helper/stack.rb +3 -3
- data/spec/ramaze/helper/template/loop.xhtml +3 -0
- data/spec/ramaze/helper/template/num.xhtml +1 -0
- data/spec/ramaze/helper/template/recursive.xhtml +8 -0
- data/spec/ramaze/morpher.rb +25 -6
- data/spec/ramaze/params.rb +6 -2
- data/spec/ramaze/request.rb +5 -2
- data/spec/ramaze/session.rb +19 -0
- data/spec/ramaze/template.rb +2 -2
- data/spec/ramaze/template/amrita2.rb +2 -2
- data/spec/ramaze/template/erubis.rb +2 -2
- data/spec/ramaze/template/ezamar.rb +6 -3
- data/spec/ramaze/template/haml.rb +3 -3
- data/spec/ramaze/template/liquid.rb +1 -1
- data/spec/ramaze/template/markaby.rb +1 -1
- data/spec/ramaze/template/nagoro.rb +65 -0
- data/spec/ramaze/template/nagoro/another/long/action.nag +1 -0
- data/spec/ramaze/template/nagoro/combined.nag +1 -0
- data/spec/ramaze/template/nagoro/file_only.nag +1 -0
- data/spec/ramaze/template/nagoro/index.nag +1 -0
- data/spec/ramaze/template/nagoro/nested.nag +1 -0
- data/spec/ramaze/template/nagoro/some__long__action.nag +1 -0
- data/spec/ramaze/template/nagoro/sum.nag +1 -0
- data/spec/ramaze/template/remarkably.rb +1 -1
- data/spec/ramaze/template/sass.rb +1 -1
- data/spec/ramaze/template/xslt.rb +93 -0
- data/spec/ramaze/template/xslt/concat_words.xsl +16 -0
- data/spec/ramaze/template/xslt/index.xsl +14 -0
- data/spec/ramaze/template/xslt/products.xsl +32 -0
- data/spec/ramaze/template/xslt/ruby_version.xsl +14 -0
- data/spec/snippets/array/put_within.rb +32 -0
- data/spec/snippets/numeric/filesize_format.rb +12 -0
- data/spec/snippets/ordered_set.rb +56 -0
- data/spec/snippets/ramaze/caller_lines.rb +6 -3
- data/spec/snippets/string/snake_case.rb +3 -0
- metadata +118 -22
- data/doc/README.html +0 -737
- data/examples/fcgi.rb +0 -13
- data/lib/ramaze/snippets/numeric/human_readable_filesize_format.rb +0 -33
- data/lib/ramaze/tool/tidy.rb +0 -104
- data/spec/ramaze/controller/template/edit.xhtml +0 -1
- data/spec/ramaze/controller/template/edit/content.xhtml +0 -1
- data/spec/ramaze/tidy.rb +0 -12
- data/spec/snippets/numeric/human_readable_filesize_format.rb +0 -11
data/lib/ramaze/adapter.rb
CHANGED
data/lib/ramaze/adapter/cgi.rb
CHANGED
@@ -13,9 +13,6 @@ module Ramaze::Adapter
|
|
13
13
|
# to make it compatible with other adapters but have no influence and
|
14
14
|
# can be omitted
|
15
15
|
def start host = nil, ports = nil
|
16
|
-
global = Ramaze::Global
|
17
|
-
global.inform_to = :stderr if global.inform_to == $stdout
|
18
|
-
|
19
16
|
Thread.new do
|
20
17
|
Thread.current[:task] = :cgi
|
21
18
|
Rack::Handler::CGI.run(self)
|
@@ -1,20 +1,11 @@
|
|
1
1
|
# Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
|
2
2
|
# All files in this distribution are subject to the terms of the Ruby license.
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
Inform.debug "Using Swiftiplied Mongrel"
|
8
|
-
elsif ENV['EVENT']
|
9
|
-
require 'swiftcore/evented_mongrel'
|
10
|
-
Inform.debug "Using Evented Mongrel"
|
11
|
-
else
|
12
|
-
require 'mongrel'
|
13
|
-
end
|
14
|
-
|
15
|
-
require 'ramaze/adapter'
|
16
|
-
require 'rack/handler/mongrel'
|
4
|
+
require 'mongrel'
|
5
|
+
require 'ramaze/adapter'
|
6
|
+
require 'rack/handler/mongrel'
|
17
7
|
|
8
|
+
module Ramaze
|
18
9
|
module Adapter
|
19
10
|
|
20
11
|
# Our Mongrel adapter acts as wrapper for the Rack::Handler::Mongrel.
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
3
|
+
|
4
|
+
Ramaze::Inform.debug "Using Swiftiplied Mongrel"
|
5
|
+
|
6
|
+
require 'swiftcore/swiftiplied_mongrel'
|
7
|
+
require 'ramaze/adapter/mongrel'
|
data/lib/ramaze/cache.rb
CHANGED
@@ -36,14 +36,19 @@ module Ramaze
|
|
36
36
|
#+++
|
37
37
|
|
38
38
|
def add *keys
|
39
|
-
keys.each
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
39
|
+
keys.each{|key|
|
40
|
+
klass = Global.cache_alternative.fetch(key, self)
|
41
|
+
add_on(key, klass)
|
42
|
+
}
|
43
|
+
Inform.dev("Added caches for: #{keys.join(', ')}")
|
44
|
+
end
|
45
|
+
|
46
|
+
def add_on(key, cache_class)
|
47
|
+
CACHES[key] = new(cache_class)
|
48
|
+
CACHES[key].instance_variable_set("@cache_name", key)
|
49
|
+
self.class.class_eval do
|
50
|
+
define_method(key){ CACHES[key] }
|
45
51
|
end
|
46
|
-
Inform.debug("Added caches for: #{keys.join(', ')}")
|
47
52
|
end
|
48
53
|
|
49
54
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
3
|
+
|
4
|
+
module Ramaze
|
5
|
+
def self.contrib(*args)
|
6
|
+
Ramaze::Contrib.load *args
|
7
|
+
end
|
8
|
+
|
9
|
+
module Contrib
|
10
|
+
class << self
|
11
|
+
def load(*contribs)
|
12
|
+
contribs.each do |name|
|
13
|
+
require 'ramaze/contrib'/name
|
14
|
+
const = Ramaze::Contrib.const_get(name.to_s.camel_case)
|
15
|
+
Ramaze::Global.contribs << const
|
16
|
+
const.startup if const.respond_to?(:startup)
|
17
|
+
Inform.dev "Loaded contrib: #{const}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
# auto_params.rb
|
2
|
+
#
|
3
|
+
# AutoParams implements action parameterization ala merb 0.4 and Nitro
|
4
|
+
# using ruby2ruby and ParseTree
|
5
|
+
#
|
6
|
+
# Usage:
|
7
|
+
# require 'ramaze/contrib'
|
8
|
+
# Ramaze.contrib :auto_params
|
9
|
+
#
|
10
|
+
# For example,
|
11
|
+
#
|
12
|
+
# def search(query) end
|
13
|
+
#
|
14
|
+
# can be accessed via
|
15
|
+
#
|
16
|
+
# - /search?query=findthis, which calls search('findthis')
|
17
|
+
# - /search/findthis search('findthis')
|
18
|
+
# - /search/findthis?query=andthis search(['findthis', 'andthis'])
|
19
|
+
#
|
20
|
+
# For more examples, take a look at spec/contrib/auto_params.rb
|
21
|
+
#
|
22
|
+
# Note: A simpler alternative for similar functionality would be:
|
23
|
+
#
|
24
|
+
# def search(query = request['query']) end
|
25
|
+
#
|
26
|
+
|
27
|
+
require __DIR__/:auto_params/:get_args
|
28
|
+
|
29
|
+
module Ramaze
|
30
|
+
|
31
|
+
module Contrib
|
32
|
+
class AutoParams
|
33
|
+
def self.startup
|
34
|
+
Ramaze::Cache.add :args
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class Action
|
40
|
+
|
41
|
+
# with parameterization, params may include
|
42
|
+
# arrays: /num?n=1&n=2 becomes [['1','2']] for def num(n) end
|
43
|
+
# nil: /calc?w=10&d=2 becomes ['10', nil, '2'] for def calc(w, h, d) end
|
44
|
+
|
45
|
+
def params=(*par)
|
46
|
+
par = *par
|
47
|
+
self[:params] = par.map{ |pa|
|
48
|
+
case pa
|
49
|
+
when Array
|
50
|
+
pa.map{|p| CGI.unescape(p.to_s)}
|
51
|
+
when nil
|
52
|
+
nil
|
53
|
+
else
|
54
|
+
CGI.unescape(pa.to_s)
|
55
|
+
end
|
56
|
+
} unless par.nil?
|
57
|
+
self[:params] ||= []
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
class Controller
|
63
|
+
|
64
|
+
# ignore cache when request.params is interesting
|
65
|
+
|
66
|
+
def self.cached(path)
|
67
|
+
if found = Cache.resolved[path]
|
68
|
+
if found.respond_to?(:relaxed_hash)
|
69
|
+
|
70
|
+
# don't use cache if we need to add request.params entries to the Action
|
71
|
+
if args = Cache.args[found.method]
|
72
|
+
param_keys = request.params.keys
|
73
|
+
return nil if args.find{|k,v| param_keys.include?(k.to_s) }
|
74
|
+
end
|
75
|
+
|
76
|
+
return found.dup
|
77
|
+
else
|
78
|
+
Inform.warn("Found faulty `#{path}' in Cache.resolved, deleting it for sanity.")
|
79
|
+
Cache.resolved.delete path
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
nil
|
84
|
+
end
|
85
|
+
|
86
|
+
# use Method#get_args to insert values from request.params into Action#params
|
87
|
+
|
88
|
+
def self.resolve_method(name, *params)
|
89
|
+
if method = action_methods.delete(name)
|
90
|
+
meth = instance_method(method)
|
91
|
+
arity = meth.arity
|
92
|
+
|
93
|
+
if meth.respond_to? :get_args
|
94
|
+
Cache.args[name] ||= meth.get_args.select{|e| e.to_s !~ /^\*/} || []
|
95
|
+
args = Cache.args[name]
|
96
|
+
|
97
|
+
param_keys = request.params.keys
|
98
|
+
|
99
|
+
# if there are missing args, or keys in request.params that match expected args
|
100
|
+
if args.size > params.size or args.find{|k,v| param_keys.include?(k.to_s) }
|
101
|
+
args.each_with_index do |(name, val), i|
|
102
|
+
r_params = request.params[name.to_s]
|
103
|
+
if params[i] and r_params.size > 0
|
104
|
+
params[i] = [params[i], r_params].flatten
|
105
|
+
else
|
106
|
+
params[i] ||= r_params
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# strip trailing nils so default argument values are used
|
111
|
+
params.reverse.each{|e| if e.nil? then params.pop else break end }
|
112
|
+
end
|
113
|
+
|
114
|
+
argity = args.select{|e| e.size==1}.size..args.size
|
115
|
+
else
|
116
|
+
argity = arity..arity
|
117
|
+
end
|
118
|
+
|
119
|
+
if arity < 0 or argity.include? params.size
|
120
|
+
return method, params
|
121
|
+
end
|
122
|
+
end
|
123
|
+
return nil, []
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# from merb/core_ext/get_args.rb
|
2
|
+
begin
|
3
|
+
require 'ruby2ruby'
|
4
|
+
|
5
|
+
class ParseTreeArray < Array
|
6
|
+
def self.translate(*args)
|
7
|
+
self.new(ParseTree.translate(*args))
|
8
|
+
end
|
9
|
+
|
10
|
+
def deep_array_node(type = nil)
|
11
|
+
each do |node|
|
12
|
+
return ParseTreeArray.new(node) if node.is_a?(Array) && (!type || node[0] == type)
|
13
|
+
next unless node.is_a?(Array)
|
14
|
+
return ParseTreeArray.new(node).deep_array_node(type)
|
15
|
+
end
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def arg_nodes
|
20
|
+
self[1..-1].inject([]) do |sum,item|
|
21
|
+
sum << [item] unless item.is_a?(Array)
|
22
|
+
sum
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_args
|
27
|
+
arg_node = deep_array_node(:args)
|
28
|
+
args = arg_node.arg_nodes
|
29
|
+
default_node = arg_node.deep_array_node(:block)
|
30
|
+
return args unless default_node
|
31
|
+
lasgns = default_node[1..-1]
|
32
|
+
lasgns.each do |asgn|
|
33
|
+
args.assoc(asgn[1]) << eval(RubyToRuby.new.process(asgn[2]))
|
34
|
+
end
|
35
|
+
args
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
module GetArgs
|
41
|
+
def get_args
|
42
|
+
klass, meth = self.to_s.split(/ /).to_a[1][0..-2].split("#")
|
43
|
+
klass = $` if klass =~ /\(/
|
44
|
+
ParseTreeArray.translate(Object.const_get(klass), meth).get_args
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class UnboundMethod
|
49
|
+
include GetArgs
|
50
|
+
end
|
51
|
+
|
52
|
+
class Method
|
53
|
+
include GetArgs
|
54
|
+
end
|
55
|
+
rescue LoadError
|
56
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
3
|
+
|
4
|
+
# gzip_filter.rb
|
5
|
+
#
|
6
|
+
# Use this to compress "large" pages with gzip. All major browsers support gzipped pages.
|
7
|
+
# This filter brought to you by your friends in #ramaze: Pistos, manveru, rikur and Kashia.
|
8
|
+
#
|
9
|
+
# Usage:
|
10
|
+
# in start.rb:
|
11
|
+
#
|
12
|
+
# require 'path/to/gzip-filter'
|
13
|
+
# Ramaze::Dispatcher::Action::FILTER << Ramaze::Filter::Gzip
|
14
|
+
|
15
|
+
require 'zlib'
|
16
|
+
|
17
|
+
module Ramaze
|
18
|
+
module Filter
|
19
|
+
class Gzip
|
20
|
+
|
21
|
+
trait :enabled => true
|
22
|
+
trait :threshold => 32768 # bytes
|
23
|
+
|
24
|
+
class << self
|
25
|
+
|
26
|
+
include Ramaze::Trinity
|
27
|
+
|
28
|
+
# Enables being plugged into Dispatcher::Action::FILTER
|
29
|
+
|
30
|
+
def call( response, options = {} )
|
31
|
+
return response if not trait[ :enabled ]
|
32
|
+
return response if response.body.nil?
|
33
|
+
return response if response.body.respond_to?( :read )
|
34
|
+
|
35
|
+
accepts = request.env[ 'HTTP_ACCEPT_ENCODING' ]
|
36
|
+
return response if accepts.nil? || ( accepts !~ /(x-gzip|gzip)/ )
|
37
|
+
|
38
|
+
if response.content_type == 'text/html' && response.body.size > trait[ :threshold ]
|
39
|
+
output = StringIO.new
|
40
|
+
def output.close
|
41
|
+
# Zlib closes the file handle, so we want to circumvent this
|
42
|
+
rewind
|
43
|
+
end
|
44
|
+
gz = Zlib::GzipWriter.new( output )
|
45
|
+
gz.write( response.body )
|
46
|
+
gz.close
|
47
|
+
|
48
|
+
response.body = output.string
|
49
|
+
response.header[ 'Content-encoding' ] = 'gzip'
|
50
|
+
end
|
51
|
+
|
52
|
+
response
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
3
|
+
|
4
|
+
module Ramaze
|
5
|
+
module Contrib
|
6
|
+
class Route
|
7
|
+
class << self
|
8
|
+
def startup
|
9
|
+
trait :route => true
|
10
|
+
trait :routes => Dictionary.new
|
11
|
+
Ramaze::Controller::FILTER.put_before(:default, :routed)
|
12
|
+
end
|
13
|
+
|
14
|
+
def [](key)
|
15
|
+
trait[:routes][key]
|
16
|
+
end
|
17
|
+
|
18
|
+
def []=(key, value)
|
19
|
+
trait[:routes][key] = value
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Controller
|
26
|
+
class << self
|
27
|
+
def routed(path)
|
28
|
+
routes = Contrib::Route.trait[:routes]
|
29
|
+
routes.each do |regex, pattern|
|
30
|
+
if md = path.match(regex)
|
31
|
+
new_path = pattern % md.to_a[1..-1]
|
32
|
+
return resolve(new_path, :routed)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
3
|
+
|
4
|
+
module Sequel
|
5
|
+
class Model
|
6
|
+
class << self
|
7
|
+
def fill request_object = Ramaze::Request.current
|
8
|
+
create(request_object.params)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/ramaze/controller.rb
CHANGED
@@ -42,11 +42,11 @@ module Ramaze
|
|
42
42
|
# Global.controllers and a new trait :actions_cached is set on it.
|
43
43
|
|
44
44
|
def inherited controller
|
45
|
-
controller.trait :actions_cached =>
|
45
|
+
controller.trait :actions_cached => {}
|
46
46
|
controller.trait :layout => {:all => nil, :deny => Set.new}
|
47
47
|
Global.controllers << controller
|
48
48
|
if map = controller.mapping
|
49
|
-
Inform.
|
49
|
+
Inform.dev("mapping #{map} => #{controller}")
|
50
50
|
Global.mapping[map] ||= controller
|
51
51
|
end
|
52
52
|
end
|
@@ -56,7 +56,7 @@ module Ramaze
|
|
56
56
|
# they are not assigned yet.
|
57
57
|
|
58
58
|
def startup options = {}
|
59
|
-
Inform.
|
59
|
+
Inform.dev("found Controllers: #{Global.controllers.inspect}")
|
60
60
|
tr, pr = Global.template_root, Global.public_root
|
61
61
|
Inform.warn("Template root: #{tr} doesn't exist") unless File.directory?(tr)
|
62
62
|
Inform.warn("Public root: #{pr} doesn't exist") unless File.directory?(pr)
|
@@ -118,15 +118,17 @@ module Ramaze
|
|
118
118
|
# the layout-action where @content may or may not be used, returning
|
119
119
|
# whatever the layout returns.
|
120
120
|
|
121
|
-
def layout(meth_or_hash
|
121
|
+
def layout(meth_or_hash)
|
122
122
|
if meth_or_hash.respond_to?(:to_hash)
|
123
123
|
meth_or_hash.each do |layout_name, *actions|
|
124
|
+
layout_name = R(self, layout_name) if layout_name.to_s !~ /\A\//
|
124
125
|
actions.flatten.each do |action|
|
125
|
-
trait[:layout][action.to_s] =
|
126
|
+
trait[:layout][action.to_s] = layout_name
|
126
127
|
end
|
127
128
|
end
|
128
129
|
else
|
129
|
-
|
130
|
+
layout_name = R(self, meth_or_hash) if meth_or_hash.to_s !~ /\A\//
|
131
|
+
trait[:layout][:all] = layout_name || meth_or_hash
|
130
132
|
end
|
131
133
|
end
|
132
134
|
|
@@ -172,6 +174,15 @@ module Ramaze
|
|
172
174
|
trait "#{this}_template" => [from, that.to_s]
|
173
175
|
end
|
174
176
|
|
177
|
+
def engine(name)
|
178
|
+
name = Ramaze::Template.const_get(name)
|
179
|
+
rescue NameError => ex
|
180
|
+
Inform.warn ex
|
181
|
+
Inform.warn "Try to use passed engine directly"
|
182
|
+
ensure
|
183
|
+
trait :engine => name
|
184
|
+
end
|
185
|
+
|
175
186
|
# Return Controller of current Action
|
176
187
|
|
177
188
|
def current
|