ארכיון יומי: 2 נובמבר, 2011

ניתוח שורת פקודה ברובי

הכותרת קצת מטעה, אבל כאשר כותבים תוכנות בעיקר בעולם היוניקס, נהוג לתת אפשרויות בשורת הפקודה לתכנה. הבעיה היא כיצד ניתן לנתח את מה שעובר, ולשם כך רובי מגיעה עם ספרייה פשוטה בשם optparse המגיעה כספרייה סטנדרטית ברובי.

העבודה בה מאד פשוטה ומחביאה הרבה מאוד כוח נסתר. תכנית מאוד פשוטה המשתמשת בה, תראה כזו:

#!/usr/bin/env ruby
require 'optparse'

VERSION = '99.1b'

# default values for options ...
options = { :path => '', :number => 0, :uri => nil}

parse = OptionParser.new do|opt|
  opt.banner = 'Usage: my_app.rb  [option] [option]'
  opt.on('-v', '--version', 'Display the program version') do
    puts "my_app.rb v#{VERSION}"
  end
  opt.on('-p PATH', '--path=PATH', 'What path to use ?') do |path|
    option[:path] = path
  end
  opt.on('-n=NUM', '--number NUM', Fixnum, 'Use numbers only') do |num|
    option[:number] = num
  end
  opt.on('--uri URI', 'Mandatory field') do |uri|
    option[:uri] = uri
  end
  opt.on('-h', '--help', 'Display this screen') do
    puts opt
    exit
  end
end

begin
 parse.parse!
 raise OptionParser::MissingArgument if options[:uri].nil? # mandatory fields
rescue => e
  $stderr.puts "You did not supply proper values: #{e.message}"
end

ההדגמה מבצעת מספר דברים אשר מראים את הכוח העצום של הספרייה ואת רוב היכולות שלה. אני מציג כיצד ניתן לקבל פרמטר צורך בערך. אני מציג כיצד ניתן להגיד איך לפרש פרמטר מול ערך (כלומר המפריד הוא רווח, הסימן = וכו'), אני מראה כיצד מציגים עזרה על הפרמטרים השונים, אני מציג כיצד להכריח את המפרש לקבל מספר שלם, ואני אפילו מתעסק במצב בו יש פרמטר שהוא חובה, אבל לא קיבלנו אותו.