2013-05-23 24 views
11

Các mã bên dưới công trình, nhưng tôi tự nâng lỗi lập luận cho các đối số cần sử dụng fetch, khi tôi muốn xây dựng các đối số cần thiết vào sytax OptionParser mẹ đẻ cho các thông số yêu cầu:Làm thế nào để tạo ra OptionParser yêu cầu đối số

# ocra script.rb -- --type=value 
options = {} 
OptionParser.new do |opts| 
    opts.banner = "Usage: example.rb [options]" 

    opts.on("--type [TYPE]",String, [:gl, :time], "Select Exception file type (gl, time)") do |t| 
    options["type"] = t 
    end 

    opts.on("--company [TYPE]",String, [:jaxon, :doric], "Select Company (jaxon, doric)") do |t| 
    options["company"] = t 
    end 

end.parse! 

opts = {} 
opts['type'] = options.fetch('type') do 
    raise ArgumentError,"no 'type' option specified as a parameter (gl or time)" 
end 

opts['company'] = options.fetch('company') do 
    raise ArgumentError,"no 'company' option specified as a parameter (doric or jaxon)" 
end 

Trả lời

8

có một câu hỏi tương tự với một câu trả lời có thể giúp bạn: "How do you specify a required switch (not argument) with Ruby OptionParser?"

Nói tóm lại: có dường như không thể là một cách để làm cho một lựa chọn cần thiết (chúng được gọi là tùy chọn sau khi tất cả).

Có một ngoại lệ OptionParser::MissingArgument mà bạn có thể tăng thay vì số ArgumentError bạn hiện đang ném.

+0

Tôi đã quyết định sử dụng đá quý ruby ​​có tên https://github.com/JEG2/highline này có một trình đơn cli dsl và các thông số bắt buộc. – lukemh

+1

Công việc hay. Một đồng nghiệp của tôi cũng đã viết một viên ngọc được gọi là hộ tống có thể thiết lập các thông số cần thiết cho các ứng dụng CLI: https://github.com/skorks/escort#required-arguments –

Các vấn đề liên quan