def program(key, *args, &block)
      if key == :help && !args.empty?
        @program[:help] ||= {}
        @program[:help][args.first] = args.at(1)
      elsif key == :help_formatter && !args.empty?
        @program[key] = (@help_formatter_aliases[args.first] || args.first)
      elsif block
        @program[key] = block
      else
        unless args.empty?
          @program[key] = args.count == 1 ? args[0] : args
        end
        @program[key]
      end
    end
def program(key, *args, &block)
      if key == :help && !args.empty?
        @program[:help] ||= {}
        @program[:help][args.first] = args.at(1)
      elsif key == :help_formatter && !args.empty?
        @program[key] = (@help_formatter_aliases[args.first] || args.first)
      elsif block
        @program[key] = block
      else
        unless args.empty?
          @program[key] = args.count == 1 ? args[0] : args
        end
        @program[key]
      end
    end
Assign program information.

 === Examples

   # Set data
   program :name, 'Commander'
   program :version, Commander::VERSION
   program :description, 'Commander utility program.'
   program :help, 'Copyright', '2008 TJ Holowaychuk'
   program :help, 'Anything', 'You want'
   program :int_message 'Bye bye!'
   program :help_formatter, :compact
   program :help_formatter, Commander::HelpFormatter::TerminalCompact

   # Get data
   program :name # => 'Commander'

 === Keys

   :version         (required) Program version triple, ex: '0.0.1'
   :description     (required) Program description
   :name            Program name, defaults to basename of executable
   :help_formatter  Defaults to Commander::HelpFormatter::Terminal
   :help            Allows addition of arbitrary global help blocks
   :help_paging     Flag for toggling help paging
   :int_message     Message to display when interrupted (CTRL + C)