Tạo các sự kiện lặp đi lặp lại (repeated / recurring events) với Ice Cube Gem

Tram Ho

ice_cube là một thư viện của Ruby dùng để xử lý các event xảy ra định kỳ hoặc lặp đi lặp lại. Nó giúp chúng ta xử lý các events đó dễ dàng và rất nhanh.
Ví dụ cơ bản nhất là dùng để tạo các event trên calendar chẳng hạn.

Cài đặt

Cách sử dụng

Vi dụ bạn muốn hiển thị các event xảy ra :

Every friday the 13th that falls in October

Vậy nếu mình tự viết thì nó sẽ phức tạp. Với ice_cube thì mình sẽ xử lý bài toán này rất đơn giản như sau.

Từ object đó mính sẽ gọi được các method có sẵn của ice_cube như lấy tất cả các events, check schedule đó có xảy ra trên ngày nào đấy không, …. có rất nhiều method mình có thể dùng được. Dưới đây sẽ là một số method và cách sử dụng nó.

Khởi tạo schedule object

start_time và end_time là optional

Tạo rules cho schedule

Có nhiều loại rules như sau:

Daily

Weekly

Tương tự với các rules trên:

  • monthly
  • yearly
  • hourly
  • minutely
  • secondly

Chi tiết về các rules đó bạn vào xem tài liệu của nó.

Gọi các method cần thiết

Sau khi bạn đã khởi tạo schedule, add rule cho schedule đó xong, tiếp theo mình có thể gọi các method mình cần.

Như ví dụ trên bạn sẽ biết cách gọi method thế nào rồi, còn khá nhiều methods nữa, bạn có thể vào tài liệu của nó để xem chi tiết.

Persistence

Trên thực tế người dùng sẽ tạo rules đó trên UI chứ không phải bằng code, vậy làm thế nào để lưu các rules đó vào db được?

Mình sẽ implement theo cách dưới đây:

  • Tạo UI chọn events:

Ở đây, nếu bạn muốn tự code form cũng được. Mình sẽ nhận được params cần thiết từ form đó để dùng cho việc tạo rulé cho schedule.

Nhưng để hỗ trợ việc tạo form dễ dàng, ở đây cũng có gem https://github.com/GetJobber/recurring_select
Nó sẽ generate sẵn form để hỗ trợ trong việc chọn các rules cho bạn rồi.

  • Tạo rules:

Sau khi bạn đã có form rồi, tiếp theo bạn cần phải lấy params từ form đó và tạo rule cho event đấy.
Cuối cùng sẽ lưu rule đã tạo đó vào db.

Mình có thể lưu rules dưới dạng yaml, hash, ical.

Từ data đó mình chỉ lưu nó và db là xong.

Conclusion

Đến đây bạn đã hiểu về cách cài đặt cũng như sử dụng gem này rồi.

Chi tiết hãy xem các tài liệu sau:

https://github.com/seejohnrun/ice_cube

https://github.com/GetJobber/recurring_select

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo