Class: Usher::Util::Generators::URL
Defined Under Namespace
Classes: UrlParts
Instance Attribute Summary
Attributes inherited from Generic
#usher
Instance Method Summary
collapse
Methods inherited from Generic
#generate_path_for_base_params, #generate_path_for_base_params_with_array, #generate_path_for_base_params_with_hash
Constructor Details
#initialize ⇒ URL
Returns a new instance of URL.
77
78
79
|
# File 'lib/usher/util/generate.rb', line 77
def initialize
require File.join('usher', 'util', 'rack-mixins')
end
|
Instance Method Details
#build_module! ⇒ Object
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
# File 'lib/usher/util/generate.rb', line 134
def build_module!
unless @generation_module
@generation_module = Module.new
@generation_module.module_eval <<-END_EVAL
@@generator = nil
def self.generator=(generator)
@@generator = generator
end
END_EVAL
@generation_module.generator = self
@generation_module.module_eval <<-END_EVAL
def respond_to?(method_name)
if method_name =~ /^(.*?)_(path|url)$/
@@generator.usher.named_routes.key?($1)
else
super
end
end
END_EVAL
usher.named_routes.each do |name, route|
@generation_module.module_eval <<-END_EVAL
def #{name}_url(options={})
@@generator.generate_full('#{name}'.to_sym, request, options)
end
def #{name}_path(options={})
@@generator.generate('#{name}'.to_sym, options)
end
END_EVAL
end
end
end
|
#generate(routing_lookup, 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.generator.generate(nil, {:controller => 'c', :action => 'a'}) == '/c/a' => true
set.generator.generate(:test_route, {:controller => 'c', :action => 'a'}) == '/c/a' => true
set.generator.generate(route.primary_path, {:controller => 'c', :action => 'a'}) == '/c/a' => true
95
96
97
|
# File 'lib/usher/util/generate.rb', line 95
def generate(routing_lookup, params = nil)
generate_path(path_for_routing_lookup(routing_lookup, params), params)
end
|
#generate_base_url(params = nil) ⇒ Object
170
171
172
173
174
175
176
177
178
|
# File 'lib/usher/util/generate.rb', line 170
def generate_base_url(params = nil)
if usher.parent_route
usher.parent_route.router.generator.generate_path(usher.parent_route.paths.first, params, false)
elsif params && params.key?(:default)
params[:default].to_s
else
'/'
end
end
|
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
|
# File 'lib/usher/util/generate.rb', line 203
def (params)
= ''
params.each do |k,v|
case v
when Array
v.each do |v_part|
<< '&' unless .empty?
<< Rack::Utils.escape("#{k.to_s}[]") << '=' << Rack::Utils.escape(v_part.to_s)
end
else
<< '&' unless .empty?
<< Rack::Utils.escape(k.to_s) << '=' << Rack::Utils.escape(v.to_s)
end
end
end
|
#generate_full(routing_lookup, request, params = nil) ⇒ Object
81
82
83
84
85
86
|
# File 'lib/usher/util/generate.rb', line 81
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, generate_extra = true) ⇒ Object
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
124
125
126
127
|
# File 'lib/usher/util/generate.rb', line 99
def generate_path(path, params = nil, = true)
params = Array(params) if params.is_a?(String)
= nil
case params
when nil
params = path && path.route.default_values
when Hash
params = path.route.default_values.merge(params) if path && path.route.default_values
else
params = Array(params)
= params.last.is_a?(Hash) ? params.pop : nil
raise MissingParameterException.new("got #{params.size}, expected #{path.dynamic_parts.size} parameters") unless path.dynamic_parts.size == params.size
end
result = generate_path_for_base_params(path, params)
Rack::Utils.uri_escape!(result)
params = if
unless ! || params.nil? || params.empty?
if usher.consider_destination_keys? && path.route.destination_keys
params.delete_if{|k, v| path.route.destination_keys.include?(k)}
end
unless params.empty?
result << '?' unless result[??]
result << (params)
end
end
result
end
|
#generate_start(path, request) ⇒ Object
180
181
182
183
184
185
|
# File 'lib/usher/util/generate.rb', line 180
def generate_start(path, request)
url_parts = UrlParts.new(path, request)
url = url_parts.url
(url[-1] == ?/) ? url[0..-2] : url
end
|
#generation_module ⇒ Object
129
130
131
132
|
# File 'lib/usher/util/generate.rb', line 129
def generation_module
build_module!
@generation_module
end
|
#path_for_routing_lookup(routing_lookup, params = {}) ⇒ Object
187
188
189
190
191
192
193
194
195
196
197
198
199
200
|
# File 'lib/usher/util/generate.rb', line 187
def path_for_routing_lookup(routing_lookup, params = {})
path = case routing_lookup
when Route::Path
routing_lookup
when Symbol
route = @usher.named_routes[routing_lookup]
raise UnrecognizedException unless route
route.find_matching_path(params || {})
when Route
routing_lookup.find_matching_path(params)
when nil
params.is_a?(Hash) ? usher.path_for_options(params) : raise
end
end
|