class RangeGenerator

Attributes

fetch_days[R]
from_date_str[R]
profile_time_zone[R]

Public Class Methods

new(from_date_str, fetch_days, profile_time_zone) click to toggle source
# File lib/range_generator.rb, line 6
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

Public Instance Methods

generate_range() click to toggle source
# File lib/range_generator.rb, line 12
def generate_range
  validate
  show_warnings
  range_only_present.map{|date| date.to_s}
end

Private Instance Methods

from_date() click to toggle source
# File lib/range_generator.rb, line 20
def from_date
  Date.parse(from_date_str)
end
from_date_too_early?() click to toggle source
# File lib/range_generator.rb, line 71
def from_date_too_early?
  from_date > today
end
overdays() click to toggle source
# File lib/range_generator.rb, line 67
def overdays
  range.to_a - range_only_present.to_a
end
overdays?() click to toggle source
# File lib/range_generator.rb, line 63
def overdays?
  ! overdays.empty?
end
range() click to toggle source
# File lib/range_generator.rb, line 47
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
range_only_present() click to toggle source
# File lib/range_generator.rb, line 59
def range_only_present
  range.find_all{|date| date <= today}
end
show_warnings() click to toggle source
# File lib/range_generator.rb, line 37
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
today() click to toggle source
# File lib/range_generator.rb, line 75
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
validate() click to toggle source
# File lib/range_generator.rb, line 24
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