From 0f6edf8638c24906371a43bd9aa57700869798c9 Mon Sep 17 00:00:00 2001 From: Aurélio A. Heckert Date: Thu, 28 Mar 2013 21:59:33 -0300 Subject: [PATCH] condensed date periods --- app/helpers/dates_helper.rb | 30 ++++++++++++++++++++++++++---- test/unit/dates_helper_test.rb | 22 +++++++++++++++++++++- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/app/helpers/dates_helper.rb b/app/helpers/dates_helper.rb index 46ea061..57dc611 100644 --- a/app/helpers/dates_helper.rb +++ b/app/helpers/dates_helper.rb @@ -23,11 +23,13 @@ module DatesHelper end # formats a date for displaying. - def show_date(date, use_numbers = false) + def show_date(date, use_numbers = false, year=true) if date && use_numbers - _('%{month}/%{day}/%{year}') % { :day => date.day, :month => date.month, :year => date.year } + date_format = year ? _('%{month}/%{day}/%{year}') : _('%{month}/%{day}') + date_format % { :day => date.day, :month => date.month, :year => date.year } elsif date - _('%{month} %{day}, %{year}') % { :day => date.day, :month => month_name(date.month), :year => date.year } + date_format = year ? _('%{month_name} %{day}, %{year}') : _('%{month_name} %{day}') + date_format % { :day => date.day, :month_name => month_name(date.month), :year => date.year } else '' end @@ -46,7 +48,27 @@ module DatesHelper if (date1 == date2) || (date2.nil?) show_date(date1, use_numbers) else - _('from %{date1} to %{date2}') % {:date1 => show_date(date1, use_numbers), :date2 => show_date(date2, use_numbers)} + if date1.year == date2.year + if date1.month == date2.month + _('from %{month} %{day1} to %{day2}, %{year}') % { + :day1 => date1.day, + :day2 => date2.day, + :month => use_numbers ? date1.month : month_name(date1.month), + :year => date1.year + } + else + _('from %{date1} to %{date2}, %{year}') % { + :date1 => show_date(date1, use_numbers, false), + :date2 => show_date(date2, use_numbers, false), + :year => date1.year + } + end + else + _('from %{date1} to %{date2}') % { + :date1 => show_date(date1, use_numbers), + :date2 => show_date(date2, use_numbers) + } + end end end diff --git a/test/unit/dates_helper_test.rb b/test/unit/dates_helper_test.rb index e63593c..d3a32a8 100644 --- a/test/unit/dates_helper_test.rb +++ b/test/unit/dates_helper_test.rb @@ -10,20 +10,40 @@ class DatesHelperTest < ActiveSupport::TestCase end should 'display date with translation' do - expects(:_).with('%{month} %{day}, %{year}').returns('%{day} de %{month} de %{year}') + expects(:_).with('%{month_name} %{day}, %{year}').returns('%{day} de %{month_name} de %{year}') expects(:_).with('January').returns('Janeiro') assert_equal '11 de Janeiro de 2008', show_date(Date.new(2008, 1, 11)) end should 'generate period with two dates' do date1 = mock + date1.stubs(:year).returns('A') expects(:show_date).with(date1, anything).returns('XXX') date2 = mock + date2.stubs(:year).returns('B') expects(:show_date).with(date2, anything).returns('YYY') expects(:_).with('from %{date1} to %{date2}').returns('from %{date1} to %{date2}') assert_equal 'from XXX to YYY', show_period(date1, date2) end + should 'generate period with in two diferent years' do + date1 = Date.new(1920, 1, 2) + date2 = Date.new(1992, 4, 6) + assert_equal 'from January 2, 1920 to April 6, 1992', show_period(date1, date2) + end + + should 'generate period with in two diferent months of the same year' do + date1 = Date.new(2013, 2, 1) + date2 = Date.new(2013, 3, 1) + assert_equal 'from February 1 to March 1, 2013', show_period(date1, date2) + end + + should 'generate period with in two days of the same month' do + date1 = Date.new(2013, 3, 27) + date2 = Date.new(2013, 3, 28) + assert_equal 'from March 27 to 28, 2013', show_period(date1, date2) + end + should 'generate period with two equal dates' do date1 = mock expects(:show_date).with(date1, anything).returns('XXX') -- libgit2 0.21.2