Skip to content

Instantly share code, notes, and snippets.

@jherdman
Forked from carllerche/gist:96282
Created April 16, 2009 16:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jherdman/96519 to your computer and use it in GitHub Desktop.
Save jherdman/96519 to your computer and use it in GitHub Desktop.
def generate(params, defaults = {})
param_or_default = lambda { |p, d, k| (p[k] || d[k]).to_s }
matches = lambda { |v| v =~ /^(?-mix:[^\/.,;?]+)$/ }
v_controller = param_or_default.call(params, defaults, :controller)
v_action = param_or_default.call(params, defaults, :action)
v_id = param_or_default.call(params, defaults, :id)
unless matches.call(v_controller)
raise ArgumentError, "Condition cannot be generated with #{params.inspect}"
end
path = "/#{v_controller}"
if params[:action] || params[:id] && matches.call(v_action)
path << "/#{v_action}"
path << "/#{v_id}" if matches.call(params[:id] && v_id)
end
return path
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment