module Pagy::CalendarExtra::Backend
def pagy_setup_calendar(collection, conf)
def pagy_setup_calendar(collection, conf) units = Calendar::UNITS & conf.keys # get the units in time length desc order raise ArgumentError, 'no calendar unit found in pagy_calendar configuration' if units.empty? page_param = conf[:pagy][:page_param] || DEFAULT[:page_param] units.each do |unit| # set all the :page_param vars for later deletion unit_page_param = :"#{unit}_#{page_param}" conf[unit][:page_param] = unit_page_param conf[unit][:page] = params[unit_page_param] end calendar = {} last_obj = nil units.each_with_index do |unit, index| params_to_delete = units[(index + 1), units.size].map { |sub| conf[sub][:page_param] } + [page_param] conf[unit][:params] = lambda do |params| # delete page_param from the sub-units params_to_delete.each { |p| params.delete(p.to_s) } # Hash#except missing from ruby 2.5 baseline params end conf[unit][:period] = last_obj&.send(:active_period) || pagy_calendar_period(collection) calendar[unit] = last_obj = Calendar.send(:create, unit, conf[unit]) end [calendar, pagy_calendar_filter(collection, last_obj.from, last_obj.to)] end