mack 0.8.0.101 → 0.8.1
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 +29 -0
- data/bin/mackery-console +6 -5
- data/bin/mackery-server +23 -7
- data/lib/mack.rb +0 -3
- data/lib/mack/application.rb +161 -0
- data/lib/mack/assets/asset_helpers.rb +8 -0
- data/lib/mack/assets/assets_mgr.rb +0 -10
- data/lib/mack/boot/app.rb +46 -0
- data/lib/mack/boot/assets.rb +10 -0
- data/lib/mack/boot/configuration.rb +87 -0
- data/lib/mack/boot/console.rb +36 -0
- data/lib/mack/boot/core.rb +21 -0
- data/lib/mack/boot/environment.rb +22 -0
- data/lib/mack/boot/extensions.rb +13 -0
- data/lib/mack/boot/gem_tasks.rb +20 -0
- data/lib/mack/boot/gems.rb +18 -0
- data/lib/mack/boot/hello.rb +11 -0
- data/lib/mack/{initialization → boot}/helpers.rb +8 -3
- data/lib/mack/boot/initializers.rb +17 -0
- data/lib/mack/boot/lib.rb +19 -0
- data/lib/mack/{initialization → boot}/logging.rb +16 -9
- data/lib/mack/{initialization → boot}/logging/basic_layout.rb +0 -0
- data/lib/mack/{initialization → boot}/logging/color_layout.rb +1 -1
- data/lib/mack/{initialization → boot}/logging/filter.rb +0 -0
- data/lib/mack/boot/paths.rb +234 -0
- data/lib/mack/boot/plugins.rb +26 -0
- data/lib/mack/boot/portlets.rb +20 -0
- data/lib/mack/boot/routes.rb +15 -0
- data/lib/mack/boot/version.rb +7 -0
- data/lib/mack/controller/request.rb +5 -2
- data/lib/mack/controller/uploaded_file.rb +4 -0
- data/lib/mack/core_extensions/kernel.rb +26 -0
- data/lib/mack/core_extensions/object.rb +16 -0
- data/lib/mack/generators/mack_application_generator/manifest.yml +5 -3
- data/lib/mack/generators/mack_application_generator/templates/config/initializers/portlets.rb.template +9 -0
- data/lib/mack/generators/mack_application_generator/templates/public/stylesheets/scaffold.css.template +4 -0
- data/lib/mack/generators/portlet_generator/portlet_generator.rb +2 -0
- data/lib/mack/generators/portlet_generator/templates/README.template +3 -0
- data/lib/mack/generators/portlet_generator/templates/portlet_config/portlet.spec.template +28 -0
- data/lib/mack/portlets/manager.rb +27 -0
- data/lib/mack/portlets/portlet.rb +93 -0
- data/lib/mack/portlets/unpacker.rb +34 -0
- data/lib/mack/rendering/engine/erubis.rb +2 -2
- data/lib/mack/rendering/type/file_base.rb +8 -4
- data/lib/mack/rendering/type/public.rb +4 -2
- data/lib/mack/routing/resource_proxy.rb +30 -4
- data/lib/mack/routing/route_map.rb +28 -15
- data/lib/mack/routing/route_object.rb +57 -24
- data/lib/mack/routing/urls.rb +12 -2
- data/lib/mack/runner.rb +6 -154
- data/lib/mack/sessions/cookie_session_store.rb +2 -1
- data/lib/mack/tasks/mack_dump_tasks.rake +62 -18
- data/lib/mack/tasks/mack_tasks.rake +1 -15
- data/lib/mack/tasks/portlet_tasks.rake +33 -0
- data/lib/mack/tasks/rake_rules.rake +6 -0
- data/lib/mack/tasks/test_tasks.rake +4 -6
- data/lib/mack/testing/helpers.rb +12 -4
- data/lib/mack/utils/server.rb +7 -1
- data/lib/mack/utils/static.rb +19 -0
- data/lib/mack/version.rb +1 -1
- data/lib/mack/view_helpers/all_helpers.rb +0 -8
- data/lib/mack/view_helpers/date_time_helpers.rb +18 -12
- data/lib/mack/view_helpers/form_helpers.rb +9 -0
- data/lib/mack/view_helpers/html_helpers.rb +18 -7
- data/lib/mack/view_helpers/link_helpers.rb +2 -1
- data/lib/mack/view_helpers/object_helpers.rb +1 -1
- data/lib/mack_app.rb +26 -14
- data/lib/mack_core.rb +50 -39
- data/lib/mack_tasks.rb +46 -19
- metadata +37 -18
- data/lib/mack/initialization/application.rb +0 -53
- data/lib/mack/initialization/boot_loader.rb +0 -72
- data/lib/mack/initialization/configuration.rb +0 -101
- data/lib/mack/initialization/console.rb +0 -29
- data/lib/mack/initialization/environment.rb +0 -16
- data/lib/mack/initialization/plugins.rb +0 -16
- data/lib/mack/initialization/server/simple_server.rb +0 -19
- data/lib/mack/tasks/mack_server_tasks.rake +0 -24
- data/lib/mack/utils/paths.rb +0 -154
@@ -47,7 +47,7 @@ module Mack
|
|
47
47
|
routes = @_route_map[verb]
|
48
48
|
routes.each do |route|
|
49
49
|
if route.options[:host]
|
50
|
-
next unless route.
|
50
|
+
next unless !host.nil? && host.match(route.regex_patterns[:host])
|
51
51
|
end
|
52
52
|
if route.options[:scheme]
|
53
53
|
next unless route.options[:scheme].downcase == scheme
|
@@ -56,7 +56,7 @@ module Mack
|
|
56
56
|
next unless route.options[:port].to_i == port.to_i
|
57
57
|
end
|
58
58
|
if route.match?(path)
|
59
|
-
ret_val = route.options_with_parameters(path)
|
59
|
+
ret_val = route.options_with_parameters(path, host)
|
60
60
|
return ret_val
|
61
61
|
end
|
62
62
|
end
|
@@ -93,6 +93,7 @@ module Mack
|
|
93
93
|
# "/:controller/:action"
|
94
94
|
# These get created for each of the 4 HTTP verbs.
|
95
95
|
def defaults
|
96
|
+
@_default_routes = []
|
96
97
|
[:get, :post, :put, :delete].each do |verb|
|
97
98
|
@_default_routes << RouteObject.new("/:controller/:action/:id", :method => verb)
|
98
99
|
@_default_routes << RouteObject.new("/:controller/:action", :method => verb)
|
@@ -104,31 +105,32 @@ module Mack
|
|
104
105
|
end
|
105
106
|
|
106
107
|
# Sets up mappings and named routes for a resource.
|
107
|
-
def resource(controller, &block)
|
108
|
+
def resource(controller, options = {}, &block)
|
108
109
|
# yield up to add other resources:
|
109
110
|
if block_given?
|
110
|
-
proxy = ResourceProxy.new(controller)
|
111
|
+
proxy = ResourceProxy.new(controller, [controller.to_sym])
|
111
112
|
yield proxy
|
112
113
|
proxy.routes.each do |route|
|
113
|
-
connect_with_name("#{controller}_#{route[:name]}", route[:path], route[:options])
|
114
|
+
connect_with_name("#{controller}_#{route[:name]}", route[:path], options.merge(route[:options]))
|
114
115
|
end
|
115
116
|
end
|
116
117
|
# connect the default resources:
|
117
|
-
|
118
|
-
connect_with_name("#{controller}_create", "/#{controller}", {:controller => controller, :action => :create, :method => :post})
|
119
|
-
connect_with_name("#{controller}_new", "/#{controller}/new", {:controller => controller, :action => :new, :method => :get})
|
120
|
-
connect_with_name("#{controller}_show", "/#{controller}/:id", {:controller => controller, :action => :show, :method => :get})
|
121
|
-
connect_with_name("#{controller}_edit", "/#{controller}/:id/edit", {:controller => controller, :action => :edit, :method => :get})
|
122
|
-
connect_with_name("#{controller}_update", "/#{controller}/:id", {:controller => controller, :action => :update, :method => :put})
|
123
|
-
connect_with_name("#{controller}_delete", "/#{controller}/:id", {:controller => controller, :action => :delete, :method => :delete})
|
118
|
+
build_resource_routes(controller, controller, controller, options)
|
124
119
|
end
|
125
120
|
|
126
121
|
def inspect # :nodoc:
|
127
122
|
@_route_map.inspect
|
128
123
|
end
|
129
124
|
|
130
|
-
|
131
|
-
|
125
|
+
def routes_list # :nodoc:
|
126
|
+
@_route_map
|
127
|
+
end
|
128
|
+
|
129
|
+
def default_routes_list # :nodoc:
|
130
|
+
@_default_routes || []
|
131
|
+
end
|
132
|
+
|
133
|
+
def connect_with_name(name, path, options = {}, &block) # :nodoc:
|
132
134
|
n_route = name.methodize
|
133
135
|
route = connect(path, {:action => n_route.to_sym}.merge(options), &block)
|
134
136
|
|
@@ -145,9 +147,20 @@ module Mack
|
|
145
147
|
options = {:host => @request.host, :scheme => @request.scheme, :port => @request.port}.merge(options)
|
146
148
|
end
|
147
149
|
self.send("#{n_route}_url", options)
|
148
|
-
end
|
150
|
+
end
|
149
151
|
end
|
150
152
|
|
153
|
+
def build_resource_routes(method_base, path_base, controller, options) # :nodoc:
|
154
|
+
connect_with_name("#{method_base}_index", "/#{path_base}", {:controller => controller, :action => :index, :method => :get}.merge(options))
|
155
|
+
connect_with_name("#{method_base}_create", "/#{path_base}", {:controller => controller, :action => :create, :method => :post}.merge(options))
|
156
|
+
connect_with_name("#{method_base}_new", "/#{path_base}/new", {:controller => controller, :action => :new, :method => :get}.merge(options))
|
157
|
+
connect_with_name("#{method_base}_show", "/#{path_base}/:id", {:controller => controller, :action => :show, :method => :get}.merge(options))
|
158
|
+
connect_with_name("#{method_base}_edit", "/#{path_base}/:id/edit", {:controller => controller, :action => :edit, :method => :get}.merge(options))
|
159
|
+
connect_with_name("#{method_base}_update", "/#{path_base}/:id", {:controller => controller, :action => :update, :method => :put}.merge(options))
|
160
|
+
connect_with_name("#{method_base}_delete", "/#{path_base}/:id", {:controller => controller, :action => :delete, :method => :delete}.merge(options))
|
161
|
+
end
|
162
|
+
|
163
|
+
private
|
151
164
|
def handle_options(opts, &block)
|
152
165
|
opts = {:method => :get}.merge(opts.symbolize_keys)
|
153
166
|
opts[:runner_block] = block if block_given?
|
@@ -5,15 +5,21 @@ module Mack
|
|
5
5
|
class RouteObject # :nodoc:
|
6
6
|
attr_accessor :options
|
7
7
|
attr_accessor :path
|
8
|
-
attr_accessor :regex_pattern
|
9
|
-
attr_accessor :embedded_parameters
|
10
8
|
attr_accessor :wildcard
|
9
|
+
attr_accessor :embedded_parameters
|
10
|
+
attr_accessor :regex_patterns
|
11
|
+
attr_accessor :insertion_order
|
11
12
|
|
12
13
|
def initialize(path, options = {})
|
13
14
|
self.path = path
|
14
15
|
self.options = {:action => :index}.merge(options)
|
15
|
-
self.embedded_parameters = []
|
16
|
-
|
16
|
+
# self.embedded_parameters = []
|
17
|
+
# self.host_embedded_parameters = []
|
18
|
+
self.regex_patterns = {}
|
19
|
+
self.embedded_parameters = {:uri => [], :host => []}
|
20
|
+
build_regex_patterns
|
21
|
+
|
22
|
+
self.insertion_order = Mack::Routes::RouteObject.next_insertion_index
|
17
23
|
end
|
18
24
|
|
19
25
|
def ==(other)
|
@@ -21,7 +27,7 @@ module Mack
|
|
21
27
|
end
|
22
28
|
|
23
29
|
def match?(url)
|
24
|
-
if url.downcase.match(self.
|
30
|
+
if url.downcase.match(self.regex_patterns[:uri])
|
25
31
|
if self.options[:format]
|
26
32
|
format = (File.extname(url).blank? ? '.html' : File.extname(url))
|
27
33
|
format = format[1..format.length]
|
@@ -32,21 +38,18 @@ module Mack
|
|
32
38
|
return false
|
33
39
|
end
|
34
40
|
|
35
|
-
def options_with_parameters(url)
|
41
|
+
def options_with_parameters(url, host = nil)
|
36
42
|
format = (File.extname(url).blank? ? '.html' : File.extname(url))
|
37
43
|
format = format[1..format.length]
|
38
44
|
opts = self.options.merge(:format => format)
|
39
45
|
url = url.gsub(/\.#{format}$/, '')
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
opts[ep.to_sym] = seg
|
45
|
-
end
|
46
|
-
end
|
46
|
+
opts.merge!(get_embedded_parameters(:uri, url, '/'))
|
47
|
+
unless host.nil?
|
48
|
+
opts.merge!(get_embedded_parameters(:host, host, '.'))
|
49
|
+
opts.merge!(:host => host) if self.options[:host]
|
47
50
|
end
|
48
51
|
if self.wildcard
|
49
|
-
caps = url.match(self.
|
52
|
+
caps = url.match(self.regex_patterns[:uri]).captures
|
50
53
|
if caps
|
51
54
|
opts[self.wildcard.to_sym] = caps.first.split('/')
|
52
55
|
end
|
@@ -55,18 +58,48 @@ module Mack
|
|
55
58
|
opts
|
56
59
|
end
|
57
60
|
|
61
|
+
def <=>(other)
|
62
|
+
self.insertion_order <=> other.insertion_order
|
63
|
+
end
|
64
|
+
|
58
65
|
private
|
59
|
-
|
60
|
-
|
61
|
-
|
66
|
+
|
67
|
+
def self.next_insertion_index
|
68
|
+
(@__next_insertion_index ||= 0)
|
69
|
+
@__next_insertion_index += 1
|
70
|
+
end
|
71
|
+
|
72
|
+
def get_embedded_parameters(name, path, splitter = '/')
|
73
|
+
vals = {}
|
74
|
+
if self.embedded_parameters[name].any? && !path.nil?
|
75
|
+
path.split(splitter).each_with_index do |seg, i|
|
76
|
+
ep = self.embedded_parameters[name][i]
|
77
|
+
unless ep.nil?
|
78
|
+
vals[ep.to_sym] = seg
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
vals
|
83
|
+
end
|
84
|
+
|
85
|
+
def build_regex_patterns
|
86
|
+
{:uri => {:path => self.path, :splitter => '/', :emb_pat => ':'}, :host => {:path => self.options[:host], :splitter => '.', :emb_pat => ':'}}.each do |k, v|
|
87
|
+
build_regex_pattern(k, v[:path], v[:splitter], v[:emb_pat])
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def build_regex_pattern(name, path, splitter = '/', emb_pat = ':')
|
92
|
+
return if path.nil?
|
93
|
+
if path.is_a?(Regexp)
|
94
|
+
self.regex_patterns[name] = self.path
|
62
95
|
elsif self.path.is_a?(String)
|
63
96
|
reg = []
|
64
|
-
if
|
65
|
-
self.
|
97
|
+
if path == '/'
|
98
|
+
self.regex_patterns[name] = /^\/$/
|
66
99
|
else
|
67
|
-
|
68
|
-
if seg.match(
|
69
|
-
self.embedded_parameters[i] = seg.gsub(
|
100
|
+
path.split(splitter).each_with_index do |seg, i|
|
101
|
+
if seg.match(/^#{emb_pat}/)
|
102
|
+
self.embedded_parameters[name][i] = seg.gsub(emb_pat, '')
|
70
103
|
reg << '[^/]+'
|
71
104
|
elsif seg.match(/^\*/)
|
72
105
|
self.wildcard = seg.gsub('*', '')
|
@@ -75,10 +108,10 @@ module Mack
|
|
75
108
|
reg << seg.downcase
|
76
109
|
end
|
77
110
|
end
|
78
|
-
self.
|
111
|
+
self.regex_patterns[name] = /^#{reg.join(splitter) + '(\..+$|$)'}/
|
79
112
|
end
|
80
113
|
else
|
81
|
-
raise ArgumentError.new("'#{
|
114
|
+
raise ArgumentError.new("'#{path}' is a #{path.class} and it should be either a String or Regexp!")
|
82
115
|
end
|
83
116
|
end
|
84
117
|
|
data/lib/mack/routing/urls.rb
CHANGED
@@ -21,7 +21,17 @@ module Mack
|
|
21
21
|
unused_params = []
|
22
22
|
format = nil
|
23
23
|
host_options = {:host => options[:host], :port => options[:port], :scheme => options[:scheme]}
|
24
|
-
options - [:host, :port, :scheme]
|
24
|
+
options - [:host, :port, :scheme, :runner_block]
|
25
|
+
if host_options[:host]
|
26
|
+
hu = host_options[:host].dup
|
27
|
+
options.each_pair do |k, v|
|
28
|
+
vp = Rack::Utils.escape(v.to_param)
|
29
|
+
unless hu.gsub!(":#{k}", vp).nil?
|
30
|
+
options - [k.to_sym]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
host_options[:host] = hu
|
34
|
+
end
|
25
35
|
options.each_pair do |k, v|
|
26
36
|
unless k.to_sym == :format
|
27
37
|
if u.match(/\*#{k}/)
|
@@ -89,7 +99,7 @@ module Mack
|
|
89
99
|
else
|
90
100
|
":#{port}"
|
91
101
|
end
|
92
|
-
return "#{scheme.downcase}://#{host.downcase}#{port}"
|
102
|
+
return "#{(scheme || 'http').downcase}://#{host.downcase}#{port}"
|
93
103
|
end
|
94
104
|
|
95
105
|
end # Urls
|
data/lib/mack/runner.rb
CHANGED
@@ -1,159 +1,11 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'routing', 'urls')
|
2
|
+
require File.join(File.dirname(__FILE__), 'application')
|
2
3
|
module Mack
|
3
|
-
|
4
|
-
# It handles all the dispatching back and forth between the Rack framework and a Mack application.
|
5
|
-
class Runner
|
6
|
-
include Extlib::Hook
|
7
|
-
include Mack::Routes::Urls
|
8
|
-
|
9
|
-
attr_reader :response # :nodoc:
|
10
|
-
attr_reader :request # :nodoc:
|
11
|
-
attr_reader :cookies # :nodoc:
|
12
|
-
attr_reader :runner_helpers # :nodoc:
|
13
|
-
attr_reader :original_controller
|
14
|
-
attr_reader :original_action
|
15
|
-
|
16
|
-
# This method needs to be defined as part of the Rack framework. As is noted for the Mack::Runner
|
17
|
-
# class, this is where the center of the Mack framework lies.
|
18
|
-
def call(env)
|
19
|
-
env["rack.errors"] = StringIO.new # Send Rack errors nowhere fast!
|
20
|
-
begin
|
21
|
-
setup(env)
|
22
|
-
begin
|
23
|
-
route = Mack::Routes.retrieve(self.request)
|
24
|
-
if route[:redirect_to]
|
25
|
-
# because the route is specified to be a redirect, let's do that:
|
26
|
-
redirect_to(route)
|
27
|
-
else
|
28
|
-
# set these in case we need them for handling errors:
|
29
|
-
@original_controller = route[:controller]
|
30
|
-
@original_action = route[:action]
|
31
|
-
run_controller(route)
|
32
|
-
end
|
33
|
-
# return teardown
|
34
|
-
rescue Exception => e
|
35
|
-
# There was an exception, let's see if there's a handler for this error in routes:
|
36
|
-
route = Mack::Routes.retrieve_from_error(e.class)
|
37
|
-
unless route.nil?
|
38
|
-
self.request.all_params[:original_controller] = @original_controller
|
39
|
-
self.request.all_params[:original_action] = @original_action
|
40
|
-
# There is a handler, let's try running that:
|
41
|
-
run_controller(route, e)
|
42
|
-
else
|
43
|
-
# If we can't find the resource, or there's no route, let's check the public directory:
|
44
|
-
case e
|
45
|
-
when Mack::Errors::ResourceNotFound, Mack::Errors::UndefinedRoute
|
46
|
-
return try_to_find_resource(env, e)
|
47
|
-
else
|
48
|
-
# Re-raise the exception
|
49
|
-
raise e
|
50
|
-
end
|
51
|
-
end
|
52
|
-
# return teardown
|
53
|
-
end
|
54
|
-
# Capture all the Exceptions for this call:
|
55
|
-
rescue Exception => e
|
56
|
-
Mack.logger.error e
|
57
|
-
case e
|
58
|
-
when Mack::Errors::ResourceNotFound, Mack::Errors::UndefinedRoute
|
59
|
-
handle_error(404, 'Page Not Found!', e)
|
60
|
-
# If it's any other type of exception render the 500.html page:
|
61
|
-
else
|
62
|
-
handle_error(500, 'Server Error!', e)
|
63
|
-
end
|
64
|
-
# return teardown
|
65
|
-
ensure
|
66
|
-
teardown
|
67
|
-
end
|
68
|
-
return self.response.finish
|
69
|
-
end
|
70
|
-
|
71
|
-
#private
|
72
|
-
def run_controller(route, e = nil)
|
73
|
-
runner_block = route[:runner_block]
|
74
|
-
route - :runner_block
|
75
|
-
|
76
|
-
self.request.params = self.request.all_params.merge(route)
|
77
|
-
self.response.content_type = Mack::Utils::MimeTypes[self.request.params[:format]]
|
78
|
-
catch(:finished) do
|
79
|
-
if runner_block
|
80
|
-
runner_block.call(self.request, self.response, self.cookies)
|
81
|
-
end
|
82
|
-
|
83
|
-
# let's handle a normal request:
|
84
|
-
begin
|
85
|
-
cont = "#{route[:controller].to_s.camelcase}Controller".constantize
|
86
|
-
rescue NameError => e
|
87
|
-
raise Mack::Errors::ResourceNotFound.new(self.request.path_info)
|
88
|
-
end
|
89
|
-
|
90
|
-
c = cont.new
|
91
|
-
c.configure_controller(self.request, self.response, self.cookies)
|
92
|
-
c.caught_exception = e unless e.nil?
|
4
|
+
class Runner # :nodoc:
|
93
5
|
|
94
|
-
|
95
|
-
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
# Setup the request, response, cookies, session, etc...
|
100
|
-
# yield up, and then clean things up afterwards.
|
101
|
-
def setup(env)
|
102
|
-
@request = Mack::Request.new(env)
|
103
|
-
@response = Mack::Response.new
|
104
|
-
@cookies = Mack::CookieJar.new(self.request, self.response)
|
105
|
-
@runner_helpers = []
|
106
|
-
Mack::RunnerHelpers::Registry.registered_items.each do |helper|
|
107
|
-
help = helper.new
|
108
|
-
help.start(self.request, self.response, self.cookies)
|
109
|
-
@runner_helpers << help
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def teardown
|
114
|
-
self.runner_helpers.reverse.each do |help|
|
115
|
-
help.complete(self.request, self.response, self.cookies)
|
116
|
-
end
|
117
|
-
# self.response.finish
|
118
|
-
end
|
119
|
-
|
120
|
-
def try_to_find_resource(env, exception)
|
121
|
-
# we can't find a route for this, so let's try and see if it's in the public directory:
|
122
|
-
path = env["PATH_INFO"].dup
|
123
|
-
path << ".html" if File.extname(path).blank?
|
124
|
-
|
125
|
-
if File.exists?(Mack::Paths.public(path))
|
126
|
-
return Rack::File.new(Mack::Paths.public).call(Rack::MockRequest.env_for(path))
|
127
|
-
else
|
128
|
-
raise exception
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
# This will redirect the request to the specified url. A default status of
|
133
|
-
# 302, Moved Temporarily, is set if no status is specified. A simple HTML
|
134
|
-
# page is rendered in case the redirect does not occur.
|
135
|
-
def redirect_to(route)
|
136
|
-
status = route[:status] || 302
|
137
|
-
url = route[:redirect_to]
|
138
|
-
options = self.request.all_params
|
139
|
-
options.merge!(route)
|
140
|
-
options - [:controller, :action, :redirect_to, :method, :status, :format]
|
141
|
-
url = url_for_pattern(url, options)
|
142
|
-
self.response.status = status
|
143
|
-
self.response[:location] = url
|
144
|
-
self.response.write(redirect_html(self.request.path_info, url, status))
|
145
|
-
end
|
146
|
-
|
147
|
-
private
|
148
|
-
def handle_error(status, body, e)
|
149
|
-
self.response.status = status
|
150
|
-
raise e if configatron.mack.show_exceptions
|
151
|
-
path = Mack::Paths.public("#{status}.html")
|
152
|
-
if File.exists?(path)
|
153
|
-
body = File.read(path)
|
154
|
-
end
|
155
|
-
self.response.write(body)
|
6
|
+
def call(env) # :nodoc:
|
7
|
+
Mack::Application.new.call(env)
|
156
8
|
end
|
157
9
|
|
158
|
-
end
|
159
|
-
end
|
10
|
+
end # Runner
|
11
|
+
end # Mack
|
@@ -22,7 +22,7 @@ module Mack
|
|
22
22
|
return sess
|
23
23
|
rescue Exception => e
|
24
24
|
# The cookie was bad, delete it and start a new session.
|
25
|
-
|
25
|
+
expire(id, request, response, cookies)
|
26
26
|
return nil
|
27
27
|
end
|
28
28
|
end
|
@@ -35,6 +35,7 @@ module Mack
|
|
35
35
|
# Deletes the cookie.
|
36
36
|
def expire(id, request, response, cookies)
|
37
37
|
cookies.delete(id)
|
38
|
+
response.delete_cookie(id)
|
38
39
|
end
|
39
40
|
|
40
41
|
end
|
@@ -9,35 +9,79 @@ namespace :mack do
|
|
9
9
|
|
10
10
|
desc "Show all the routes available"
|
11
11
|
task :routes => :environment do
|
12
|
+
spacer
|
13
|
+
|
12
14
|
include Mack::Routes::Urls
|
13
|
-
puts ""
|
14
|
-
puts "Routes:"
|
15
15
|
|
16
|
+
# Get all the defined routes
|
16
17
|
routes = Mack::Routes::RouteMap.instance.routes_list
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
18
|
+
# save the error mappings for display later:
|
19
|
+
errors = routes.delete(:errors)
|
20
|
+
|
21
|
+
# set up an [] to house our routes in their proper order:
|
22
|
+
urls = []
|
23
|
+
# :get, :post, :put, :delete
|
24
|
+
routes.each do |section|
|
25
|
+
section[1].each do |r|
|
26
|
+
# get each route
|
27
|
+
urls << r
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Add the default routes to the list:
|
32
|
+
Mack::Routes::RouteMap.instance.default_routes_list.each do |r|
|
33
|
+
urls << r
|
34
|
+
end
|
35
|
+
|
36
|
+
unless urls.empty?
|
37
|
+
section_header "Routes"
|
38
|
+
# Sort the urls based on when they were inserted :
|
39
|
+
urls.sort.each do |r|
|
40
|
+
r.options.delete(:runner_block)
|
41
|
+
print_nice(r.path + "(.:format)", r.options.delete(:method).to_s.upcase, r.options.inspect)
|
42
|
+
end
|
43
|
+
spacer
|
44
|
+
end
|
45
|
+
|
46
|
+
unless errors.empty?
|
47
|
+
section_header "Error Mappings"
|
48
|
+
errors.each do |k, v|
|
49
|
+
print_nice(k, '', v.inspect)
|
50
|
+
end
|
51
|
+
spacer
|
25
52
|
end
|
26
|
-
puts ""
|
27
|
-
puts "-" * 125
|
28
|
-
puts "Route helper methods:"
|
29
53
|
|
30
54
|
url_methods = Mack::Routes::Urls.protected_instance_methods.collect {|x| x if x.match(/_url$/)}.compact
|
31
|
-
url_methods.
|
32
|
-
|
33
|
-
|
55
|
+
unless url_methods.empty?
|
56
|
+
section_header 'Route Helper Methods'
|
57
|
+
|
58
|
+
@request = Mack::Request.new(Rack::MockRequest.env_for("http://www.example.com"))
|
59
|
+
url_methods.sort.each do |meth|
|
60
|
+
unless meth.match(/(full|distributed)_url$/)
|
61
|
+
print_nice(meth, '', self.send(meth))
|
62
|
+
end
|
34
63
|
end
|
64
|
+
spacer
|
35
65
|
end
|
36
|
-
|
66
|
+
|
37
67
|
end # routes
|
68
|
+
|
69
|
+
private
|
70
|
+
def spacer
|
71
|
+
puts ''
|
72
|
+
puts '-' * 125
|
73
|
+
end
|
74
|
+
|
75
|
+
def print_nice(a, b, c)
|
76
|
+
puts "#{a.to_s.rjust(60)}\t#{b.to_s}\t#{c.to_s.ljust(0)}"
|
77
|
+
end
|
78
|
+
|
79
|
+
def section_header(name)
|
80
|
+
puts "\n#{name}:"
|
81
|
+
end
|
38
82
|
|
39
83
|
end # dump
|
40
84
|
|
41
85
|
end # mack
|
42
86
|
|
43
|
-
alias_task :routes, "mack:dump:routes"
|
87
|
+
alias_task :routes, "mack:dump:routes"
|