Class: Holidays::Finder::Context::NextHoliday

Inherits:
Object
  • Object
show all
Defined in:
lib/holidays/finder/context/next_holiday.rb

Instance Method Summary collapse

Constructor Details

#initialize(definition_search, dates_driver_builder, options_parser) ⇒ NextHoliday

Returns a new instance of NextHoliday.



5
6
7
8
9
# File 'lib/holidays/finder/context/next_holiday.rb', line 5

def initialize(definition_search, dates_driver_builder, options_parser)
  @definition_search = definition_search
  @dates_driver_builder = dates_driver_builder
  @options_parser = options_parser
end

Instance Method Details

#call(holidays_count, from_date, options) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/holidays/finder/context/next_holiday.rb', line 11

def call(holidays_count, from_date, options)
  validate!(holidays_count, from_date)

  regions, observed, informal = @options_parser.call(options)

  holidays = []
  ret_holidays = []
  opts = gather_options(observed, informal)

  # This could be smarter but I don't have any evidence that just checking for
  # the next 12 months will cause us issues. If it does we can implement something
  # smarter here to check in smaller increments.
  dates_driver = @dates_driver_builder.call(from_date, from_date >> 12)

  ret_holidays = @definition_search.call(dates_driver, regions, opts)

  ret_holidays.sort{|a, b| a[:date] <=> b[:date] }.each do |holiday|
    if holiday[:date] >= from_date
      holidays << holiday
      holidays_count -= 1
      break if holidays_count == 0
    end
  end

  holidays.sort{|a, b| a[:date] <=> b[:date] }
end