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

New Panuwat
Swiftlet Tech
Published in
2 min readMar 17, 2020

ตามหัวข้อที่ได้กล่าวมาเลย เนื่องจากก่อนหน้านี้ได้ไปดูการทำ package ใช้เอง ของ python มาเลยเกิดไอเดียว่า อยากลองทำของ Ruby gems ดูบ้าง ไปเจอมาว่า วิธีการทำ และอัพโหลดขึ้น rubygems.org นั้นง่ายแสนง่ายเหลือเกิน ทำอย่างไร ไปดูกัน

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

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

-random_num
/lib
-random_num.rb
-random_num.gemspec

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

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

เราจะมาลองสร้าง ไฟล์ random_number.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

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 ของเราที่ได้ขึ้นไป

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 ง่ายๆ ฝากไว้เท่านี้ก่อน ขอบคุณครับ

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

--

--