Class: Usher::Util::Generators::URL
- Inherits:
-
Object
- Object
- Usher::Util::Generators::URL
- Defined in:
- lib/usher/util/generate.rb
Instance Attribute Summary collapse
-
#usher ⇒ Object
Returns the value of attribute usher.
Instance Method Summary collapse
- #generate(routing_lookup, params = nil) ⇒ Object
- #generate_full(routing_lookup, request, params = nil) ⇒ Object
-
#generate_path(path, params = nil) ⇒ Object
Generates a completed URL based on a
route
or set of optionalparams
set = Usher.new route = set.add_named_route(:test_route, ‘/:controller/:action’) set.generate_url(nil, => ‘c’, :action => ‘a’) == ‘/c/a’ => true set.generate_url(:test_route, => ‘c’, :action => ‘a’) == ‘/c/a’ => true set.generate_url(route.primary_path, => ‘c’, :action => ‘a’) == ‘/c/a’ => true. - #generate_start(path, request) ⇒ Object
- #path_for_routing_lookup(routing_lookup, params = {}) ⇒ Object
Instance Attribute Details
#usher ⇒ Object
Returns the value of attribute usher.
32 33 34 |
# File 'lib/usher/util/generate.rb', line 32 def usher @usher end |
Instance Method Details
#generate(routing_lookup, params = nil) ⇒ Object
40 41 42 |
# File 'lib/usher/util/generate.rb', line 40 def generate(routing_lookup, params = nil) generate_path(path_for_routing_lookup(routing_lookup, params), params) end |
#generate_full(routing_lookup, request, params = nil) ⇒ Object
34 35 36 37 38 |
# File 'lib/usher/util/generate.rb', line 34 def generate_full(routing_lookup, request, params = nil) path = path_for_routing_lookup(routing_lookup, params) result = generate_start(path, request) result << generate_path(path, params) end |
#generate_path(path, params = nil) ⇒ Object
Generates a completed URL based on a route
or set of optional params
set = Usher.new
route = set.add_named_route(:test_route, '/:controller/:action')
set.generate_url(nil, {:controller => 'c', :action => 'a'}) == '/c/a' => true
set.generate_url(:test_route, {:controller => 'c', :action => 'a'}) == '/c/a' => true
set.generate_url(route.primary_path, {:controller => 'c', :action => 'a'}) == '/c/a' => true
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/usher/util/generate.rb', line 78 def generate_path(path, params = nil) raise UnrecognizedException.new unless path params = Array(params) if params.is_a?(String) if params.is_a?(Array) given_size = params.size extra_params = params.last.is_a?(Hash) ? params.pop : nil params = Hash[*path.dynamic_parts.inject([]){|a, dynamic_part| a.concat([dynamic_part.name, params.shift || raise(MissingParameterException.new("got #{given_size}, expected #{path.dynamic_parts.size} parameters"))]); a}] params.merge!(extra_params) if extra_params end result = '' path.parts.each do |part| case part when Route::Variable::Glob value = (params && params.delete(part.name)) || part.default_value || raise(MissingParameterException.new) value.each_with_index do |current_value, index| part.valid!(current_value) result << current_value.to_s result << '/' if index != value.size - 1 end when Route::Variable value = (params && params.delete(part.name)) || part.default_value || raise(MissingParameterException.new) part.valid!(value) result << value.to_s else result << part end end result = Rack::Utils.uri_escape(result) unless params.nil? || params.empty? has_query = result[??] params.each do |k,v| case v when Array v.each do |v_part| result << (has_query ? '&' : has_query = true && '?') << Rack::Utils.escape("#{k.to_s}[]") << '=' << Rack::Utils.escape(v_part.to_s) end else result << (has_query ? '&' : has_query = true && '?') << Rack::Utils.escape(k.to_s) << '=' << Rack::Utils.escape(v.to_s) end end end result end |
#generate_start(path, request) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/usher/util/generate.rb', line 44 def generate_start(path, request) result = (path.route.generate_with && path.route.generate_with.scheme || request.scheme).dup result << '://' result << (path.route.generate_with && path.route.generate_with.host) ? path.route.generate_with.host : request.host port = path.route.generate_with && path.route.generate_with.port || request.port if result[4] == ?s result << ':' << port.to_s unless port == 443 else result << ':' << port.to_s unless port == 80 end result end |
#path_for_routing_lookup(routing_lookup, params = {}) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/usher/util/generate.rb', line 57 def path_for_routing_lookup(routing_lookup, params = {}) path = case routing_lookup when Symbol route = @usher.named_routes[routing_lookup] route.find_matching_path(params || {}) when Route routing_lookup.find_matching_path(params || {}) when nil params.is_a?(Hash) ? @usher.(params) : raise when Route::Path routing_lookup end end |