Sha256: 95adcc406a030f73e802044b0d3060fcc13c6f197dda2fae20100241ed9a89ac

Contents?: true

Size: 1.75 KB

Versions: 6

Compression:

Stored size: 1.75 KB

Contents

require "active_support/core_ext/time"

class RangeGenerator
  attr_reader :from_date_str, :fetch_days, :profile_time_zone

  def initialize(from_date_str, fetch_days, profile_time_zone)
    @from_date_str = from_date_str
    @fetch_days = fetch_days
    @profile_time_zone = profile_time_zone
  end

  def generate_range
    validate
    show_warnings
    range_only_present.map{|date| date.to_s}
  end

  private

  def from_date
    Date.parse(from_date_str)
  end

  def validate
    begin
      from_date
    rescue ArgumentError # invalid date
      raise Embulk::ConfigError.new "from_date '#{from_date_str}' is invalid date"
    end

    if fetch_days && fetch_days < 1
      # `days` only allowed nil or positive number
      raise Embulk::ConfigError.new "fetch_days '#{fetch_days}' is invalid. Please specify bigger number than 0."
    end
  end

  def show_warnings
    if from_date_too_early?
      Embulk.logger.warn "Mixpanel allow 2 days before to from_date, so no data is input."
    end

    if overdays?
      Embulk.logger.warn "These dates are too early access, ignored them: from #{overdays.first} to #{overdays.last}"
    end
  end

  def range
    if from_date_too_early?
      return []
    end

    if fetch_days
      from_date..(from_date + fetch_days - 1)
    else
      from_date..today
    end
  end

  def range_only_present
    range.find_all{|date| date <= today}
  end

  def overdays?
    ! overdays.empty?
  end

  def overdays
    range.to_a - range_only_present.to_a
  end

  def from_date_too_early?
    from_date > today
  end

  def today
    zone = ActiveSupport::TimeZone[@profile_time_zone]
    Embulk.logger.warn "Coudn't find timezone support for #{@profile_time_zone}" if zone.nil?
    @today ||= (zone.nil? ? Date.today : zone.today)
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
embulk-input-mixpanel-0.6.1 lib/range_generator.rb
embulk-input-mixpanel-0.5.15 lib/range_generator.rb
embulk-input-mixpanel-0.5.14 lib/range_generator.rb
embulk-input-mixpanel-0.5.13 lib/range_generator.rb
embulk-input-mixpanel-0.5.12 lib/range_generator.rb
embulk-input-mixpanel-0.5.12.alpha.1 lib/range_generator.rb