Commit 0f6edf8638c24906371a43bd9aa57700869798c9
1 parent
c4c81bc9
Exists in
staging
and in
42 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') | ... | ... |