Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

สำรวจภายใน Ruby Gems: คู่มือสำหรับ Developers

ตอนสร้าง Rails apps คุณ用 gems เยอะ บางอันดู magical! แต magic นั้นมายังไง?

ใน gems ส่วนใหญ่ ไม่มีอะไรที่พวกเขาทำที่คุณทำไม่ได้ มันแค่ Ruby code บางทีเป็น Ruby code ซับซ้อน แตถ้าสำรวจโค้ด คุณจะเริ่มเข้าใจที่มาของ magic

หา Source Code

เข้าใจ gem ต้องหาโค้ดก่อน

ถ้ามี method อยากรู้เพิ่ม มีวิธีหา source ง่าย: method และ source_location ผมเขียนเกี่ยวกับนี้ไปก่อนหน้านี้ ตัวอย่าง:

irb(main):001:0> ActiveRecord::Base.method(:find).source_location => ["/usr/local/lib/ruby/gems/2.1.0/gems/ activerecord-4.2.0.beta4/lib/active_record/core.rb", 127]

แตถ้าสนใจหลาย methods?

ถ้ามี console เปิดใน Rails app directory ไปที่ gem code ได้เลย:

~/Source/gem_example[master] jweiss$ bundle open rack

ถ้าอยู่ใน Gemfile bundle open rack จะเปิด rack gem ทั้งหมดใน editor browse ไฟล์ทั้งหมดได้สบาย

เริ่มที่ไหน?

ตอนรู้ gem code อยู่ที่ไหน เริ่มเข้าใจยังไง?

ลองเข้าใจ activerecord โดยอ่าน lib/active_record.rb จะไม่ไปไหน จะเจอแค่ autoloads และ requires

เข้าใจ gem ง่ายที่สุด หลัง app 用มันไปแล้ว พอรู้ว่า gem ทำงานอะไรให้ คุณจะมี idea เรื่อง classes และ methods ที่น่าสนใจควรเริ่มที่ไหน

พอมีชื่อ methods น่าสนใจ 用 source_location, Find in Project ใน editor, หรือ ag บน command line หาว่า methods ถูก define ที่ไหน และนั่นคือจุดเริ่มความสนุก

Gem code อยู่บนเครื่องคุณ หมายความว่าคุณเปลี่ยนมันได้อย่างไรก็ตาม! แตกมันได้ และ никтоไม่ต้องรู้

ตอนพยายามเข้าใจ gem ผมไม่อ่านโค้ดอย่างเดียว ใส่ puts statements ลงไปใน gem, โยน exceptions หาว่า app มาถึงบรรทัดไหนได้ยังไง และเล่นกับโค้ดเพื่อเข้าใจว่าทำไม author ถึงเขียนแบบนั้น

พอรู้ trick แล้ว มัน magical น้อยลง และไม่ต้อง เดา ว่าโค้ดจะ behave ยังไงในสถานการณ์แปลก เพราะเห็นได้เอง

ทำความสะอาดหลังเล่น

หลังเล่นกับ gem code app อาจสภาพแย่ อาจรันไม่ได้! และแม้รันได้ ก็จะ spam puts statements ที่เพิ่มเข้าไปใน console

แต RubyGems มีวิธีเร็วคืนสภาพปกติ:

~ jweiss$ gem pristine activerecord -v 4.2.0 Restoring gems to pristine condition... Restored activerecord-4.2.0

หรือถ้าไม่จำว่า/gems ไหนเล่น และ терทolerance สูง:

~ jweiss$ gem pristine --all

หลังนั้น gems ทั้งหมดกลับสู่ตอนติดตั้ง

จะสำรวจอะไร?

ตอนหา อ่าน และสำรวจ code ภายใน gems คุณจะเข้าใจ code ที่พึ่งพา ในระดับลึกขึ้น และไม่ต้องพึ่ง assumptions และ guesses

โพสต์นี้ส่งให้ list เท่านั้นเดิม สมัครรับ posts เหล่านี้ทุกวันศุกร์ได้ที่นี่!