Sha256: 51a486613add41a92601fd5ed08f3b36d78d68a299dfcd2c73af5cf2c7de58be

Contents?: true

Size: 1.38 KB

Versions: 1

Compression:

Stored size: 1.38 KB

Contents

module DelayedCron
  module Scheduling

    def schedule(klass, method_name, options)
      parsed_options = parse_options(options)
      if parsed_options.is_a?(Array)
        parsed_options.each do |opts|
          processor.enqueue_delayed_cron(klass, method_name, opts)
        end
      else
        processor.enqueue_delayed_cron(klass, method_name, parsed_options)
      end
    end

    def parse_options(options)
      original_options = options
      if at = options[:at]
        options = if at.is_a?(Array)
          at.map do |at_option|
            add_interval(original_options.merge(at: at_option))
          end
        else
          add_interval(options)
        end
      end
      options
    end

    def add_interval(options)
      options[:interval] = convert_time_string_to_seconds_interval(options[:at])
      options
    end

    def convert_time_string_to_seconds_interval(scheduled_time_string)
      day_in_seconds = 60 * 60 * 24
      scheduled_time = Time.now.strftime("%Y-%m-%d #{scheduled_time_string}")
      scheduled_time = DateTime.parse(scheduled_time, false).to_time
      scheduled_time += day_in_seconds if Time.now >= scheduled_time
      scheduled_time.to_i - Time.now.to_i
    end

    def timing_opts(interval, options_at)
      timing_opts = { interval: interval }
      timing_opts.merge!(at: options_at) if options_at.present?
      timing_opts
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
delayed_cron-0.2.9 lib/delayed_cron/scheduling.rb