lib/sculd/plan.rb in sculd-0.0.0 vs lib/sculd/plan.rb in sculd-0.0.1

- old
+ new

@@ -9,28 +9,62 @@ # # # class Sculd::Plan class NotDefinedError < Exception; end + class WeekdayMismatchError < Exception; end + class NotWeekdayError < Exception; end attr_reader :description REMINDER_PRIORITY = 10000 DEADLINE_PRIORITY = 20000 # Parse and return date, type, option. - def self.parse(str) - #/\[(\d{4})-(\d{2})-(\d{2})\]([@+!-])(\d*)/ =~ @line - #/\[\d{4}-\d{2}-\d{2}(?: \d{2}\:\d{2})?\][@+!-](\d*)(.*)/ =~ line - #/\[\d{4}-\d{2}-\d{2}(?: \d{2}\:\d{2})?\][@+!-](\d*)(.*)/ =~ str - #/\[(\d{4}-\d{2}-\d{2}(?: \d{2}\:\d{2})?\][@+!-](\d*)(.*)/ =~ str - /\[(\d{4}-\d{2}-\d{2})\]([@+!-])(\S*)(.*)$/ =~ str - #/\[(^]+)\](.)(\S*)/ =~ str - #date = DateTime::new($1.to_i, $2.to_i, $3.to_i) - datetime = DateTime::parse $1 - type = $2 - option = $3.to_s + def self.parse(str, io = $stdout) + #/\[([\d\- :]*)\](.)(\S*)/ =~ str #OK + /\[([^\]]*)\](.)(\S*)/ =~ str #OK + + datestr = $1 + type = $2 + option = $3.to_s + + datetime = DateTime::parse datestr + if /\((.+)\)/ =~ datestr + #pp $1 + #pp datetime.wday + #pp self.wday($1) + unless self.wday($1) == datetime.wday + #io.puts "#{datetime} is #{Sculd::Manager::WEEKDAYS[datetime.wday]}," + #io.puts "but string contains #{datestr}." + puts "ERROR:" + puts "#{datetime} is #{Sculd::Manager::WEEKDAYS[datetime.wday]}," + puts "but string contains #{datestr}." + raise WeekdayMismatchError + end + end return datetime, type, option + end + + def self.wday(str) + case str + when /^Su/i + return 0 + when /^M/i + return 1 + when /^Tu/i + return 2 + when /^W/i + return 3 + when /^Th/i + return 4 + when /^F/i + return 5 + when /^Sa/i + return 6 + else + raise NotWeekdayError + end end # def initialize(datetime, option, description) @datetime = datetime