lib/usher/util/generate.rb in usher-0.7.1 vs lib/usher/util/generate.rb in usher-0.7.2
- old
+ new
@@ -10,48 +10,64 @@
generate_path_for_base_params(@usher.named_routes[name].find_matching_path(params), params)
end
def generate_path_for_base_params(path, params)
raise UnrecognizedException.new unless path
- result = ''
-
case params
when nil, Hash
- path.parts.each do |part|
- case part
- when String
- result << part
- when Route::Variable::Glob
- value = (params && params.delete(part.name)) || part.default_value || raise(MissingParameterException.new("expected a value for #{part.name}"))
- value.each_with_index do |current_value, index|
- part.valid!(current_value)
- result << current_value.to_s
- result << usher.delimiters.first if index != value.size - 1
- end
- when Route::Variable
- value = (params && params.delete(part.name)) || part.default_value || raise(MissingParameterException.new("expected a value for #{part.name}"))
- part.valid!(value)
- result << value.to_s
+ generate_path_for_base_params_with_hash(path, params)
+ else
+ generate_path_for_base_params_with_array(path, Array(params))
+ end
+ end
+
+ def generate_path_for_base_params_with_hash(path, params)
+ result = ''
+ path.parts.each do |part|
+ case part
+ when String
+ result << part
+ when Route::Variable::Glob
+ value = (params && params.delete(part.name)) || part.default_value || raise(MissingParameterException.new("expected a value for #{part.name}"))
+ value.each_with_index do |current_value, index|
+ part.valid!(current_value)
+ result << current_value.to_s
+ result << usher.delimiters.first if index != value.size - 1
end
+ when Route::Variable
+ value = (params && params.delete(part.name)) || part.default_value || raise(MissingParameterException.new("expected a value for #{part.name}"))
+ part.valid!(value)
+ result << value.to_s
+ when Route::Static::Greedy
+ result << part.generate_with
+ else
+ raise
end
- else
- params = Array(params)
- path.parts.each do |part|
- case part
- when String
- result << part
- when Route::Variable::Glob
- value = (params && params.shift) || part.default_value || raise(MissingParameterException.new)
- value.each_with_index do |current_value, index|
- part.valid!(current_value)
- result << current_value.to_s
- result << usher.delimiters.first if index != value.size - 1
- end
- when Route::Variable
- value = (params && params.shift) || part.default_value || raise(MissingParameterException.new)
- part.valid!(value)
- result << value.to_s
+ end
+ result
+ end
+
+ def generate_path_for_base_params_with_array(path, params)
+ result = ''
+ path.parts.each do |part|
+ case part
+ when String
+ result << part
+ when Route::Variable::Glob
+ value = (params && params.shift) || part.default_value || raise(MissingParameterException.new)
+ value.each_with_index do |current_value, index|
+ part.valid!(current_value)
+ result << current_value.to_s
+ result << usher.delimiters.first if index != value.size - 1
end
+ when Route::Variable
+ value = (params && params.shift) || part.default_value || raise(MissingParameterException.new)
+ part.valid!(value)
+ result << value.to_s
+ when Route::Static::Greedy
+ result << value.generate_with
+ else
+ raise
end
end
result
end