Commit 0f6edf8638c24906371a43bd9aa57700869798c9

Authored by Aurélio A. Heckert
1 parent c4c81bc9

condensed date periods

app/helpers/dates_helper.rb
... ... @@ -23,11 +23,13 @@ module DatesHelper
23 23 end
24 24  
25 25 # formats a date for displaying.
26   - def show_date(date, use_numbers = false)
  26 + def show_date(date, use_numbers = false, year=true)
27 27 if date && use_numbers
28   - _('%{month}/%{day}/%{year}') % { :day => date.day, :month => date.month, :year => date.year }
  28 + date_format = year ? _('%{month}/%{day}/%{year}') : _('%{month}/%{day}')
  29 + date_format % { :day => date.day, :month => date.month, :year => date.year }
29 30 elsif date
30   - _('%{month} %{day}, %{year}') % { :day => date.day, :month => month_name(date.month), :year => date.year }
  31 + date_format = year ? _('%{month_name} %{day}, %{year}') : _('%{month_name} %{day}')
  32 + date_format % { :day => date.day, :month_name => month_name(date.month), :year => date.year }
31 33 else
32 34 ''
33 35 end
... ... @@ -46,7 +48,27 @@ module DatesHelper
46 48 if (date1 == date2) || (date2.nil?)
47 49 show_date(date1, use_numbers)
48 50 else
49   - _('from %{date1} to %{date2}') % {:date1 => show_date(date1, use_numbers), :date2 => show_date(date2, use_numbers)}
  51 + if date1.year == date2.year
  52 + if date1.month == date2.month
  53 + _('from %{month} %{day1} to %{day2}, %{year}') % {
  54 + :day1 => date1.day,
  55 + :day2 => date2.day,
  56 + :month => use_numbers ? date1.month : month_name(date1.month),
  57 + :year => date1.year
  58 + }
  59 + else
  60 + _('from %{date1} to %{date2}, %{year}') % {
  61 + :date1 => show_date(date1, use_numbers, false),
  62 + :date2 => show_date(date2, use_numbers, false),
  63 + :year => date1.year
  64 + }
  65 + end
  66 + else
  67 + _('from %{date1} to %{date2}') % {
  68 + :date1 => show_date(date1, use_numbers),
  69 + :date2 => show_date(date2, use_numbers)
  70 + }
  71 + end
50 72 end
51 73 end
52 74  
... ...
test/unit/dates_helper_test.rb
... ... @@ -10,20 +10,40 @@ class DatesHelperTest < ActiveSupport::TestCase
10 10 end
11 11  
12 12 should 'display date with translation' do
13   - expects(:_).with('%{month} %{day}, %{year}').returns('%{day} de %{month} de %{year}')
  13 + expects(:_).with('%{month_name} %{day}, %{year}').returns('%{day} de %{month_name} de %{year}')
14 14 expects(:_).with('January').returns('Janeiro')
15 15 assert_equal '11 de Janeiro de 2008', show_date(Date.new(2008, 1, 11))
16 16 end
17 17  
18 18 should 'generate period with two dates' do
19 19 date1 = mock
  20 + date1.stubs(:year).returns('A')
20 21 expects(:show_date).with(date1, anything).returns('XXX')
21 22 date2 = mock
  23 + date2.stubs(:year).returns('B')
22 24 expects(:show_date).with(date2, anything).returns('YYY')
23 25 expects(:_).with('from %{date1} to %{date2}').returns('from %{date1} to %{date2}')
24 26 assert_equal 'from XXX to YYY', show_period(date1, date2)
25 27 end
26 28  
  29 + should 'generate period with in two diferent years' do
  30 + date1 = Date.new(1920, 1, 2)
  31 + date2 = Date.new(1992, 4, 6)
  32 + assert_equal 'from January 2, 1920 to April 6, 1992', show_period(date1, date2)
  33 + end
  34 +
  35 + should 'generate period with in two diferent months of the same year' do
  36 + date1 = Date.new(2013, 2, 1)
  37 + date2 = Date.new(2013, 3, 1)
  38 + assert_equal 'from February 1 to March 1, 2013', show_period(date1, date2)
  39 + end
  40 +
  41 + should 'generate period with in two days of the same month' do
  42 + date1 = Date.new(2013, 3, 27)
  43 + date2 = Date.new(2013, 3, 28)
  44 + assert_equal 'from March 27 to 28, 2013', show_period(date1, date2)
  45 + end
  46 +
27 47 should 'generate period with two equal dates' do
28 48 date1 = mock
29 49 expects(:show_date).with(date1, anything).returns('XXX')
... ...