I needed to calculate the next leap year today, and was happy to find out about Date.leap? via this StackOverflow question.

However, there wasn’t a built-in way that I could find to get the next leap year. It turned out to be pretty simple, but still worth sharing.

# next_leap_year.rb
# License: MIT

require "date"

def next_leap_year(year)
  year += 1 until Date.leap?(year)
  year
end

require "minitest/spec"
require "minitest/autorun"

describe "next_leap_year" do
  describe "given a leap year" do
    it "returns the same year" do
      assert_equal(next_leap_year(2012), 2012)
    end
  end

  describe "given a non-leap year" do
    it "returns the next leap year" do
      assert_equal(next_leap_year(2013), 2016)
    end
  end
end