class String

Public Instance Methods

parse_time(zone = nil) click to toggle source

Parse content to local time

@param [String] zone time zone with site

# File lib/spider_bot/string/time.rb, line 13
def parse_time(zone = nil)
  Time.zone = zone.nil? ? "UTC" : zone

  @time_config = DATE_CONFIG["date"]["time"]
  @month_config = DATE_CONFIG["date"]["month"]
  @other_config = DATE_CONFIG["date"]["other"]
  @time_str = @time_config.values.join("|")

  @time_regex = %r"\d+[\s|\S]*(?:#{@time_str})\s*(?:#{@other_config["ago"]})"
  @today_regex = %r"#{@other_config["today"]}\s*\d{1,2}:\d{1,2}"

  case self 
  when @time_regex
    parse_date_ago
  when @today_regex 
    parse_today
  else
    parse_date
  end

end

Private Instance Methods

parse_date() click to toggle source
# File lib/spider_bot/string/time.rb, line 69
def parse_date
  date_regex1 = %r"(\d{4})[^\d|:]{1,2}(\d{1,2})[^\d|:]{1,2}(\d{1,2})"
  date_regex2 = %r"(\d{1,2})[^\d|:]{1,2}(\d{1,2})[^\d|:]{1,2}(\d{4})"
  date_regex3 = %r"([\w|\W]+)[^\d|\w]{1,2}(\d{1,2})[^\d|:]*(\d{4})"
  time = self.match %r"\d{1,2}\s*:\d{1,2}\s*:*\d{0,2}(?:#{@other_config["am"]}|#{@other_config["pm"]})*"
    time = time[0].gsub(%r"#{@other_config["am"]}","am").gsub(%r"#{@other_config["pm"]}","pm") if time

  case self
  when date_regex1

    date_text = self.match date_regex1

    Time.zone.parse "#{date_text[1]}-#{date_text[2]}-#{date_text[3]} #{time}"
  when date_regex2
    date_text = self.match date_regex2
    Time.zone.parse("#{date_text[3]}-#{date_text[1]}-#{date_text[2]} #{time}")
  when date_regex3
    date_text = self.match date_regex3
    month = case date_text[1].downcase
            when %r"#{@month_config["jan"]}"
              1
            when %r"#{@month_config["feb"]}"
              2
            when %r"#{@month_config["mar"]}"
              3
            when %r"#{@month_config["apr"]}"
              4
            when %r"#{@month_config["may"]}"
              5
            when %r"#{@month_config["jun"]}"
              6
            when %r"#{@month_config["jul"]}"
              7
            when %r"#{@month_config["aug"]}"
              8
            when %r"#{@month_config["sep"]}"
              9
            when %r"#{@month_config["oct"]}"
              10
            when %r"#{@month_config["nov"]}"
              11
            when %r"#{@month_config["dec"]}"
              12
            end
    Time.zone.parse "#{date_text[3]}-#{month}-#{date_text[2]} #{time}"
  else
    Time.zone.parse(self)
  end
end
parse_date_ago() click to toggle source

Parse content if has keyword mean 'ago'

# File lib/spider_bot/string/time.rb, line 38
def parse_date_ago
  now = Time.zone.now 
  regex_text = self.match(@time_regex)[0]
  @time = case regex_text
          when %r"#{@time_config["year"]}"
            now.years_ago regex_text.match(/\d+/)[0].to_i
          when %r"#{@time_config["month"]}"
            now.months_ago regex_text.match(/\d+/)[0].to_i
          when %r"#{@time_config["week"]}"
            now.ago regex_text.match(/\d+/)[0].to_i * 60 * 60 * 24 * 7
          when %r"#{@time_config["day"]}"
            now.ago regex_text.match(/\d+/)[0].to_i * 60 * 60 * 24
          when %r"#{@time_config["hour"]}"
            now.ago regex_text.match(/\d+/)[0].to_i * 60 * 60
          when %r"#{@time_config["min"]}"
            now.ago regex_text.match(/\d+/)[0].to_i * 60 
          when %r"#{@time_config["second"]}"
            now.ago regex_text.match(/\d+/)[0].to_i
          else
            raise "get date errors"
          end
end
parse_today() click to toggle source

Parse content if has keyword mean 'today'

# File lib/spider_bot/string/time.rb, line 62
def parse_today
  now = Time.zone.now 
  regex_text = self.match(/\d{1,2}\s*:\s*\d{1,2}:*\d{0,2}/)[0]
  time_str = now.to_date.to_s + " " + regex_text
  Time.zone.parse(time_str)
end