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 | 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') | ... | ... |