class Mistaker::Date

Constants

DAY

Public Instance Methods

mistake(err_type = rand.rand(DATE_MAX), mdy = rand.rand(3)) click to toggle source
# File lib/mistaker/date.rb, line 20
def mistake(err_type = rand.rand(DATE_MAX), mdy = rand.rand(3))
  @str = reformat(str)
  y,m,d = reformat(str).split('-').map &:to_i

  case err_type
  when ONE_DIGIT_UP
    case mdy
    when YEAR
      y += 1
    when MONTH
      m += 1
    when DAY
      d += 1
    end
  when ONE_DIGIT_DOWN
    case mdy
    when YEAR
      y -= 1
    when MONTH
      m -= 1
    when DAY
      d -= 1
    end
  when KEY_SWAP
    case mdy
    when YEAR
      y = y.to_s
      a,b = y[2],y[3]
      y[2], y[3] = b, a
    when MONTH
      m = m.to_s.rjust(2,'0')
      m.reverse!
    when DAY
      d = d.to_s.rjust(2,'0')
      d.reverse!
    end
  when ONE_DECADE_DOWN
    y -= 10
  when Y2K
    y = y >= 2000 ? "00#{y.to_s[2..3]}" : "20#{y.to_s[2..3]}"
  when MONTH_DAY_SWAP
    m, d = d, m
  when MISREAD
    case mdy
    when YEAR
      y = y.to_s
      y[2] = MISREAD_NUMBERS[y[2]]
    when MONTH
      m = m.to_s
      m[m.length - 1] = MISREAD_NUMBERS[m[m.length - 1]]
    when DAY
      d = d.to_s
      d[d.length - 1] = MISREAD_NUMBERS[d[d.length - 1]]
    end
  when NUMERIC_KEY_PAD
    case mdy
    when YEAR
      y = y.to_s
      y[3] = TEN_KEYS[y[3]]
    when MONTH
      m = m.to_s
      m[m.length - 1] = TEN_KEYS[m[m.length - 1]]
    when DAY
      d = d.to_s
      d[d.length - 1] = TEN_KEYS[d[d.length - 1]]
    end
  when DIGIT_SHIFT
    d = m
    m = y.to_s[2..3]
    y = "00#{y.to_s[0..1]}"
  end

  "#{y}-#{m.to_s.rjust(2,'0')}-#{d.to_s.rjust(2,'0')}"
end
reformat(str) click to toggle source
# File lib/mistaker/date.rb, line 7
def reformat(str)
  case str
  when /\A(\d{1,2})\/(\d{1,2})\/(\d{4})\z/
    "#{$3}-#{$1.rjust(2, '0')}-#{$2.rjust(2, '0')}"
  when /\A(\d{1,2})\/(\d{1,2})\/(\d{2})\z/
    "20#{$3}-#{$1.rjust(2, '0')}-#{$2.rjust(2, '0')}"
  when /\A(\d{4})\-(\d{2})\-(\d{2})\z/
    str
  else
    ::Date.parse(str).to_s
  end
end