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