lib/hijri/date.rb in hijri-0.4.0 vs lib/hijri/date.rb in hijri-0.5.0
- old
+ new
@@ -3,14 +3,12 @@
include Comparable
attr_reader :day, :month, :year
- # TODO change mon to month in format.rb.
alias :mon :month
alias :mday :day
-
MONTHNAMES = [nil] + %w(Muharram Safar Rabia-Awwal Rabia-Thani Jumaada-Awal Jumaada-Thani Rajab Sha'ban Ramadan Shawwal Dhul-Qi'dah Dhul-Hijjah)
DAYNAMES = %w(as-Sabt al-Ahad al-Ithnayn ath-Thalaathaa al-Arba'aa' al-Khamis al-Jumu'ah)
ABBR_MONTHNAMES = [nil] + ["Muharram", "Safar", "Rabia I", "Rabia II", "Jumaada I", "Jumaada II", "Rajab", "Sha'ban", "Ramadan", "Shawwal", "Dhul-Qi'dah", "Dhul-Hijjah"]
ABBR_DAYNAMES = %w(Sabt Ahad Ithnayn Thalaathaa Arba'aa' Khamis Jumu'ah)
@@ -34,32 +32,37 @@
date.to_hijri
end
end
def initialize(year=1, month=1, day=1)
- @year, @month, @day = year, month, day
+ if valid_date?(year, month, day)
+ @year, @month, @day = year, month, day
+ else
+ raise ArgumentError, "Invalid Date"
+ end
end
-
- def islamic_leap_year?
- return (((((11 * self.year) + 14) % 30) < 11) ? true : false)
+
+ def change(kargs)
+ # Remove nil values
+ kargs.reject!{|k,v| v.nil?}
+ @year = kargs.fetch :year , year
+ @month = kargs.fetch :month, month
+ @day = kargs.fetch :day , day
end
- def last_day_of_islamic_month
- # Last day in month during year on the Islamic calendar.
- return ((self.month % 2 == 1) || (self.month == 12 && islamic_leap_year?) ? 30 : 29)
- end
-
def to_s
- "#{@year}-#{sprintf('%02d', @month)}-#{sprintf('%02d', @day)}"
+ format('%.4d-%02d-%02d', year, month, day)
end
def <=>(date)
# Make sure the date is a Hijri::Date instance
date = date.to_hijri
if self.to_s == date.to_s
return 0
- elsif @year > date.year || (@year == date.year && @month > date.month) || (@year == date.year && @month == date.month && @day > date.day)
+ elsif @year > date.year ||
+ (@year == date.year && @month > date.month) ||
+ (@year == date.year && @month == date.month && @day > date.day)
return 1
else
return -1
end
end
@@ -79,9 +82,16 @@
end
# Just to have a consistent Interface.
def to_hijri
self
+ end
+
+ def valid_date?(year, month, day)
+ return false unless (1..INFINITY).cover?(year)
+ return false unless (1..12).cover?(month)
+ return false unless (1..30).cover?(day)
+ return true
end
def yday
(((month - 1) * AVERAGE_MONTH_DAYS) + day).floor
end