I took a different approach. Since you have access to the ENV object I
added a few helpers

def menu(variable,options)
  Capistrano::CLI.ui.choose do |menu|
    options.each {|c| menu.choice(c)}
    menu.header = "( ? ) Select #{variable.to_s}"
  end
end

def env_or_menu(variable,options)
  value = if ENV[variable.to_s].nil?
    Capistrano::CLI.ui.choose do |menu|
      options.each {|c| menu.choice(c)}
      menu.header = "( ? ) Select #{variable.to_s}"
    end
  else
    if ENV[variable.to_s] == /^:/
      ENV[variable.to_s].to_sym
    else
      ENV[variable.to_s].to_s
    end
  end
  yield(value) if block_given?
  return value
end

def env_or_ask(variable,question)
  value = if ENV[variable.to_s].nil?
    Capistrano::CLI.ui.ask(question)
  else
    if ENV[variable.to_s] == /^:/
      ENV[variable.to_s].to_sym
    else
      ENV[variable.to_s].to_s
    end
  end
  yield(value) if block_given?
  return value
end

def env_or_set(variable,value)
  value = if ENV[variable.to_s].nil?
    value
  else
    if ENV[variable.to_s] == /^:/
      ENV[variable.to_s].to_sym
    else
      ENV[variable.to_s].to_s
    end
  end
  yield(value) if block_given?
  return value
end

def set_ask_menu(variable,options)
  set(variable) do
    env_or_menu(variable,options) do |value|
      yield(value) if block_given?
    end
  end
end

def set_ask(variable,question)
  set(variable) do
    env_or_ask(variable,question) do |value|
      yield(value) if block_given?
    end
  end
end

With those you can do things like

env_or_set(:some_variable, "some_default_value")

if you provide it it'll use it, otherwise it'll use the default.
e.g.

cap task some_variable=custom_value

or

env_or_menu(:some_variable, ["option1","option2","option3"])
will take the environment or provide a menu.


On Mar 8, 6:46 pm, "S. Robert James" <[email protected]> wrote:
> Is there a standard Capistrano idiom for passing in, and parsing, user
> defined parameters from the command line? I know vars can be set using
> -S.  But I'd like more: supporting boolean switches, or switches with
> a default val. If I was writing my own script, I'd use OptionParser or
> the like - what's the preferred Capistrano way to do this?
>
> Along similar lines, is there a standard idiom for a task to take a
> parameter, or return a result?  I could hack this with a global
> variable, but I'd like to find a preferred way.
--~--~---------~--~----~------------~-------~--~----~
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at http://groups.google.com/group/capistrano
-~----------~----~----~----~------~----~------~--~---

Reply via email to