lib/usher/interface/rails23.rb in usher-0.6.3 vs lib/usher/interface/rails23.rb in usher-0.6.4
- old
+ new
@@ -1,54 +1,54 @@
class Usher
module Interface
class Rails23
-
+
attr_reader :configuration_files
-
+
def named_routes
@router.named_routes
end
-
+
def add_named_route(name, route, options = {})
@router.add_route(route, options).name(name)
end
def add_route(path, options = {})
if !@controller_action_route_added && path =~ %r{^/?:controller/:action/:id$}
add_route('/:controller/:action', options.dup)
- @controller_action_route_added = true
+ @controller_action_route_added = true
end
if !@controller_route_added && path =~ %r{^/?:controller/:action$}
add_route('/:controller', options.merge({:action => 'index'}))
- @controller_route_added = true
+ @controller_route_added = true
end
-
+
options[:action] = 'index' unless options[:action]
path[0, 0] = '/' unless path[0] == ?/
route = @router.add_route(path, options).to(options)
-
+
raise "your route must include a controller" unless (route.paths.first.dynamic_keys && route.paths.first.dynamic_keys.include?(:controller)) || route.destination.include?(:controller)
route
end
-
+
def initialize
reset!
end
-
+
def add_configuration_file(file)
@configuration_files << file
end
-
+
def reload!
if configuration_files.any?
configuration_files.each { |config| load(config) }
else
add_route ":controller/:action/:id"
end
-
+
end
alias_method :reload, :reload!
def route_count
routes.size
@@ -61,77 +61,76 @@
def call(env)
request = ActionController::Request.new(env)
app = recognize(request)
app.call(env).to_a
end
-
+
def recognize(request)
response = @router.recognize(request)
- request.path_parameters = (response.params.empty? ? response.path.route.destination : response.path.route.destination.merge(response.params.inject({}){|h,(k,v)| h[k]=v; h })).with_indifferent_access
- response.params.each { |pair| request.path_parameters[pair.first] = pair.last }
+ request.path_parameters.merge!(response.params_as_hash)
"#{request.path_parameters[:controller].camelize}Controller".constantize
end
-
+
def reset!(options={})
options[:generator] = options[:generator] || Usher::Util::Generators::URL.new
options[:request_methods] = options[:request_methods] || [:protocol, :domain, :port, :query_string, :remote_ip, :user_agent, :referer, :method, :subdomains]
-
+
@router = Usher.new(options)
@configuration_files = []
@module ||= Module.new
@controller_route_added = false
@controller_action_route_added = false
end
-
+
def draw(options={})
reset!(options)
yield ActionController::Routing::RouteSet::Mapper.new(self)
install_helpers
end
-
+
def install_helpers(destinations = [ActionController::Base, ActionView::Base], regenerate_code = false)
#*_url and hash_for_*_url
- Array(destinations).each do |d| d.module_eval { include Helpers }
+ Array(destinations).each do |d| d.module_eval { include Helpers }
@router.named_routes.keys.each do |name|
@module.module_eval <<-end_eval # We use module_eval to avoid leaks
- def #{name}_url(options = {})
- ActionController::Routing::UsherRoutes.generate(options, {}, :generate, :#{name})
- end
- end_eval
- end
- d.__send__(:include, @module)
- end
- end
+ def #{name}_url(options = {})
+ ActionController::Routing::UsherRoutes.generate(options, {}, :generate, :#{name})
+ end
+ end_eval
+ end
+ d.__send__(:include, @module)
+ end
+ end
- def generate(options, recall = {}, method = :generate, route_name = nil)
- route = if(route_name)
- @router.named_routes[route_name]
- else
- merged_options = options
- merged_options[:controller] = recall[:controller] unless options.key?(:controller)
- unless options.key?(:action)
- options[:action] = ''
- end
- path_for_options(merged_options)
- end
- case method
- when :generate
- merged_options ||= recall.merge(options)
- url = generate_url(route, merged_options)
- url.slice!(-1) if url[-1] == ?/
- url
- else
- raise "method #{method} not recognized"
- end
- end
-
- def generate_url(route, params)
- @router.generator.generate(route, params)
- end
-
- def path_for_options(options)
- @router.path_for_options(options)
- end
-
- end
- end
-end
+ def generate(options, recall = {}, method = :generate, route_name = nil)
+ route = if(route_name)
+ @router.named_routes[route_name]
+ else
+ merged_options = options
+ merged_options[:controller] = recall[:controller] unless options.key?(:controller)
+ unless options.key?(:action)
+ options[:action] = ''
+ end
+ path_for_options(merged_options)
+ end
+ case method
+ when :generate
+ merged_options ||= recall.merge(options)
+ url = generate_url(route, merged_options)
+ url.slice!(-1) if url[-1] == ?/
+ url
+ else
+ raise "method #{method} not recognized"
+ end
+ end
+
+ def generate_url(route, params)
+ @router.generator.generate(route, params)
+ end
+
+ def path_for_options(options)
+ @router.path_for_options(options)
+ end
+
+ end
+ end
+ end