Class: Calrom::FilteringCalendar
- Inherits:
-
SimpleDelegator
- Object
- SimpleDelegator
- Calrom::FilteringCalendar
- Defined in:
- lib/calrom/filtering_calendar.rb
Overview
decorates /(Perpetual)?Calendar/, returns data filtered
Defined Under Namespace
Classes: FilteredDay
Instance Method Summary collapse
- #[](arg) ⇒ Object
- #each_day_in_range(range, include_skipped: false) ⇒ Object
-
#initialize(calendar, days_filter_expressions = [], celebrations_filter_expressions = []) ⇒ FilteringCalendar
constructor
A new instance of FilteringCalendar.
Constructor Details
#initialize(calendar, days_filter_expressions = [], celebrations_filter_expressions = []) ⇒ FilteringCalendar
Returns a new instance of FilteringCalendar.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/calrom/filtering_calendar.rb', line 8 def initialize(calendar, days_filter_expressions=[], celebrations_filter_expressions=[]) super(calendar) @days_filter = proc do |day| days_filter_expressions.all? do |expr| eval_filtering_expression(day, expr) end end @celebrations_filter = proc do |celebration| celebrations_filter_expressions.all? do |expr| eval_filtering_expression(celebration, expr) end end end |
Instance Method Details
#[](arg) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/calrom/filtering_calendar.rb', line 24 def [](arg) raw = super(arg) unless @days_filter.(raw) return FilteredDay.build_skipped raw end FilteredDay.new raw, raw.celebrations.select(&@celebrations_filter) end |
#each_day_in_range(range, include_skipped: false) ⇒ Object
34 35 36 37 38 39 40 41 |
# File 'lib/calrom/filtering_calendar.rb', line 34 def each_day_in_range(range, include_skipped: false) return to_enum(__method__, range, include_skipped: include_skipped) unless block_given? range.each do |date| day = self[date] yield day if (include_skipped || !day.skipped?) end end |