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