A Ruby library for defining and enumerating recurring events with a chainable interface and ActiveRecord serialization support.
Montrose is a Ruby library for defining and enumerating recurring events. It provides a chainable interface to create recurrence rules that generate sequences of timestamps, solving the complex problem of modeling repeating schedules in Ruby applications. The library supports serialization to multiple formats and integrates with ActiveRecord for persistence.
Ruby developers building applications that need to handle recurring events, such as calendar systems, scheduling tools, or any feature requiring repeatable time-based rules.
Developers choose Montrose for its clean, chainable API that feels native to Ruby, its enumerable recurrence objects that work seamlessly with Ruby's Enumerable methods, and its built-in support for ActiveRecord serialization, making it easy to persist recurring schedules.
Recurring events library for Ruby. Enumerable recurrence objects and convenient chainable interface.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Provides a fluent, intuitive interface inspired by HTTP.rb, making recurrence definitions easy to read and write with methods like `Montrose.weekly.on(:monday).at('10:30 am')`.
Recurrence objects are enumerable, allowing direct use of Ruby's Enumerable methods such as `map`, `select`, and `take` for seamless manipulation of timestamp sequences.
Easily serialize recurrence objects to database columns using ActiveRecord's serialization API, simplifying persistence in Rails applications without custom code.
Supports serialization to hash, YAML, and iCal (RFC 5545) formats, enabling easy data exchange, storage, and interoperability with calendar systems.
Allows combining multiple recurrence rules into a single event stream using `Montrose::Schedule`, useful for modeling complex scheduling scenarios.
Does not support advanced calendaring needs like event exceptions, cancellations, or comprehensive time zone management, as admitted in the README's philosophy section.
Relies on ActiveSupport for date and time calculations, adding overhead for non-Rails projects and potentially bloating dependencies if not already in use.
Tight integration with ActiveRecord makes it less versatile for applications using other ORMs or frameworks, limiting adoption outside the Rails ecosystem.
Recurrences can represent infinite sequences, and careless use of enumerable methods without lazy evaluation or limits can lead to performance issues or infinite loops.