0

Top gem được sử dụng nhiều nhất trong Ruby - Phần I

Framgia là một trong những công ty top đầu tại Việt Nam về Ruby và Ruby on Rails. Hầu hết những người đã sử dụng ruby đều có chung đánh giá rằng đây là một ngôn ngữ linh hoạt và có một cộng đồng hoạt động vô cùng sôi nổi. Bên cạnh đó, Ruby on Rails cũng được đánh giá cao bởi nhiều giải pháp có sẵn cho phép phát triển phần mềm một cách nhanh chóng. Sở dĩ nói như vậy là vì nó sử dụng các Ruby gem - Là những thư viện với các chức năng cụ thể cho phép chúng ra mở rộng và tùy chỉnh ứng dụng của mình. Trong RoR, có đầy đủ các gem để phục vụ các mục đích khác nhau: từ authenticationauthorization, cho đến processingtesting.

Active Record

Active Record là ORM mặc định của Ruby on Rails. Mặc dù nó cung cấp một lượng function phong phú, trong một vài project cụ thể ta vẫn cần phải custom lại theo yêu cầu của khách hàng. Dưới đây là các gem giúp mở rộng chức năng cho Active Record, làm cho nó trở nên mạnh mẽ, mềm dẻo và linh hoạt hơn.

Pagination - Để phân trang, bạn hãy thử sử dụng gem có tên là Kaminari. Đây là một paginator cực ký linh hoạt, không cần config gì phức tạp và sử ụn scope để xử lý các query của ActiveRecord.

Categorization - Để phân loại và cấu trúc dữ liệu trong một blog, một trang web tin tức, hay một mạng xã hội, bạn có thể muốn sử dụng tag. Trong trường hợp này, gem ActsAsTaggableOn cho phép bạn gán nhãn object (model và controller) theo một số thuộc tính tùy vào nội dung app.

Clone - Nếu bạn cần tạo một bản sao của một Active Record object và các quan hệ của nó, hãy xem qua deep_cloneable, gem có thêm các method cho object để sao chép chính nó. Deep_cloneable cung cấp cho bạn một bản sao chính xác với công sức tối thiểu.

Soft delete - Paranoia, thay thế cho acts_as_paranoid, thực hiện một hàm soft delete. Sau khi gọi destroy trên một ActiveRecord object, Paranoia không xóa những record đó trong database. Thay vào đó, gem này sẽ ẩn object bằng cách scoping các query trên model. Nếu bạn thực sự muốn xóa record, bạn phải dùng hàm really_destroy.

Finite state machines - AASM, thay thế cho plugin theacts_as_state_machine, hoạt động với bất kỳ object Ruby nào có chứa ActiveRecord. AASM thêm các finite state machines (một tập các rule mà app cần tuân theo) vào các class Ruby.

Versioning - PaperTrail sẽ giúp cho bạn không còn bực bội khi không thể undo hay redo thay đổi trong model. Với PaperTrail, bạn có thể version model của mình, add, undo, redo, phục hồi dữ liệu, làm việc với quan hệ giữa các model, ..v..v..

Internationalization - bạn sẽ cần đến gem Globalize để dịch ứng dụng của mình sang các ngôn ngữ khác, được hỗ trợ bởi I18n API. Globalize thêm các bản dịch của nội dung website vào ActiveRecord model, đặc biệt hữu ích khi bạn giải quyết các database có nội dung non-static.

Testing

Chắc hẳn chúng ta đã không ít lần viết test trong các project của mình. Và dưới đây là các gem mà được các developer sử dụng nhiều nhất để hỗ trợ quá trình test, đảm bảo chất lượng cho project của họ

Với unit test, chúng ta có Rspec, một testing framework chính được sử dụng trong môi trường TDD và BDD. Cú pháp của rspec khá gọn gàng và dễ hiểu, vì thế các test (hay spec) được viết một cách giống nhất có thể với ngôn ngữ chúng ta sử dụng hàng ngày. Rspec là một công cụ vô cùng hiệu quả cho việc test hành vi của model hay một library.

Database Cleaner cũng thường được sử dụng với rspec để dọn dẹp database trong quá trình test. Nó cung cấp cho chúng ta một sự linh hoạt trong việc lựa chọn khi nào DB được dọn dẹp: trước khi chạy test hoặc cả trước và sau khi chạy mỗi test. Và nếu bạn gặp phải vấn đề từ các request mở rộng trong quá trình test, bạn có thể muốn tìm một giải phép như gem VCR, nó sẽ thu thập lại tất cả các request đó cùng với response và ghi lại vào một file để bạn có thể replay lại chúng trong khi test.

Tiếp theo là việc tạo test data, chắc hẳn các bạn cũng khá quen thuộc với factory_bot. Nó cho phép các bạn tạo một tập dữ liệu cho model, vì thế không cần phải nhập data bằng tay mỗi lần chạy unit test. Bện cạnh đó chúng ta cũng sử dụng gem Faker để tạo dữ liệu fake cho model như name, email, ....

Sau đó là Capybara, một testing framework hỗ trợ cho việc test giao diện. Nó giúp cho bạn test các ứng dụng web của mình bằng cách mô phỏng một người dùng thực sẽ tương tác với ứng dụng của bạn như thế nào.

Một gem khác, Shoulda matchers, cho phép ta dễ dàng test các functions điển hình của Rails như validationsassociation bằng cách viết các test one-line tương thích với rspec. Nói cách khác, shoulda-matchers cung cấp các matcher nhằm giúp các developer test các tính năng cơ bản của rails một cách dễ dàng và nhanh chóng.

Cuối cùng là gem simplecov cho phép chúng ta xem lượng code được cover bởi unit test. Gem này giúp chúng ta kiểm tra xem bao nhiêu code đã được test và cố gắng để được kết quả tốt hơn (mặc dù có một sự thật là đạt 100% là một thử thách không hề nhỏ)

Coding style

Coding stype rất quan trọng. Để viết được những dòng code chất lượng, những Ruby dev giỏi follow các style trong The Ruby Style Guide. Nhưng tại sao các developer lại quan tâm đến style nhiều như vậy? Theo Ruby Style Guide, nếu viết tốt thì code trong ruby có thể được đọc như ngôn ngữ tự nhiên, và có thể hiểu dễ dàng bởi những người không phải là dev. Hơn nữa, những dòng code được viết tốt thì sẽ dễ dàng để maintain, chỉnh sửa và mở rộng. Để đảm bảo chất lượng code, các developer áp dụng cá gem để phân tích của họ và đưa ra các gợi ý tốt hơn. Dưới đây là một số gem như thế.

Gem rails_best_practices là một công cụ tiêu chuẩn để phân tích và tìm ra những đoạn code xấu. Một số đoạn code tuy không phải là lỗi về kỹ thuật, nhưng có thể làm phát sinh các vấn đề khác trong tương lại. Rails_best_practices đưa ra các gợi ý để cải thiện đoạn code của bạn. Ví dụ: xóa các đoạn tab thừa, comment trong model.... Bạn có thể chia sẻ kết quả phân tích với đồng nghiệp và theo dõi kết quả qua thời gian để nhận thấy rằng những đoạn code của mình đã được cải thiện như thế nào.

Một gem khác cũng được sử dụng thường xuyên bên cạnh rails_best_practice, đó là rubocop. Nó giúp đảm bảo code của bạn tuân thủ đúng theo Ruby Style Guide. Rubocop không cho phép viết những dòng code sai quy tắc, chúng sẽ được report lại ngay trong command line. Một vào developer có thể cảm thấy điều này khác phiền phức, nhưng nó hoàn toàn có thể cấu hình lại để chỉ show ra các gợi ý refactor code. Và một điều quan trọng, với những lỗi như line break, syntax,... rubocop có thể fix một cách tự động mà không cần bạn động tay vào.

Cuối cùng, gem RubyCritic giúp cung cấp report dựa trên chất lượng code. Nó sẽ tạo một file HTML và bao gồm tên file, chất lượng và đánh giá từ "A' đến "F" (còn nữa) Cảm ơn các bạn đã theo dõi bài viết của mình.

Nguồn: https://rubygarage.org/blog/best-ruby-gems-we-use


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí