class Shellout::Date
Public Class Methods
from_str(date_str, base=Date.today)
click to toggle source
# File lib/shellout/date.rb, line 6 def self.from_str(date_str, base=Date.today) raise ArgumentError.new("Can't convert nil to a Date") \ if date_str.nil? args = [date_str, base] return parse_str_from_english(*args) \ || parse_str_from_offset(*args) \ || parse_str_from_ymd(*args) \ || (raise ArgumentError.new( "Failed to convert String(#{date_str}) to a Date")) end
Private Class Methods
parse_str_from_english(date_str, base)
click to toggle source
# File lib/shellout/date.rb, line 20 def self.parse_str_from_english(date_str, base) return base if date_str == 'today' || date_str.empty? return nil end
parse_str_from_offset(date_str, base)
click to toggle source
# File lib/shellout/date.rb, line 25 def self.parse_str_from_offset(date_str, base) return case date_str.chars.first when '-' base - Integer(date_str[1..-1]) when '+' base + Integer(date_str[1..-1]) else nil end end
parse_str_from_ymd(date_str, base)
click to toggle source
# File lib/shellout/date.rb, line 36 def self.parse_str_from_ymd(date_str, base) date = date_str.split('-').collect {|d| d.to_i} case date.length when 1 return Date.civil(base.year, base.month, *date) when 2 return Date.civil(base.year, *date) when 3 if date[0] < 70 date[0] += 2000 elsif date[0] < 100 date[0] += 1900 end return Date.civil(*date) end return nil end