class CronZoneConverter::Merger

Public Class Methods

merge(crons) click to toggle source
# File lib/cron_zone_converter/merger.rb, line 6
def merge(crons)
  return crons unless crons.size > 1

  merge_by_hour(merge_by_dow(merge_by_dom(crons))).sort{ |a, b| a.to_cron_s <=> b.to_cron_s }
end

Private Class Methods

cron_marker(cron, exclude_key) click to toggle source
# File lib/cron_zone_converter/merger.rb, line 47
def cron_marker(cron, exclude_key)
  keys  = %i[minute hour dom month dow]
  marks = []
  cron.to_cron_s.split(' ').each_with_index do |x, i|
    next if keys[i] == exclude_key

    marks << x
  end
  marks.join(' ')
end
merge_by_dom(ary) click to toggle source
# File lib/cron_zone_converter/merger.rb, line 25
def merge_by_dom(ary)
  ary.each_with_object({}) do |cron, merged|
    marker         = cron_marker cron, :dom
    merged[marker] = if merged.key?(marker)
                       Duplicator.change merged[marker], add_dom: cron.monthdays.first
                     else
                       cron
                     end
  end.values
end
merge_by_dow(ary) click to toggle source
# File lib/cron_zone_converter/merger.rb, line 36
def merge_by_dow(ary)
  ary.each_with_object({}) do |cron, merged|
    marker         = cron_marker cron, :dow
    merged[marker] = if merged.key?(marker)
                       Duplicator.change merged[marker], add_dow: cron.weekdays.first.first
                     else
                       cron
                     end
  end.values
end
merge_by_hour(ary) click to toggle source
# File lib/cron_zone_converter/merger.rb, line 14
def merge_by_hour(ary)
  ary.each_with_object({}) do |cron, merged|
    marker         = cron_marker cron, :hour
    merged[marker] = if merged.key?(marker)
                       Duplicator.change merged[marker], add_hour: cron.hours.first
                     else
                       cron
                     end
  end.values
end