Advertisement
saasbook

date_calculator_ref_2.rb

Mar 1st, 2014
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.01 KB | None | 0 0
  1. class DateCalculator
  2.   attr_accessor :days, :year
  3.   def initialize(days)
  4.     @days = days
  5.     @year = 1980
  6.   end
  7.  
  8.   def convert
  9.     while (@days > 365) do
  10.       if leap_year?
  11.         add_leap_year
  12.       else
  13.         add_regular_year
  14.       end
  15.     end
  16.     return @year
  17.   end
  18.  
  19.   # extracted methods
  20.   def leap_year?
  21.     (@year % 400 == 0 ||
  22.       (@year % 4 == 0 && @year % 100 != 0))
  23.   end
  24.  
  25.   def add_leap_year
  26.     if (@days > 366)
  27.       @days -= 366
  28.       @year += 1
  29.     end
  30.   end
  31.  
  32.   def add_regular_year
  33.     @days -= 365
  34.     @year += 1
  35.   end
  36. end
  37.  
  38. describe DateCalculator do
  39.   describe 'leap years' do
  40.     before(:each) do
  41.       @calc = DateCalculator.new(0)
  42.     end
  43.     def test_leap_year(year)
  44.       @calc.year = year
  45.       @calc.leap_year?
  46.     end
  47.     it 'should occur every 4 years' do
  48.       test_leap_year(2004).should be_true
  49.     end
  50.     it 'but not every 100th year' do
  51.       test_leap_year(1900).should_not be_true
  52.     end
  53.     it 'but YES every 400th year' do
  54.       test_leap_year(2000).should be_true
  55.     end
  56.   end
  57. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement