Class: Calrom::FilteringCalendar

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
lib/calrom/filtering_calendar.rb

Overview

decorates /(Perpetual)?Calendar/, returns data filtered

Defined Under Namespace

Classes: FilteredDay

Instance Method Summary collapse

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