แผนภูมิสนับสนุน 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 อาจสร้างความรำคาญได้อย่างรวดเร็ว คุณต้อง:
- ทำการเปลี่ยนแปลงในอัญมณีของคุณ
- สร้างอัญมณี
- ลบร่องรอยของอัญมณีทั้งหมดออกจากระบบของคุณ หรืออัปเดตเวอร์ชัน
- ติดตั้งอัญมณี
- รีสตาร์ทเซิร์ฟเวอร์ของคุณ
นี่มันแย่มาก โชคดีที่ Bundler ให้วิธีที่ง่ายกว่านั้นแก่คุณ สมมติว่าคุณได้สร้างอัญมณีของคุณใน ~/Source/bulk_cache_fetcher
. ขณะที่คุณกำลังทดสอบการเปลี่ยนแปลงอัญมณี คุณสามารถเขียนสิ่งนี้ลงใน Gemfile
ของแอป Rails :
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 . กระบวนการที่หนังสือของเขาตามมานั้นใกล้เคียงกับขั้นตอนนี้มาก และครอบคลุมมากกว่านั้นอีกมาก