หลายคนลืมไปว่า Ruby สามารถทำสิ่งต่างๆ ที่ไม่ใช่เว็บแอปพลิเคชันได้ ในบทความนี้ ฉันต้องการแสดงวิธีสร้างแอปพลิเคชันบรรทัดคำสั่งเพื่อช่วยแก้ไขปัญหานั้น!
ต่อไปนี้คือแอปพลิเคชันบรรทัดคำสั่งที่คุณอาจคุ้นเคย:
psqlrailsbundlergemgit
มีหลายวิธีในการสร้างแอปพลิเคชันบรรทัดคำสั่ง และในบทความนี้เราจะพูดถึงสามวิธี
คุณจะได้เรียนรู้เกี่ยวกับ :
- อาร์เรย์ ARGV
- ห้องสมุด OptParse
- อัญมณีแห่งธอร์
เริ่มกันเลย!
ค่าคงที่ทับทิม ARGV
แอปพลิเคชันบรรทัดคำสั่งมักมีหลายตัวเลือกหรือ 'แฟล็ก'
ตัวอย่างเช่น :
psql --help
คุณจะเข้าถึงตัวเลือกเหล่านี้ใน Ruby ได้อย่างไร
การใช้ ARGV อาร์เรย์
หากคุณมีรหัสต่อไปนี้ในไฟล์ชื่อ argv.rb :
p ARGV
และถ้าคุณรันโค้ดนี้โดยใช้ ruby argv.rb test abc 1 2 3 คุณจะได้รับสิ่งนี้:
["test", "abc", "1", "2", "3"]
เป็นอาร์เรย์ที่มีตัวเลือกทั้งหมด!
คุณสามารถตรวจสอบว่าตัวเลือกใดถูกส่งผ่านหรือไม่โดยใช้ตัวแยกวิเคราะห์ตัวเลือก
นี่คือตัวอย่าง :
def process_argv(option)
case option
when "-h"
puts "This is the help menu."
puts " -v Enable verbose mode"
puts " -c Enable syntax highlighting"
exit
when "-v"
@options[:verbose] = true
when "-c"
@options[:syntax_highlighting] = true
end
end
@options = {}
ARGV.each { |option| process_argv(option) }
p @options
ถ้ารันแบบนี้ :
ruby argv.rb -v -c
คุณจะเห็น :
{:verbose=>true, :syntax_highlighting=>true}
วิธีนี้ใช้ได้กับเรื่องง่ายๆ แต่ถ้าคุณต้องการเขียนแอปพลิเคชันที่ใหญ่ขึ้น คุณอาจต้องพิจารณาวิธีแก้ปัญหาอื่นๆ
วิธีใช้ไลบรารีตัวแยกวิเคราะห์ตัวเลือก
Ruby มาพร้อมกับ OptionParser คลาสที่คุณสามารถใช้เพื่อแยกวิเคราะห์ตัวเลือกบรรทัดคำสั่ง
นี่คือตัวอย่าง :
require 'optparse'
@options = {}
OptionParser.new do |opts|
opts.on("-v", "--verbose", "Show extra information") do
@options[:verbose] = true
end
opts.on("-c", "--color", "Enable syntax highlighting") do
@options[:syntax_highlighting] = true
end
end.parse!
p @options
คุณจะได้รับประโยชน์หลายประการเมื่อใช้ optparse มากกว่าโซลูชันที่คุณกำหนดเอง
ตัวอย่างเช่น :
- คุณสามารถมี
-vสั้น ๆ ได้ &รุ่นยาว--verboseของทุกธงโดยไม่ต้องทำงานพิเศษ - ทุกตัวเลือกมีคำอธิบาย ซึ่งจะเป็นส่วนหนึ่งของเมนูช่วยเหลือ
- เมนูความช่วยเหลือถูกสร้างขึ้นโดยอัตโนมัติสำหรับคุณ คุณจึงไม่ต้องอัปเดตด้วยตนเองทุกครั้งที่เพิ่มหรือลบตัวเลือก
หน้าตาเมนูเป็นแบบนี้ :

ส่วนที่ดีที่สุด?
ทั้งหมดนี้สร้างขึ้นใน Ruby ดังนั้นจึงไม่มีอะไรต้องติดตั้ง!
วิธีใช้อัญมณีของธอร์
หากคุณกำลังมองหาแนวทางที่แตกต่างในการแยกวิเคราะห์ตัวเลือกคุณควรดูที่อัญมณี Thor นี่คือสิ่งที่ Rails ใช้
ใน Rails คุณทำสิ่งต่างๆ เช่น :
rails newrails generaterails console
เพื่อ (บางส่วน) สร้าง rails . ขึ้นใหม่ คำสั่งที่คุณสามารถทำสิ่งนี้:
require 'thor'
class RailsCLI < Thor
class_option :verbose, :type => :boolean, :aliases => "-v"
desc "new DIRECTORY", "Create a new rails app"
def new
# ...
end
desc "generate THING PARAMETERS", "Generate controller / model / migration"
def generate
# ...
end
desc "console", "Start a rails console"
def console
# ...
end
end
RailsCLI.start(ARGV)
เมนูช่วยเหลือมีลักษณะดังนี้ :

นี่เป็นรูปแบบที่แตกต่างกันมากเมื่อเทียบกับ OptionParser …
…และอาจไม่ใช่ตัวเลือกที่ดีที่สุดสำหรับแอปของคุณ หากทำสิ่งใดสิ่งหนึ่งโดยมีตัวเลือกตัวแปรไม่กี่อย่าง
แต่ถ้าคุณมีคำสั่งเช่น rails ซึ่งใช้สำหรับภารกิจต่าง ๆ มากมาย Thor เป็นตัวเลือกที่ยอดเยี่ยม!
ห้องสมุดการอ่านทับทิม
คุณต้องการสร้างแอปพลิเคชันด้วยอินเทอร์เฟซแบบโต้ตอบเช่น pry หรือ psql ?
ตรวจสอบ Readline โมดูลซึ่งช่วยให้คุณทำสิ่งนี้ได้
นี่คือตัวอย่าง :
prompt = "> "
while buf = Readline.readline(prompt, true)
puts "Your input was: '#{buf}'"
end
การดำเนินการนี้จะแจ้งให้คุณทราบ และสะท้อนกลับสิ่งที่คุณเขียนหลังจากกด Enter
คุณสามารถปิดโปรแกรมได้โดยกด CTRL+C .
Readline จะเก็บประวัติของทุกสิ่งที่คุณพิมพ์ และจะช่วยให้คุณค้นหาประวัติของคุณโดยใช้ ctrl+r , หรือ Readline::HISTORY.to_a ภายในโค้ดของคุณ
ด้วย Readline คุณยังสามารถใช้งานสิ่งต่างๆ เช่น การเติมข้อความอัตโนมัติ ดูตัวอย่างในลิงก์นี้
ชมวิดีโอการสอน
บทสรุป
แม้ว่าคุณจะเป็นคนประเภท GUI แต่แอปพลิเคชันบรรทัดคำสั่งก็มีประสิทธิภาพและสร้างความสนุกสนานได้มาก
ให้มันลอง &เริ่มสร้างของคุณเองวันนี้ 🙂