12/08/2018, 15:11

Top 57 Gem được sử dụng ở RubyGarage (Phần 1)

RubyGarage là 1 công ty phát triển ứng dụng và dịch vụ web sử dụng Ruby on rails có trụ ở tại Ukraine. Active Record Active Record là ORM mặc định trong Ruby on rails. Mặc dù nó cung cấp nhiều chức năng khác nhau nhưng một số dự án chúng ta cần nhiều hơn thế. Chúng tôi đã chọn ra một vài ...

RubyGarage là 1 công ty phát triển ứng dụng và dịch vụ web sử dụng Ruby on rails có trụ ở tại Ukraine.

Active Record

Active Record là ORM mặc định trong Ruby on rails. Mặc dù nó cung cấp nhiều chức năng khác nhau nhưng một số dự án chúng ta cần nhiều hơn thế. Chúng tôi đã chọn ra một vài gem mở rộng chức năng giúp Active Record trở nên mạnh mẽ và linh hoạt hơn.

Pagination - Để phân trang, hãy thử sử dụng gem có cái tên bí ẩn Kaminari, nghĩa là "sấm" trong tiếng Nhật. Kaminari phân trang rất linh hoạt (không cần cấu hình), sử dụng scope để xử lí truy vấn ActiveRecord.

Categorization - Để phân loại và cấu trúc dữ liệu tốt hơn trên blog, trang web tin tức hoặc mạng xã hội, bạn có thể muốn thêm thẻ. Gem ActsAsTaggableOn cho phép bạn gắn thẻ đối tượng (model và controller) theo một số thuộc tính tùy thuộc vào nội dung của ứng dụng của bạn.

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

Soft delete - Paranoia, thay thế cho acts_as_paranoid, thực hiện chức năng soft delete. Sau khi bạn xóa Active Record, Paranoia không xóa các bản ghi trong cơ sở dữ liệu. Thay vào đó, gem này sẽ ẩn đối tượng bằng cách truy vấn scope trên model. Bạn cần phải sử dụng really_destroy để xóa đối tượng khỏi DB.

Finite state machines - AASM, thay thế plugin theacts_as_state_machine, hoạt động với bất kỳ đối tượng Ruby nào bao gồm cả ActiveRecord.

Versioning - PaperTrail gem cho phép bạn ngăn ngừa các lỗi không thể hoàn tác khi thay đổi model . Với PaperTrail, bạn có các version của model và có thể thêm, hoàn tác, khôi phục dữ liệu, làm việc với các quan hệ của model và hơn thế nữa.

Internationalization - Khi nói đến việc dịch ứng dụng của bạn sang tiếng nước ngoài, Globalize, được cung cấp bởi I18n API, là 1 gem rất tốt. Globalize thêm các bản dịch nội dung trang web của bạn vào các ActiveRecord models, đặc biệt hữu ích khi bạn sử dụng với bản dịch cơ sở dữ liệu không tĩnh.

Testing

Nếu bạn đang viết automated tests cho ứng dụng, có rất nhiều gem tuyệt vời của Ruby sẽ có thể giúp bạn. Trong khi làm việc với dự án của chúng tôi, chúng tôi sử dụng RSpec, factory_girl, Capybara, shoulda-matchers, database_cleaner và simplecov để tiết kiệm thời gian và công sức.

Chúng tôi viết unit test với RSpec - một testing framework chủ yếu sử dụng trong môi trường BDD và TDD. Cú pháp của Rspec gọn gàng và mang tính mô tả, nên test viết gần giống với ngôn ngữ tự nhiên. Rspec là công cụ hiệu quả nhất cho việc test model hoặc thư viện.

Database_cleaner thường được sử dụng với RSpec để làm sạch cơ sở dữ liệu trong quá trình test. Database_cleaner giúp cấu hình khi cơ sở dữ liệu của trước khi test được khởi chạy hoặc cả trước và sau mỗi lần test. Và nếu bạn phải đối mặt với yêu cầu bên ngoài trong quá trình test, bạn có thể thử VCR gem, lấy tất cả các yêu cầu bên ngoài với câu trả lời và ghi lại chúng file để bạn có thể 'phát lại' chúng trong quá trình test.

Để tạo dữ liệu test, chúng tôi sử dụng factory_girl gem. Factory_girl cho phép bạn tạo tập dữ liệu cho các model, vì vậy không cần phải nhập dữ liệu theo cách thủ công mỗi khi bạn thực hiện unit test. Chúng tôi cũng sử dụng một loại gem khác có tên Faker để tạo dữ liệu giả trong model của chúng tôi như số điện thoại, email và tên người dùng.

Sau đó chúng tôi sử dụng Capybara, một framework cho acceptance testing , có hiệu quả tự động hoá các tương tác của người dùng trong trình duyệt. Với Capybara, chúng tôi có thể kiểm tra số lần nhấp chuột, hoàn thành form (trường nhập dữ liệu, dropdown, check box), tính khả dụng của các mục trên một trang và hơn thế nữa. Cùng với Poltergeist Capybara cung cấp cho chúng ta khả năng chạy các kịch bản test trong một webkit từ console.

Một loại gem khác, shoulda-matchers, cho phép chúng tôi dễ dàng kiểm tra các chức năng của Rails điển hình như validations và association bằng cách viết một test nhỏ gọn tương thích với RSpec. Nói cách khác, shoulda-matchers cung cấp matchers giúp các developer test các chức năng Rails cơ bản một cách nhanh chóng và dễ dàng.

Cuối cùng, simplecov gem cho phép chúng tôi xem phần trăm code được kiểm tra trong các unit test. Gem này giúp chúng tôi theo dõi được bao nhiêu code đã được test và phấn đấu cho kết quả tốt hơn.

Coding Style

Coding style rất quan trọng, để viết code chất lượng, chúng tôi thực hiện theo các phương pháp trong The Ruby Style Guide. Nhưng tại sao các developer lại quan tâm đến phong cách? Theo Ruby Style Guide, Ruby viết tốt như một ngôn ngữ tự nhiên, và có thể được hiểu ngay cả bởi những người không phải là developer. Hơn nữa, code viết tốt rất dễ bảo trì và sửa đổi.

Để đảm bảo chất lượng code, các developer áp dụng gem phân tích code của họ và đề xuất các cải tiến. Dưới đây là các gem mà RubyGarage team sử dụng:

Rails_best_practices gem là một công cụ số liệu tĩnh phân tích code để tìm các đoạn code không phải là lỗi về mặt kỹ thuật, nhưng có thể dẫn đến các sự cố phần mềm trong tương lai. Rails_best_practices cung cấp đề xuất cải tiến code của bạn - ví dụ như đề xuất xóa các tab, chú thích model hoặc các chỉ mục cơ sở dữ liệu.

Một trình phân tích code khác - với tên RuboCop - đảm bảo rằng code của bạn tuân theo Ruby Style Guide. RuboCop báo cáo lỗi ngay trong command line. Một vài developer thấy điều này khá khó chịu, nhưng bạn có thể cấu hình RuboCop để chỉ hiển thị các đề xuất bạn muốn. Và điều tuyệt vời về RuboCop là nó tự động khắc phục các vấn đề như ngắt dòng, cú pháp, và số lượng khoảng trống.

RubyCritic gem giúp cung cấp các báo cáo về chất lượng code. RubyCritic tạo ra báo cáo bằng HTML với tên file, lỗi và đánh giá xếp hạng từ A đến F.

Debugging

Lỗi xảy ra tất cả các thời gian khi bạn đang viết code. Cho dù bạn thực hiện một lỗi đánh máy hoặc gem không tích hợp đúng cách. Để loại bỏ những vấn đề này, có một số công cụ hữu ích mà chúng tôi sử dụng xử lí lỗi Ruby.

Trang lỗi mặc định của Rails là khá sơ sài, vì vậy các chúng tôi thích lựa chọn thay thế hơn. Better Errors cung cấp một trang lỗi tĩnh cho các ứng dụng Rack, nhưng hơi bất tiện vì bạn không thể nhìn thấy những gì đã gây ra lỗi ngoại trừ thông qua dấu vết stack. Tuy nhiên, binding_of_caller gem cung cấp một màn hình lỗi hữu ích hơn và cho phép bạn kiểm tra các biến bên trong ứng dụng của bạn khi nó bị treo.

Pry-byebug là một công cụ khác mà chúng tôi sử dụng và nó thực sự mở rộng chức năng của gem Pry và Byebug. Với pry-byebug bạn có thể thực hiện gỡ lỗi code từng bước bằng cách thiết lập các điểm ngắt. Pry-byebug cho phép bạn thiết lập giao diện bảng điều khiển (IRB hoặc Rails console) để bạn có thể kiểm tra cách một đoạn code được thực hiện tại một điểm nhất định.

Cuối cùng nhưng không kém phần quan trọng là chúng ta phải đề cập đến Letter Opener gem, cho phép bạn xem trước các email được gửi từ ứng dụng trực tiếp trong tab trình duyệt của bạn. Điều này khá hữu ích cho các ứng dụng gửi email cho nhiều người dùng hoặc trong trường hợp khi bạn yêu cầu xem trước email nhanh. Với tính năng mở hộp thư, bạn không phải chờ email để gửi đến hộp thư của mình, nhưng có thể xem trước nhanh các email trong trình duyệt và thay đổi nếu cần.

Authentication and Authorization

Cho dù bạn đang xây dựng mạng xã hội, giải pháp thương mại điện tử hay bất kỳ ứng dụng nào khác, bạn thường cần phải cung cấp chức năng đăng nhập, có nghĩa là bạn cần cung cấp xác thực và ủy quyền. Một số developer thích viết tự viết chức năng này của riêng của họ, nhưng một số khác sử dụng gem Ruby phổ biến để tiết kiệm thời gian và công sức.

Rất khó để tìm một Ruby developer không biết về Devise gem. Quái vật khổng lồ này, dựa trên Rails MVC stack, bổ sung hỗ trợ OmniAuth để xác minh người dùng, đặt lại mật khẩu nếu cần thiết và lưu trữ mật khẩu trong cơ sở dữ liệu để đơn giản hóa việc xác thực. Hơn nữa, tính toán theo dõi các tài khoản bao gồm địa chỉ IP và dấu thời gian, hết hạn phiên người dùng sau một khoảng thời gian nhất định và khóa tài khoản trong trường hợp có nhiều lần đăng nhập thất bại. Devise có thể làm nhiều hơn cho bạn - hãy thử ghé trang GitHub của họ để biết thêm chi tiết.

Đăng nhập vào các trang web sử dụng tài khoản xã hội như Facebook hoặc LinkedIn thường xuyên được sử dụng giúp tiết kiệm thời gian và công sức của người dùng. Theo nguyên tắc, đăng nhập mạng xã hội trong các ứng dụng Rails được cung cấp bởi OmniAuth gem, tạo ra các nhà cung cấp xác thực (cho các mạng xã hội bao gồm Facebook, Google và thậm chí GitHub) Tích hợp vào một ứng dụng Rails. Rất dễ dàng!

Một thư viện hữu ích khác là Rolify, cho phép bạn thiết lập và quản lý vai trò người dùng - định nghĩa về những gì người dùng có thể làm trong khi sử dụng một ứng dụng. Ví dụ: khi xây dựng một thị trường như Airbnb, có thể bạn sẽ định nghĩa hai vai trò người dùng: chủ nhà và người dùng; hai đối tượng này nhận được các chức năng hoàn toàn khác nhau. Rolify cũng dễ dàng tích hợp với CanCanCan để phát triển triển để mở rộng khả năng quản lý người dùng.

Khi bạn xây dựng các ứng dụng phức tạp trong đó người dùng có nhiều vai trò, bạn có thể thiết lập các quyền hạn cụ thể của người dùng ở từng vai trò khác nhau và CanCanCan rất dễ dàng để giúp bạn thực hiện điều đó.

Trên đây là bài giới thiệu về 26 gem thường được sử dụng, trong phần 2, mình sẽ tiếp tục giới thiệu 31 gem còn lại về APIs, Security, Payments, Deployment... (còn nữa ...)

Nguồn: https://rubygarage.org Bài viết: https://rubygarage.org/blog/best-ruby-gems-we-use

0