module Holidays::Factory::Finder

def between

def between
  Holidays::Finder::Context::Between.new(
    search,
    dates_driver_builder,
    parse_options,
  )
end

def dates_driver_builder

def dates_driver_builder
  Holidays::Finder::Context::DatesDriverBuilder.new
end

def next_holiday

def next_holiday
  Holidays::Finder::Context::NextHoliday.new(
    search,
    dates_driver_builder,
    parse_options,
  )
end

def parse_options

def parse_options
  Holidays::Finder::Context::ParseOptions.new(
    Factory::Definition.regions_repository,
    Factory::Definition.region_validator,
    Factory::Definition.loader,
  )
end

def rules

def rules
  {
    :in_region => Holidays::Finder::Rules::InRegion,
    :year_range => Holidays::Finder::Rules::YearRange,
  }
end

def search

def search
  Holidays::Finder::Context::Search.new(
    Factory::Definition.holidays_by_month_repository,
    Factory::Definition.function_processor,
    Factory::DateCalculator.day_of_month_calculator,
    rules,
  )
end

def year_holiday

def year_holiday
  Holidays::Finder::Context::YearHoliday.new(
    search,
    dates_driver_builder,
    parse_options,
  )
end