module Tot::Utils

Public Class Methods

datetime_filter(buf) click to toggle source
# File lib/tot.rb, line 122
def datetime_filter(buf) #{{{
  today = DateTime.now
  ret = nil
  case buf
  when /^(今日)/
    ret = today
  when /^(明日|あした|あす)/
    ret = today + 1
  when /^(明後日|あさって)/
    ret = today + 2
  when /^しあさって/
    ret = today + 3
  when /^(日|月|火|水|木|金|土)曜(日)?/
    # 次の○曜日
    date_offset = ([ '日', '月', '火', '水', '木', '金', '土' ].index($1) - today.wday + 7) % 7
    date_offset += 7 if date_offset == 0
    ret = today + date_offset
  when /^([0-9]+\/[0-9]+\/[0-9]+)/# yyyy/mm/dd
    ret = DateTime.parse($1)
  when /^([0-9]+\/[0-9]+)/# mm/dd
    date = DateTime.parse($1)
    # 過去の日付だったら来年にする
    while date < today
      date = date >> 12
    end
    ret = date
  when /^([0-9]+)/# mmddd
    datestr = $1
    case datestr.length
    when 2
      # 12   => 1/2
      datestr = datestr.slice(0..0) + "/" + datestr.slice(1..1)
    when 3
      # 123  => 1/23 ※ 12/3 の可能性もあるけどそうはしない
      datestr = datestr.slice(0..0) + "/" + datestr.slice(1..2)
    when 4
      # 1230 => 12/30
      datestr = datestr.slice(0..1) + "/" + datestr.slice(2..3)
    else
      raise ArgumentError , "不正な値です"
    end
    date = DateTime.parse(datestr)
    # 過去の日付だったら来年にする
    while date < today
      date = date >> 12
    end
    ret = date
  end
  ret
end
stdin_incoming?() click to toggle source
# File lib/tot.rb, line 189
def stdin_incoming? #{{{
  (File.pipe?(STDIN) || File.select([STDIN], [], [], 0) != nil)
end
time_filter(buf) click to toggle source
# File lib/tot.rb, line 173
def time_filter(buf) #{{{
  ret = []
  case buf
  when /(\d+):(\d+)/, /(\d+)時(\d+)分/, /(\d+)じ(\d+)ふん/
    ret[0] = $1.to_i
    ret[1] = $2.to_i
  when /(\d+)時/
    ret[0] = $1.to_i
    ret[1] = 0
  default
    ret[0] = 0
    ret[1] = 0
  end
  ret
end

Private Instance Methods

datetime_filter(buf) click to toggle source
# File lib/tot.rb, line 122
def datetime_filter(buf) #{{{
  today = DateTime.now
  ret = nil
  case buf
  when /^(今日)/
    ret = today
  when /^(明日|あした|あす)/
    ret = today + 1
  when /^(明後日|あさって)/
    ret = today + 2
  when /^しあさって/
    ret = today + 3
  when /^(日|月|火|水|木|金|土)曜(日)?/
    # 次の○曜日
    date_offset = ([ '日', '月', '火', '水', '木', '金', '土' ].index($1) - today.wday + 7) % 7
    date_offset += 7 if date_offset == 0
    ret = today + date_offset
  when /^([0-9]+\/[0-9]+\/[0-9]+)/# yyyy/mm/dd
    ret = DateTime.parse($1)
  when /^([0-9]+\/[0-9]+)/# mm/dd
    date = DateTime.parse($1)
    # 過去の日付だったら来年にする
    while date < today
      date = date >> 12
    end
    ret = date
  when /^([0-9]+)/# mmddd
    datestr = $1
    case datestr.length
    when 2
      # 12   => 1/2
      datestr = datestr.slice(0..0) + "/" + datestr.slice(1..1)
    when 3
      # 123  => 1/23 ※ 12/3 の可能性もあるけどそうはしない
      datestr = datestr.slice(0..0) + "/" + datestr.slice(1..2)
    when 4
      # 1230 => 12/30
      datestr = datestr.slice(0..1) + "/" + datestr.slice(2..3)
    else
      raise ArgumentError , "不正な値です"
    end
    date = DateTime.parse(datestr)
    # 過去の日付だったら来年にする
    while date < today
      date = date >> 12
    end
    ret = date
  end
  ret
end
stdin_incoming?() click to toggle source
# File lib/tot.rb, line 189
def stdin_incoming? #{{{
  (File.pipe?(STDIN) || File.select([STDIN], [], [], 0) != nil)
end
time_filter(buf) click to toggle source
# File lib/tot.rb, line 173
def time_filter(buf) #{{{
  ret = []
  case buf
  when /(\d+):(\d+)/, /(\d+)時(\d+)分/, /(\d+)じ(\d+)ふん/
    ret[0] = $1.to_i
    ret[1] = $2.to_i
  when /(\d+)時/
    ret[0] = $1.to_i
    ret[1] = 0
  default
    ret[0] = 0
    ret[1] = 0
  end
  ret
end