2016-07-05 3 views
0

У меня есть инструмент, который я обновляю и нужно иметь аргумент требует еще один аргумент, например:Как использовать optparse иметь аргумент флагов требуется еще один аргумент

require 'optparse' 

OPTIONS = {} 

OptionParser.new do |opts| 
    opts.on('-t', '--type INPUT', String, 'Verify a type'){ |o| OPTIONS[:type] = o } 
end.parse! 

def help_page 
    puts 'ruby test.rb -t dev' 
end 

def gather_type 
    case OPTIONS[:type] 
    when /dev/ 
    unlock(OPTIONS[:type]) 
    else 
    help_page 
    end 
end 

def unlock(type) 
    if type == 'unlock' #Find out what type by passing argument another argument 
    puts 'Unlock account' 
    else 
    puts 'Reset account' 
    end 
end 

def start 
    case 
    when OPTIONS[:type] 
    gather_type 
    else 
    help_page 
    end 
end 

start 

Когда запускается вы получите следующее:

C:\Users\bin\ruby>ruby test.rb -t dev=unlock 
Reset account 
C:\Users\bin\ruby>ruby test.rb -t dev=reset 
Reset account 

Теперь, когда все хорошо и денди, но то, что я хочу сделать, это дать dev Часть аргумент и идти оттуда, чтобы решить, если это разблокировать или, если это сброс:

ruby test.rb -t dev=unlock ИЛИ ruby test.rb -t dev=reset

После того, что я хочу, чтобы метод unlock(type), чтобы определить, какой аргумент был дан аргумент флагов и вывести правильную информацию, так

C:\Users\bin\ruby>ruby test.rb -t dev=unlock 
Unlock account 

C:\Users\bin\ruby>ruby test.rb -t dev=reset 
Reset account 

Как я могу идти о, чтобы определить, является ли аргумент был учитывая аргумент флага?

ответ

0

Я понял, что если вы поместите параметры в скобках вы можете получить то, что я спрашиваю:

require 'optparse' 

OPTIONS = {} 

OptionParser.new do |opts| 
    opts.on('-t', '--type INPUT[=INPUT]', String, 'Verify a type'){ |o| OPTIONS[:type] = o } 
end.parse! 

def help_page 
    puts 'ruby test.rb -t dev' 
end 

def gather_type 
    case OPTIONS[:type] 
    when /dev/ 
    unlock(OPTIONS[:type]) 
    else 
    help_page 
    end 
end 

def unlock(type) 
    if type =~ /unlock/ #Find out what type by passing argument another argument 
    puts 'Unlock account' 
    elsif type =~ /reset/ 
    puts 'Reset account' 
    else 
    puts 'No flag given defaulting to unlock' 
    end 
end 

def start 
    case 
    when OPTIONS[:type] 
    gather_type 
    else 
    help_page 
    end 
end 

start 


C:\Users\bin\ruby>ruby test.rb -t dev 
No flag given defaulting to unlock 

C:\Users\bin\ruby>ruby test.rb -t dev=unlock 
Unlock account 

C:\Users\bin\ruby>ruby test.rb -t dev=reset 
Reset account 
Смежные вопросы