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.
Files changed (79) hide show
  1. data/CHANGELOG +29 -0
  2. data/bin/mackery-console +6 -5
  3. data/bin/mackery-server +23 -7
  4. data/lib/mack.rb +0 -3
  5. data/lib/mack/application.rb +161 -0
  6. data/lib/mack/assets/asset_helpers.rb +8 -0
  7. data/lib/mack/assets/assets_mgr.rb +0 -10
  8. data/lib/mack/boot/app.rb +46 -0
  9. data/lib/mack/boot/assets.rb +10 -0
  10. data/lib/mack/boot/configuration.rb +87 -0
  11. data/lib/mack/boot/console.rb +36 -0
  12. data/lib/mack/boot/core.rb +21 -0
  13. data/lib/mack/boot/environment.rb +22 -0
  14. data/lib/mack/boot/extensions.rb +13 -0
  15. data/lib/mack/boot/gem_tasks.rb +20 -0
  16. data/lib/mack/boot/gems.rb +18 -0
  17. data/lib/mack/boot/hello.rb +11 -0
  18. data/lib/mack/{initialization → boot}/helpers.rb +8 -3
  19. data/lib/mack/boot/initializers.rb +17 -0
  20. data/lib/mack/boot/lib.rb +19 -0
  21. data/lib/mack/{initialization → boot}/logging.rb +16 -9
  22. data/lib/mack/{initialization → boot}/logging/basic_layout.rb +0 -0
  23. data/lib/mack/{initialization → boot}/logging/color_layout.rb +1 -1
  24. data/lib/mack/{initialization → boot}/logging/filter.rb +0 -0
  25. data/lib/mack/boot/paths.rb +234 -0
  26. data/lib/mack/boot/plugins.rb +26 -0
  27. data/lib/mack/boot/portlets.rb +20 -0
  28. data/lib/mack/boot/routes.rb +15 -0
  29. data/lib/mack/boot/version.rb +7 -0
  30. data/lib/mack/controller/request.rb +5 -2
  31. data/lib/mack/controller/uploaded_file.rb +4 -0
  32. data/lib/mack/core_extensions/kernel.rb +26 -0
  33. data/lib/mack/core_extensions/object.rb +16 -0
  34. data/lib/mack/generators/mack_application_generator/manifest.yml +5 -3
  35. data/lib/mack/generators/mack_application_generator/templates/config/initializers/portlets.rb.template +9 -0
  36. data/lib/mack/generators/mack_application_generator/templates/public/stylesheets/scaffold.css.template +4 -0
  37. data/lib/mack/generators/portlet_generator/portlet_generator.rb +2 -0
  38. data/lib/mack/generators/portlet_generator/templates/README.template +3 -0
  39. data/lib/mack/generators/portlet_generator/templates/portlet_config/portlet.spec.template +28 -0
  40. data/lib/mack/portlets/manager.rb +27 -0
  41. data/lib/mack/portlets/portlet.rb +93 -0
  42. data/lib/mack/portlets/unpacker.rb +34 -0
  43. data/lib/mack/rendering/engine/erubis.rb +2 -2
  44. data/lib/mack/rendering/type/file_base.rb +8 -4
  45. data/lib/mack/rendering/type/public.rb +4 -2
  46. data/lib/mack/routing/resource_proxy.rb +30 -4
  47. data/lib/mack/routing/route_map.rb +28 -15
  48. data/lib/mack/routing/route_object.rb +57 -24
  49. data/lib/mack/routing/urls.rb +12 -2
  50. data/lib/mack/runner.rb +6 -154
  51. data/lib/mack/sessions/cookie_session_store.rb +2 -1
  52. data/lib/mack/tasks/mack_dump_tasks.rake +62 -18
  53. data/lib/mack/tasks/mack_tasks.rake +1 -15
  54. data/lib/mack/tasks/portlet_tasks.rake +33 -0
  55. data/lib/mack/tasks/rake_rules.rake +6 -0
  56. data/lib/mack/tasks/test_tasks.rake +4 -6
  57. data/lib/mack/testing/helpers.rb +12 -4
  58. data/lib/mack/utils/server.rb +7 -1
  59. data/lib/mack/utils/static.rb +19 -0
  60. data/lib/mack/version.rb +1 -1
  61. data/lib/mack/view_helpers/all_helpers.rb +0 -8
  62. data/lib/mack/view_helpers/date_time_helpers.rb +18 -12
  63. data/lib/mack/view_helpers/form_helpers.rb +9 -0
  64. data/lib/mack/view_helpers/html_helpers.rb +18 -7
  65. data/lib/mack/view_helpers/link_helpers.rb +2 -1
  66. data/lib/mack/view_helpers/object_helpers.rb +1 -1
  67. data/lib/mack_app.rb +26 -14
  68. data/lib/mack_core.rb +50 -39
  69. data/lib/mack_tasks.rb +46 -19
  70. metadata +37 -18
  71. data/lib/mack/initialization/application.rb +0 -53
  72. data/lib/mack/initialization/boot_loader.rb +0 -72
  73. data/lib/mack/initialization/configuration.rb +0 -101
  74. data/lib/mack/initialization/console.rb +0 -29
  75. data/lib/mack/initialization/environment.rb +0 -16
  76. data/lib/mack/initialization/plugins.rb +0 -16
  77. data/lib/mack/initialization/server/simple_server.rb +0 -19
  78. data/lib/mack/tasks/mack_server_tasks.rake +0 -24
  79. 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.options[:host].downcase == host
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
- connect_with_name("#{controller}_index", "/#{controller}", {:controller => controller, :action => :index, :method => :get})
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
- private
131
- def connect_with_name(name, path, options = {}, &block)
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
- build_regex_pattern
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.regex_pattern)
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
- if self.embedded_parameters.any?
41
- url.split('/').each_with_index do |seg, i|
42
- ep = self.embedded_parameters[i]
43
- unless ep.nil?
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.regex_pattern).captures
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
- def build_regex_pattern
60
- if self.path.is_a?(Regexp)
61
- self.regex_pattern = self.path
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 self.path == '/'
65
- self.regex_pattern = /^\/$/
97
+ if path == '/'
98
+ self.regex_patterns[name] = /^\/$/
66
99
  else
67
- self.path.split('/').each_with_index do |seg, i|
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.regex_pattern = /^#{reg.join('/') + '(\..+$|$)'}/
111
+ self.regex_patterns[name] = /^#{reg.join(splitter) + '(\..+$|$)'}/
79
112
  end
80
113
  else
81
- raise ArgumentError.new("'#{self.path}' is a #{self.path.class} and it should be either a String or Regexp!")
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
 
@@ -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
@@ -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
- # This is the heart and soul of the Mack framework! This class interfaces with the Rack framework.
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
- self.response.controller = c
95
- return self.response.write(c.run)
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
- c.delete(id)
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
- routes.each do |r|
18
- # pp r.inspect
19
- pat = r.original_pattern.blank? ? '/' : r.original_pattern
20
- pat << "(.:format)"
21
- opts = r.options.dup
22
- meth = opts[:method]
23
- opts.delete(:method)
24
- puts "#{pat.rjust(50)}\t#{meth.to_s.upcase}\t#{opts.inspect.ljust(0)}"
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.sort.each do |meth|
32
- unless meth.match(/(full|droute)_url$/)
33
- puts "#{meth.rjust(50)}\t#{self.send(meth)}"
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
- puts ""
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"