Make your own Ruby gem
Bài đăng này đã không được cập nhật trong 3 năm
1.RubyGems, So what is it?
- ####
gem "GEM_NAME"
in Gemfile <=>gem install GEM_NAME
(what 's different between them)
2.Gem command basic
3.My first gem.
Let's get started
1. RubyGems, So what is it?
gem
là mộtpackage manager
của Ruby.- Quản lý các thư viện của Ruby.
- Tương tự :
- npm (Javascript)
- apt-get (Linux)
- yum (Cenos)
- activator (Scala)
- composer (PHP)
- Bản thân
Rails
hay (Ruby on Rails) cũng là một gem của Ruby (rails lằm trong thư mục gem)
Kiểm tra :
$ which rails
$ # => /home/leminhtuan/.rvm/gems/ruby-2.2.0/bin/rails
$ gem list | grep rails
$ # => rails (4.2.1)
- Từ Ruby version 1.9 thì
gem
là một phần trong thư viện chuẩn của Ruby (install song Ruby là thấy gem luôn)
$ which gem
$ # => /home/leminhtuan/.rvm/rubies/ruby-2.2.0/bin/gem
gem
cũng như các tool trên, được tạo ra với mục đích đơn giản hóa việc install/remove các plugin in trong một Ruby project.- Khi làm việc trong một project lớn với nhiều coder và sử dụng nhiều thư viện thậm chí phải quan tâm đến nguồn và version của thư viện vậy làm thế nào để việc sử dụng thư viện được thống nhất trong cả project,
gem
sẽ giải quyết vấn đề đó. - Bạn sẽ thấy rõ hơn
gem
rất hữa dụng khi làm trên một project có nhiều team cùng code và sử dụng nhiều plugin (thư viện). gem
không phải là một plugin mà là chương trình quản lý các plugin (version, source, install, remove)
gem "GEM_NAME"
in Gemfile <===> gem install GEM_NAME
- Khi install 1 gem bằng cách dùng lệnh
gem install GEM_NAME
là ta cài thêm 1 gem vào thư mục gem của bạn, ví dụ:/home/leminhtuan/.rvm/gems/ruby-2.2.0/bin/
- Khi thêm dòng "
gem "GEM_NAME"
" vào file Gemfile và sau đó chạy "bundle" thực chất là ta cũng sẽ gọi tới lệnh geminstall GEM_NAME
và cài vào thư mục tưowng tự, nếu đã cài gem rồi thì khi chạybundle
thì rails sẽ không cài lại mà chỉ check xem có đúng version không, nếu không mới cài lại.
2. Gem command basic
- Install a gem
gem install mygem
- Show list of gem which is installed
gem list --local / gem list
. Check a gem is installed or not (gem list | grep gem_name)
- Uninstall a gem
gem uninstall mygem
- Build a gem
gem build hola.gemspec
**Tip : Check a gem be installed or not **
$ ruby -e "puts(require('[gem_name]'))"
$ true
$ gem list | grep [gem_name]
$ gem_name (0.0.0)
3. My first gem.
- I will create a "Hello world!"
gem
.
STEP 1 : Tạo một thư mục có cấu truc như bên dưới, tất nhiên đổi tên "mygem" thành tên gem của bạn.
$ mkdir mygem
$ cd mygem
$ touch mygem.gemspec
$ mkdir lib
$ cd lib
$ touch mygem.rb
-
Sau khi tạo song thư mục, bạn sẽ kiểm tra và thấy cấu trúc như sau.
- Thư mục lib chứa tất cả các code Ruby mà bạn code trong gem của bạn.
- Trong thư mục lib bạn có thể có rất nhiều file .rb nhưng phải có một file trùng tên với tên gem, bởi vì nó phải thế (theo convention), file này sẽ được gọi (load) khi bạn chạy câu lệnh
require 'mygem'
- File trùng tên với tên gem trong thư muc lib có nhiệm vụ setting cho
gem
. (giống file main).
-
mygem.gemspec
là file có mục đích mô tả thông tin gem của bạn- tác giả
- vesion
- name
- date
STEP 2: Implement Code gem của bạn.
- Code trong file
lib/mygem.rb
(File này trùng tên với tên gem)
class Mygem
def self.hi
puts "Hello world!"
end
end
Step 3: Defines what’s in the gem
- Ta định nghĩa thông tin của Gem trong file
mygem.gemspec
Gem::Specification.new do |s|
s.name = 'mygem'
s.version = '0.0.0'
s.date = '2010-04-28'
s.summary = "My gem!"
s.description = "A simple hello world gem"
s.authors = ["Nick tuan"]
s.email = 'leminhtuan2015@gmail.com'
s.files = ["lib/mygem.rb"]
s.homepage = 'http://rubygems.org/gems/mygem'
s.license = 'MIT'
end
STEP 4: Build you gem
$ gem build mygem.gemspec
- Kết quả.
- Sau khi build bạn sẽ thấy xuất hiện một file mới trong thư mục gem của bạn có tên là
mygem-0.0.0.gem
- Đây chính là một
ruby gem
mà bạn đã tạo được. - Tất nhiên bây giờ bạn có thể install gem này và dùng giống như các thư viên khác.
STEP 5: Install your gem
$ gem install mygem-0.0.0.gem
Step 6: Use Gem
$ irb
$ require "mygem"
$ Mygem.hi
Many thanks.
Thank you so much for reading. please leave a comment or give me feedbacks so that i can better myself.
All rights reserved