pnwt.bid
Published on

มาทำ Ruby Gems ใช้เอง กันเถอะ

Authors

Disclamer

ก่อนอื่นแจ้งก่อนนะครับ หากใครต้องการจะ push gems ของตัวเองขึ้นไป เช็คก่อนว่า ชื่อ ที่เราจะใช้นั้นซ้ำหรือไม่ ในตัวอย่าง ผมได้ใช้ชื่อนี้ไปแล้วนะครับ เพราะฉะนั้นชื่อนี้ใช้ไม่ได้แล้ว ต้องหาชื่ออื่นนะครับ วิธีการเช็คก็ เข้าไปที่ rubygems.org แล้ว search ชื่อดูครับ ชื่อที่หาไม่เจอก็คือชื่อที่ยังไม่ได้ถูกสร้างนั้นเอง

Start

ก่อนอื่นให้ทำ โครงสร้างไฟล์ ให้เป็น แบบนี้ก่อน

first-rubygems-1.rb
-random_num
  /lib
   -random_num.rb
 -random_num.gemspec

อธิบายคร่าวๆ

  • /lib/random_num.rb จะเป็นไฟล์หลักในการรัน
  • random_num.gemspec เป็นไฟล์ที่เอาไว้ ตั้ง config ต่าง ๆ เช่น version ของ gems, description ต่าง ๆ

เราจะมาลองสร้าง ไฟล์ random_number.rb กัน

first-rubygems-2.rb
class RandomNum
 def self.rd(x, y)
  rand(x..y)
 end
end

สั้นๆ ง่ายๆ แค่นี้พอ ตั้งชื่อ method ว่า rd รับค่ามา 2 ตัว จะทำการสุ่ม เลขตั้งแต่ x จนถึง y เช่น 1..10 ก็จะสุ่มออกมาได้ 5,1,2,2 หรืออะไรก็ตาม

มาดูที่ random_number.gemspec

first-rubygems-3.rb
Gem::Specification.new do |s|
 s.name        = 'random_num'
 s.version     = '0.0.1'
 s.date        = '2020-03-17'
 s.summary     = "Rad!"
 s.description = "A simple random number"
 s.authors     = ["your_name"]
 s.email       = 'your_email'
 s.files       = ["lib/random_num.rb"]
 s.homepage    = 'https://rubygems.org/gems/random_num'
 s.license     = 'MIT'
end

setup ตามด้านบนนี้

ลองทดสอบดูในเครื่องว่าใช้ได้ไหม

$ gem build random_num.gemspec

Successfully built RubyGem
Name: random_num
Version: 0.0.1
File: random_num-0.0.0.gem

ควรจะต้อง build ผ่าน

ลองทดสอบใน irb ดูก่อนใช้ได้ไหม

$ gem install random_num

Fetching random_num-0.0.1.gem
Successfully installed random_num-0.0.1
~ ✗ irb
2.5.7 :001 > require 'random_num'
 => true
2.5.7 :002 > RandomNum.rd(1, 10)
 => 10
2.5.7 :003 > RandomNum.rd(1, 10)
 => 2

Yeppp ใช้ได้

คราวนี้เราจะเอาgems ของเรามา push ขึ้น rubygems.org

ก่อนอื่นต้องสมัครสมาชิกก่อนนะ หลังจากสมัครแล้ว ให้ รัน คำสั่งตามนี้

curl -u your_user_name https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials; chmod 0600 ~/.gem/credentials

ส่วนที่ your_user_name ให้ใส่ username ของตัวเองลงไป, หลังจาก รัน จะต้องให้ใส่ password ด้วย

จากนั้นเราจะทำการ push gem ของเราที่ได้ขึ้นไป

test.sh
gem push random_num-0.0.1.gem
Pushing gem to https://rubygems.org...
Successfully registered gem: random_num (0.0.1)

เมื่อ push ผ่าน ให้เราเข้าไปที่ dashboard ของเรา จะเห็น gems ของเราเพิ่มขึ้นมาครับ ถ้าจะใช้ก็ลงตามปกติเลย

gem install random_num

หากเราต้องการแก้ไข หรือ modify gems ของเรา ให้เราแก้ไขไฟล์ .gemspec ส่วนของ version ด้วยนะครับ เช่น 0.0.1 -> 0.0.2 แทน ไม่งั้นจะซ้ำนะครับ

เบื้องต้น ทำ gems ง่ายๆ ฝากไว้เท่านี้ก่อน ขอบคุณครับ

ref: https://guides.rubygems.org/make-your-own-gem/#your-first-gem

Thank you for watching!