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

คู่มือการสกัดทับทิมอัญมณีแรกของคุณ

แผนภูมิสนับสนุน GitHub ของคุณเป็นสีเทาทึบหรือไม่ คุณสามารถใช้โครงการโอเพ่นซอร์สเพื่อทำงาน แต่คุณไม่จำเป็นต้องเริ่มต้นจากศูนย์ วิธีที่ง่ายที่สุดในการสร้างโครงการด้านที่มีประโยชน์คือการดึงออกจากแอปที่คุณกำลังสร้างอยู่แล้ว นั่นคือที่มาของ Rails!

แต่คุณรู้ได้อย่างไรว่าจะสกัดอะไร? และจะเปลี่ยนให้เป็นอัญมณีได้อย่างไรโดยไม่ทำลายขั้นตอนการทำงาน

ค้นหาโค้ดที่คุณต้องการแยก

ที่ใดที่หนึ่งซึ่งลึกลงไปในแอปของคุณมีโค้ดบางอย่างที่ไม่ได้อยู่ในนั้น รหัสที่ ไม่จำเป็น แอปของคุณเพื่อทำหน้าที่ของมัน มันอยู่ที่ไหน?

บางครั้งคุณก็ต้องเดา แต่ฉันมักจะพบโค้ดที่แยกได้ในที่เดียวกัน:

  • การตรวจสอบความถูกต้อง

    คุณได้เขียนการตรวจสอบที่กำหนดเองสำหรับแอตทริบิวต์ของคุณหรือไม่? สิ่งเหล่านี้สามารถสร้างอัญมณีที่ยอดเยี่ยมได้

  • การเปลี่ยนแปลงที่คุณทำกับ Rails

    ในบางครั้ง คุณจะต้องยุ่งกับ Rails เพื่อให้ commit hook ทำงานในการทดสอบหรือแอตทริบิวต์ที่ว่างเปล่าเพื่อเปลี่ยนเป็น NULL ในฐานข้อมูล เมื่อใดก็ตามที่ฉันย้ายตรรกะประเภทนี้ไปเป็นอัญมณี มันจะมีความเสถียรและเข้าใจง่ายขึ้น

  • โมเดล Non-activerecord

    คุณแยกวิเคราะห์ที่อยู่อีเมลหรือหมายเลขโทรศัพท์มากจนย้ายไปยังชั้นเรียนของตนเองหรือไม่ คลาสเหล่านี้มักมีประโยชน์ในแอปอื่นๆ และสามารถเปลี่ยนเป็นอัญมณีได้ง่ายมาก

  • วัตถุจำลองและการยืนยันที่กำหนดเอง

    คุณสามารถเขียนการทดสอบที่อ่านง่ายขึ้นได้โดยใช้การยืนยันแบบกำหนดเอง และเมื่อคุณมีคำยืนยันที่กำหนดเองดีๆ ที่เขียนขึ้นสำหรับห้องสมุดหรือรูปแบบแล้ว สิ่งเหล่านี้ก็มีประโยชน์กับคนอื่นๆ ที่ใช้ไลบรารีหรือรูปแบบนั้น

คุณไม่ต้องคิดใหญ่ อัญมณีที่ฉันโปรดปรานบางส่วนเป็นเพียงไฟล์เดียว!

และหากคุณยังคงตัดสินใจไม่ได้ว่าจะดึงข้อมูลใด ให้เรียกดูรายการหมวดหมู่บน RubyToolbox เพื่อหาแรงบันดาลใจ

ใส่รหัสของคุณในไดเรกทอรีที่เหมือนอัญมณี

เมื่อคุณรู้ว่ารหัสใดที่คุณจะเปลี่ยนเป็นอัญมณี ให้ย้ายรหัสนั้นไปรอบๆ เพื่อให้เข้ากับโครงสร้างที่เหมือนอัญมณีภายในแอปของคุณ

ในแอป Rails ฉันใช้ lib/ เป็น พื้นที่แสดงอัญมณี . lib/ เป็นที่ที่ฉันใส่รหัสที่มีศักยภาพที่จะเปลี่ยนเป็นอัญมณีของตัวเอง ดังนั้น หากคุณกำลังสร้างอัญมณีชื่อ “json_api_client” lib/ ของแอป Rails ของคุณ ไดเรกทอรีอาจมีลักษณะดังนี้:

...
my_rails_app/lib/json_api_client.rb
my_rails_app/lib/json_api_client/associations.rb
my_rails_app/lib/json_api_client/connection.rb
...

อัญมณีส่วนใหญ่จะมีไฟล์ภายใต้ lib/ ตั้งชื่อตามอัญมณี (lib/json_api_client.rb ) และไฟล์จำนวนมากในไดเร็กทอรีที่ตั้งชื่อตาม gem นั้น (ทุกอย่างภายใต้ lib/json_api_client/ ). ดังนั้น นำโครงสร้างเดียวกันนั้นมาจับคู่ในแอพ Rails ของคุณ ซึ่งจะทำให้ง่ายต่อการย้ายโค้ดไปยัง gem ในภายหลัง

หากคุณสับสนว่าเลย์เอาต์อัญมณีเป็นอย่างไร ลองดูแหล่งที่มาของอัญมณีที่คุณชื่นชอบบน GitHub คุณจะเลือกรูปแบบได้อย่างรวดเร็ว

แล้วการทดสอบล่ะ

ฉันเคยติดตาม lib/ โครงสร้างภายใน test/unit/ :

...
my_rails_app/test/unit/json_api_client_test.rb
my_rails_app/test/unit/json_api_client/associations_test.rb
my_rails_app/test/unit/json_api_client/connection_test.rb
...

ใช้งานได้ดี แม้ว่าการวางโมเดลและไลบรารีในโฟลเดอร์เดียวกันจะยุ่งยากเล็กน้อย

ตอนนี้ Rails ใช้ test/models/ แทน test/unit/ . และจัดเก็บ lib/ . ของคุณ การทดสอบภายใน test/models/ ไม่สมเหตุสมผลเลย ฉันยังไม่ได้ตัดสินใจเกี่ยวกับการประชุมนี้จริงๆ คุณมีข้อเสนอแนะอะไรไหม

ทำลายการพึ่งพา

เมื่อรหัสของคุณอยู่ในอัญมณีแล้ว จะไม่สามารถพึ่งพาแอปของคุณได้ ซึ่งหมายความว่าคุณจะต้องผ่านรหัสที่คุณใส่ใน lib/ และมองหาสถานที่ที่ขึ้นอยู่กับคลาส วัตถุ หรือพฤติกรรมเฉพาะสำหรับแอปของคุณ

หากคุณพบการพึ่งพาใด ๆ เหล่านี้ คุณจะต้องทำลายมัน มีงานเขียนดีๆ มากมายเกี่ยวกับวิธีการทำลาย (หรือฉีด) การพึ่งพา ดังนั้นฉันจะไม่พูดถึงเรื่องนี้ในตอนนี้

สร้างอัญมณี

ฉันใช้ bundle gem เพื่อสร้างอัญมณีของฉัน โดยเฉพาะการสร้างอัญมณีชื่อ bulk_cache_fetcher :

bundle gem bulk_cache_fetcher -t minitest

-t เพิ่มไฟล์ตัวช่วยทดสอบและงานทดสอบไปยัง Rakefile ของ gem .

คุณจะต้องดูแลทำความสะอาดต่อไป เช่น กรอก .gemspec , เขียน README , เลือก LICENSE , ทั้งหมดนั่น

และเนื่องจากคุณมีโค้ดของ gem ใน lib/ . ของแอป Rails แล้ว โฟลเดอร์ คุณเพียงแค่ย้ายโค้ดนั้นและการทดสอบไปไว้ใน lib/ และ test/ โฟลเดอร์ในอัญมณีใหม่ของคุณ

หลายๆ ครั้งจะมีบางสิ่งที่คุณพลาดหรือลืมไป หรือโค้ดที่ถือว่าสิ่งต่างๆ เกี่ยวกับแอปของคุณไม่เป็นความจริงในอัญมณี ดังนั้น ก่อนที่คุณจะไปต่อ ให้ทำการทดสอบที่คุณย้ายเข้าไปอยู่ในอัญมณีของคุณ และทำให้แน่ใจว่าการทดสอบทั้งหมดผ่าน

ใช้อัญมณีใหม่ในแอปของคุณ

ตอนนี้คุณมีอัญมณีแล้ว คุณต้องการใช้มันใช่ไหม? แต่การทดสอบการเปลี่ยนแปลงอัญมณีของคุณในแอป Rails อาจสร้างความรำคาญได้อย่างรวดเร็ว คุณต้อง:

  1. ทำการเปลี่ยนแปลงในอัญมณีของคุณ
  2. สร้างอัญมณี
  3. ลบร่องรอยของอัญมณีทั้งหมดออกจากระบบของคุณ หรืออัปเดตเวอร์ชัน
  4. ติดตั้งอัญมณี
  5. รีสตาร์ทเซิร์ฟเวอร์ของคุณ

นี่มันแย่มาก โชคดีที่ Bundler ให้วิธีที่ง่ายกว่านั้นแก่คุณ สมมติว่าคุณได้สร้างอัญมณีของคุณใน ~/Source/bulk_cache_fetcher . ขณะที่คุณกำลังทดสอบการเปลี่ยนแปลงอัญมณี คุณสามารถเขียนสิ่งนี้ลงใน Gemfile ของแอป Rails :

Gemfile
gem "bulk_cache_fetcher", path: "~/Source/bulk_cache_fetcher"

ต่อไป เรียกใช้ bundle install และคุณจะสามารถเปลี่ยนแปลงอัญมณีของคุณราวกับว่าโค้ดนั้นยังคงอยู่ใน lib/ ของแอปของคุณ โฟลเดอร์

สิ่งสุดท้าย:อย่าลืมลบ path: ก่อนที่คุณจะตรวจสอบรหัสของคุณ! เส้นทางนั้นอาจไม่ชี้ไปยังตำแหน่งที่ถูกต้องในระบบอื่น ดังนั้นจึงอาจใช้งานไม่ได้ทุกที่ยกเว้นในเครื่องของคุณ

สร้าง จัดส่ง และสนุกไปกับมัน!

เมื่ออัญมณีของคุณพร้อมแล้ว คุณสามารถส่งออกไปทั่วโลกได้

ดังนั้น ลงชื่อสมัครใช้บัญชีบน RubyGems หากคุณยังไม่ได้ดำเนินการ ตรวจสอบการเปลี่ยนแปลงของคุณและเรียกใช้ rake release . ยินดีด้วย ตอนนี้คุณเป็นนักเขียนอัญมณีแล้ว! และเมื่อคุณผลักอัญมณีนั้นไปที่ github คุณจะได้สี่เหลี่ยมสีเขียวที่สวยงามสำหรับวันนั้น

คุณมีส่วนใด ๆ ของแอพของคุณเองที่ดูเหมือนจะแยกออกได้? อะไรที่คุณคิดว่าอาจเป็นอัญมณีที่ดี? ฉันชอบที่จะได้ยินเกี่ยวกับเรื่องนี้ – เพียงแค่แสดงความคิดเห็นด้านล่าง

และถ้าคุณต้องการเรียนรู้ ตัน ข้อมูลเพิ่มเติมเกี่ยวกับการสร้าง จัดการ และบำรุงรักษา Ruby gem ฉันขอแนะนำ Build a Ruby Gem ของ Brandon Hilkert . กระบวนการที่หนังสือของเขาตามมานั้นใกล้เคียงกับขั้นตอนนี้มาก และครอบคลุมมากกว่านั้นอีกมาก