Commit 0f6edf8638c24906371a43bd9aa57700869798c9
1 parent
c4c81bc9
Exists in
master
and in
29 other branches
condensed date periods
Showing
2 changed files
with
47 additions
and
5 deletions
Show diff stats
app/helpers/dates_helper.rb
@@ -23,11 +23,13 @@ module DatesHelper | @@ -23,11 +23,13 @@ module DatesHelper | ||
23 | end | 23 | end |
24 | 24 | ||
25 | # formats a date for displaying. | 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 | if date && use_numbers | 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 | elsif date | 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 | else | 33 | else |
32 | '' | 34 | '' |
33 | end | 35 | end |
@@ -46,7 +48,27 @@ module DatesHelper | @@ -46,7 +48,27 @@ module DatesHelper | ||
46 | if (date1 == date2) || (date2.nil?) | 48 | if (date1 == date2) || (date2.nil?) |
47 | show_date(date1, use_numbers) | 49 | show_date(date1, use_numbers) |
48 | else | 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 | end | 72 | end |
51 | end | 73 | end |
52 | 74 |
test/unit/dates_helper_test.rb
@@ -10,20 +10,40 @@ class DatesHelperTest < ActiveSupport::TestCase | @@ -10,20 +10,40 @@ class DatesHelperTest < ActiveSupport::TestCase | ||
10 | end | 10 | end |
11 | 11 | ||
12 | should 'display date with translation' do | 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 | expects(:_).with('January').returns('Janeiro') | 14 | expects(:_).with('January').returns('Janeiro') |
15 | assert_equal '11 de Janeiro de 2008', show_date(Date.new(2008, 1, 11)) | 15 | assert_equal '11 de Janeiro de 2008', show_date(Date.new(2008, 1, 11)) |
16 | end | 16 | end |
17 | 17 | ||
18 | should 'generate period with two dates' do | 18 | should 'generate period with two dates' do |
19 | date1 = mock | 19 | date1 = mock |
20 | + date1.stubs(:year).returns('A') | ||
20 | expects(:show_date).with(date1, anything).returns('XXX') | 21 | expects(:show_date).with(date1, anything).returns('XXX') |
21 | date2 = mock | 22 | date2 = mock |
23 | + date2.stubs(:year).returns('B') | ||
22 | expects(:show_date).with(date2, anything).returns('YYY') | 24 | expects(:show_date).with(date2, anything).returns('YYY') |
23 | expects(:_).with('from %{date1} to %{date2}').returns('from %{date1} to %{date2}') | 25 | expects(:_).with('from %{date1} to %{date2}').returns('from %{date1} to %{date2}') |
24 | assert_equal 'from XXX to YYY', show_period(date1, date2) | 26 | assert_equal 'from XXX to YYY', show_period(date1, date2) |
25 | end | 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 | should 'generate period with two equal dates' do | 47 | should 'generate period with two equal dates' do |
28 | date1 = mock | 48 | date1 = mock |
29 | expects(:show_date).with(date1, anything).returns('XXX') | 49 | expects(:show_date).with(date1, anything).returns('XXX') |