# frozen_string_literal: true require 'date' module StrictTodo class Checker class << self def perform(line:) delete_index = line.index('TODO') || line.index('FIXME') return nil if delete_index.nil? parse_line = line.slice(delete_index..) unless delete_index.zero? line.slice!(0..delete_index-1) end if check_format(line: parse_line).nil? return "フォーマットエラー" end date = parse_line.match(/[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])/)[0] if check_date(date: date) return "期限を過ぎています" end nil end private def check_format(line:) line =~ /\A(TODO|FIXME)\((\w|-)*:[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])\).*\Z/ end def check_date(date:) Date.parse(date) < Date.today end end end end