Hướng dẫn tự tạo gem và public lên rubygems

Lê Văn HoàngLê Văn Hoàng
4 min read

Xây dựng Ruby Gem

Trước tiên để bắt đầu tạo Gem, bạn cần sử dụng Gem Bundler

$ gem install bundler

Cấu trúc thư mục của Gem

Để tạo ra một Gem, ta sử dụng command dưới đây, helpers_view là tên của Gem, bạn có thể sử dụng một cái tên bất kỳ cho nó.

bundle gem helpers_view

Gem của chúng ta sẽ được tạo ra với các thư mục tối thiểu:

$ tree helpers_view
helpers_view
├── bin
└── lib
    ├── helpers_view
    │   └── version.rb
    └── helpers_view.rb
├── .gitignore
├── Gemfile
├── LICENSE.txt
├── README.md
├── Rakefile
├── helpers_view.gemspec
  • bin: Chứa các bash script để tự động hoá các tác vụ khi người dùng cài đặt một Gem.

  • lib: Nơi chứa code chính của Gem.

  • test: Phục vụ cho việc viết test cho Gem

  • Gemfile: Khi bạn muốn sử dụng lại một thư viện sẵn có thì đây là nơi bạn sẽ điền các Gem mong muốn vào. Hoạt động tương tự như ở rails, nó sẽ tự động tải các Gem có trong này về máy để có đủ môi trường sử dụng cho ứng dụng của bạn.

  • Rakefile: Khi bạn muốn thực hiện những tác vụ tự động với gem như việc run test.

  • .gemspec: File mô tả Gem của bạn, ví dụ như mô tả, tác giả, phiên bản,... của Gem

  • helpers_view.gemspec là file cung cấp cho ta thông tin về Gem như: tên, mô tả, tác giả, bản quyền và những cài đặt phụ thuộc khác cần thiết cho Gem hoạt động.

# coding: utf-8
# frozen_string_literal: true

require_relative 'lib/helpers_view/version'

Gem::Specification.new do |spec|
  spec.name = 'helpers_view' # tên gem
  spec.version = HelpersView::VERSION
  spec.authors = ['devhoanglv92'] # tên tác giả, có thể truyền vào mảng
  spec.email = ['devhoanglv92@gmail.com'] # email, có thể truyền vào mảng

  spec.summary = 'Gem helpers for view support render html'
  spec.description = 'Gem helpers for view support render html'
  spec.homepage = 'https://github.com/hoangdev92/helpers_view'
  spec.license = 'MIT'
  spec.required_ruby_version = '>= 2.6' # phiên bản ruby yêu cầu

  spec.metadata['allowed_push_host'] = 'https://rubygems.org'

  spec.metadata['homepage_uri'] = spec.homepage
  spec.metadata['source_code_uri'] = 'https://github.com/hoangdev92/helpers_view'
  spec.metadata['changelog_uri'] = 'https://github.com/hoangdev92/helpers_view/blob/master/CHANGELOG.md'

  # Specify which files should be added to the gem when it is released.
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
  spec.files = Dir.chdir(__dir__) do
    `git ls-files -z`.split("\x0").reject do |f|
      (File.expand_path(f) == __FILE__) ||
        f.start_with?(*%w[bin/ test/ spec/ features/ .git appveyor Gemfile])
    end
  end
  spec.bindir = 'exe'
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
  spec.require_paths = ['lib']
  # spec.executables << 'run'

  # Uncomment to register a new dependency of your gem
  # spec.add_dependency "example-gem", "~> 1.0"

  # For more information and examples about making a new gem, check out our
  # guide at: https://bundler.io/guides/creating_gem.html
end
  • Tiếp theo hãy nhìn vào file lib/helpers_view/version.rb. File này cung cấp số phiên bản đóng gói trong, nó sẽ được phản ảnh trên RubyGems.org
module HelpersView
  VERSION = "0.0.1"
end
  • File cần quan tâm tiếp theo là lib/helpers_view.rb. Đây là file được mặc định nạp vào đầu tiên của Gem khi Bundler được chạy.
require "helpers_view/version"

module HelpersView
  # Your code goes here...
end
# example:
# class Railtie < ::Rails::Railtie
#   initializer 'helpers_view.rails_html' do
#     ActiveSupport.on_load(:action_view) do
#       def render_hello_world
#         'Hello World'
#       end
#     end
#   end
# end
  • Các file còn lại, ít khi thay đổi, nên tôi cũng không nhắc đến ở đây.

Release gem

Trước khi release, bạn cần kiểm tra version.rb đã phản ánh đúng number version mà bạn muốn chưa. 0.0.1 sẽ là lựa chọn tốt khi bắt đầu

Tiếp theo, bạn nên commit code của mình lên Github, vì Bundler sẽ mặc định làm việc với một vài git repository, phổ biến nhất là Github. Để release lên rubygems, bạn cần tạo tài khoản trước đã. Sau khi tạo tài khoản, bạn có thể sử dụng lệnh sau để build Gem của mình.

$ bundle gem build
# kết quả sẽ như thế này:
# Successfully built RubyGem
# Name: helpers_view
# Version: 0.0.1
# File: helpers_view-0.0.1.gem

Bây giờ bạn có thể chia sẻ lên cộng đồng Ruby. Việc xuất bản gem của bạn ra RubyGems.org chỉ cần một lệnh, với điều kiện là bạn có tài khoản trên trang web. Để thiết lập máy tính của bạn với tài khoản RubyGems, bạn có thể chạy lệnh bên dưới (trong đó bạn nên thay thế bằng Email, Mật khẩu và OTP của riêng bạn (nếu được bật)):

$ gem signin
Enter your RubyGems.org credentials.
Don't have an account yet? Create one at https://rubygems.org/sign_up
  Email:   (your-email-address@example.com)
Password:   (your password for RubyGems.org)

API Key name [host-user-20220102030405]:
Please select scopes you want to enable for the API key (y/n)
index_rubygems [y/N]:   n
push_rubygem [y/N]:   y
yank_rubygem [y/N]:   n
add_owner [y/N]:   n
remove_owner [y/N]:   n
access_webhooks [y/N]:   n
show_dashboard [y/N]:   n

You have enabled multi-factor authentication. Please enter OTP code.
Code:   123456
Signed in with API key: host-user-20220102030405.

sau đó push gem lên

gem push helpers_view-0.0.1.gem
# kết quả:
# Pushing gem to RubyGems.org...
# Successfully registered gem: helpers_view (0.0.1)

Và đây là thành quả helpers_view

0
Subscribe to my newsletter

Read articles from Lê Văn Hoàng directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Lê Văn Hoàng
Lê Văn Hoàng