gaman ra đời như thế đấy

      No Comments on gaman ra đời như thế đấy

CẢNH BÁO Đây là bài viết thử thách độ kiên trì của bạn =))

Nếu các bạn còn chưa biết, thì gaman (Github Account Manager) là một công cụ giúp bạn quản lý, chuyển đổi qua lại dễ dàng giữa các ssh key.

gamanopen source, bạn hoàn toàn có thể xem mã nguồn và tham gia đóng góp tại: https://github.com/CQBinh/gaman

Ý tưởng

Nhu cầu thực tế

Hồi mình mới chuyển sang công ty mới, theo yêu cầu dự án, mình phải tạo thêm 1 tài khoản github khác, sử dụng email công ty.

Mình sử dụng ssh để kết nối đến các tài khoản của mình. Vậy là phải tạo đến 2 ssh key (github quy định 1 ssh key chi kết nối được 1 tài khoản).

Vấn đề phát sinh khi mình muốn làm dự án ở tài khoản nào, thì phải sử dụng ssh key tương ứng.

Việc chuyển đổi quy lại hơi phiền phức, và mất thời gian. Vậy nên, mình đã tìm cách đơn giản hóa việc chuyển đổi đó. Bạn có thể xem thêm tại bài viết của mình.

Thời cơ chín muồi

Một ngày đẹp trời nọ, công ty yêu cầu toàn bộ nhân viên phải tạo tài khoản github sử dụng email công ty. Vậy là mình chia sẻ bài viết của mình cho mọi người.

Nhận được phản hồi rất tích cực từ mọi người, đồng thời, anh team manager có gợi ý cho mình về việc viết nó thành gem, để tiện tương tác hơn.

Mình rất hứng thú và bắt tay vào làm liền.

Rock on

Đầu tiên mình lên mạng và tìm được 1 vài bài viết về cách tạo một ruby gem. Cái cần phải có (đương nhiên) là môi trường (ruby, rvm hoặc rbenv, git).

Để tạo một app ruby gem, đơn giản chỉ việc chạy lệnh:

bundle là lệnh của bundler, mà bundler thì thuộc rvm hoặc rbenv.

Câu lệnh trên sẽ sinh ra bộ khung cho gem của mình, ta sẽ từ từ khám phá 😀

gaman.gemspec

Đây là file chứa tất tần tật thông tin về gem của mình như: tên, phiên bản, mô tả, thông tin tác giả, trang chủ. Các file sẽ được include, và các dependencies. Có 2 loại dependency:

  • Runtime dependencíes là những gem sẽ được sử dụng trong lúc thực thi
  • Development dependencies là những gem cần dùng cho việc testingbuilding.

Xem qua file gaman.gemspec của mình:

Bạn để ý dòng:

Khi tạo gem, bundler sẽ tạo cho bạn dòng:

Bạn nên đổi exe về bin, đây là thư mục chứa các file thực thi của bạn.

Chạy lệnh $ bundle để cài đặt các gem.

bin/gaman

Tạo file bin/gaman, đây chính là file gốc của gem:

Thay đổi quyền thực thi cho file:

Chạy thử

Đến đây là mình đã chạy được gem của mình rồi (party).
Tuy nhiên, gem thì không chỉ đơn giản là in câu thông báo ra màn hình. Mình cần nhiều hơn thế.

thor

thor là một công cụ hỗ trợ bạn xây dựng cấu trúc gem.

thor giúp bạn định nghĩa các lớp, phương thức, tham số, cờ, document…

Để ý trên file gaman.gemspec, mình có dòng spec.add_dependency 'thor' để cài gem thor rồi.

Trong thư mục lib/gaman/, mình tạo file cli.rb, là một thor class:

Require file cli vào trong file chính, lib/gaman.rb:

Và cuối cùng là khởi động class, trong bin/gaman:

Code hoàn toàn dễ hiểu đúng không. Bây giờ là lúc xem thành quả:

Khi chạy lệnh gaman không, thì dòn thông báo hỗ trợ sẽ hiện ra, hướng dẫn cho mình cách chạy gem.

Gọi một lệnh hoàn chỉnh:

Đến đây là gem chạy thành công.

Xem thêm về thor, mình biết thêm về cách khai báo option, require, alias

Làm đẹp với rainbow

Khi in các câu thông báo ra màn hình, chữ trắng, nền đen. Mình thấy hơi nhàm chán, nên Google và được gem rainbow.

Dùng nó cực kỳ đơn giản:

Vậy là in được dòng thông báo màu đỏ.

Ngoài đổi màu, rainbow còn giúp mình gạch chân, bôi đậm, bôi nhạt, phát sáng, blah blah. Bạn có thể tìm hiểu thêm trong trang github của nó.

Chia để trị

Tiếp tục viết gaman, mình nhận thấy lớp của mình ngày càng dài ra, và đến lúc phải “chia để trị”. Mình nghĩ đến việc dùng module.

Mình tạo file lib/gaman/messenger.rb để hỗ trợ việc “in ấn”.

Trong GithubAccountManager:

Đến đây là ngon lành cành đào. Mình bắt đầu viết test và tích hợp linter, ci (về linter và ci, bạn có thể đọc thêm 2 bài viết về rubocopcircleci của mình để hiểu rõ hơn)

Phát tán :))

Làm xong thì tất nhiên cần public cho mọi người dùng.

Đầu tiên mình push code lên github.

Sau đó đăng ký 1 tài khoản ở https://rubygems.org/.

Và cuối cùng release, mọi công đoạn bundler làm hết cho mình rồi, mình chỉ việc chạy lệnh:

Và nhập các thông tin đăng nhập lần đầu tiên vào. Xong.

Tận hưởng

Đến lúc này, mình có thể cài gaman một cách đường đường chính chính 😛

Và chạy thử lệnh:

Cảm giác thấy đứa con của mình lên sóng, phê không thể tả các bác ạ 😀

Thêm chút nữa

Khi release, mình để ý các log của bundler, thấy nó có gắn git tag cho code của mình.

Mình có vào đọc các tag đó, và thấy thông tin nó ghi trong đó không đầy đủ lắm, nên mình tự tạo tag mới.

Để biết thêm về git tag, bạn có thể đọc bài viết này

Chia sẻ thêm một chút, ngay lúc mình viết bài viết này, có một pull request từ một lập trình viên nước ngoài, họ giúp mình chỉ ra những điểm yếu trong cách code, và họ sửa giúp mình luôn. Cảm nhận được ngay lập tức sức lan tỏa của cộng đồng open source 😛

Đọc đến đây, xin chúc mừng bạn, bạn đã chứng tỏ được độ kiên trì của bạn, và mình mong chờ bạn khoe với mình về gem mà bạn viết được sau bài viết này 😛

Cố lên, mình tin ở bạn! 😀

Lập trình và hơn thế nữa

Spread the love
  • 1
  •  
  •  
  •  
  •  
    1
    Share

Leave a Reply

Be the First to Comment!

avatar
  Subscribe  
Notify of