Да кажем, че имам просто приложение Ruby, където искам първият аргумент (ако има такъв) да указва средата: TEST
, DEVELOPMENT
или PRODUCTION
(като DEVELOPMENT
е по подразбиране, ако не е даден аргумент). Например,
ruby myapp.rb test
ще го стартира в режим TEST
. Също така трябва да се приемат стенографии, така че напр
ruby myapp.rb t
ще стартира приложението в режим TEST
и
ruby myapp.rb dev
ще го стартира в режим DEVELOPMENT
.
Бих искал да използвам OptionParser, но се държи много странно. Ако myapp.rb е
require 'optparse'
environment = 'DEVELOPMENT'
opts = OptionParser.new
opts.on('test') { environment = 'TEST' }
opts.on('production') { environment = 'PRODUCTION' }
opts.parse!(ARGV)
тогава среда става PRODUCTION
без значение какви аргументи подавам; по някаква причина opts.on('production')
винаги изпълнява своя блок. (Не става, ако вместо това използвам низ в стил флаг като '-production'
.) И няма начин да видя OptionParser да търси низове, започващи с 't', а не точния низ 'test'.
Може би OptionParser е грешният инструмент за работата. Очевидно би било тривиално да разделя ARGV сам. Просто се чудя какво се случва с това поведение. Аз съм на Ruby 1.9.2.