Advertisement
saasbook

Extract method (2), encapsulate class

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