rutils 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,48 +1,65 @@
1
- require 'date'
2
-
3
1
  module RuTils
4
- module DateTime
5
- ABBR_MONTHNAMES = [nil] + %w{ Янв Фев Мар Апр Май Июн Июл Авг Сен Окт Ноя Дек }
6
- MONTHNAMES = [nil] + %w{ Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь }
7
- DAYNAMES = %w(Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота)
8
- ABBR_DAYNAMES = %w(Вск Пн Вт Ср Чт Пт Сб)
9
-
10
- def self.distance_of_time_in_words(from_time, to_time = 0, include_seconds = false, absolute = false) #nodoc
11
- from_time = from_time.to_time if from_time.respond_to?(:to_time)
12
- to_time = to_time.to_time if to_time.respond_to?(:to_time)
13
- distance_in_minutes = (((to_time - from_time).abs)/60).round
14
- distance_in_seconds = ((to_time - from_time).abs).round
15
-
16
- case distance_in_minutes
17
- when 0..1
18
- return (distance_in_minutes==0) ? 'меньше минуты' : '1 минуту' unless include_seconds
19
-
20
- case distance_in_seconds
21
- when 0..5 then 'менее 5 секунд'
22
- when 6..10 then 'менее 10 секунд'
23
- when 11..20 then 'менее 20 секунд'
24
- when 21..40 then 'пол-минуты'
25
- when 41..59 then 'меньше минуты'
26
- else '1 минуту'
27
- end
28
-
29
- when 2..45 then distance_in_minutes.to_s +
30
- " " + distance_in_minutes.items("минута", "минуты", "минут")
31
- when 46..90 then 'около часа'
32
- # исключение, сдвигаем на один влево чтобы соответствовать падежу
33
- when 90..1440 then "около " + (distance_in_minutes.to_f / 60.0).round.to_s +
34
- " " + (distance_in_minutes.to_f / 60.0).round.items("часа", "часов", '')
35
- when 1441..2880 then '1 день'
36
- else (distance_in_minutes / 1440).round.to_s +
37
- " " + (distance_in_minutes / 1440).round.items("день", "дня", "дней")
38
- end
39
- end
40
-
41
- end
2
+ module DateTime
3
+
4
+ def self.distance_of_time_in_words(from_time, to_time = 0, include_seconds = false, absolute = false) #nodoc
5
+ from_time = from_time.to_time if from_time.respond_to?(:to_time)
6
+ to_time = to_time.to_time if to_time.respond_to?(:to_time)
7
+ distance_in_minutes = (((to_time - from_time).abs)/60).round
8
+ distance_in_seconds = ((to_time - from_time).abs).round
9
+
10
+ case distance_in_minutes
11
+ when 0..1
12
+ return (distance_in_minutes==0) ? 'меньше минуты' : '1 минуту' unless include_seconds
13
+
14
+ case distance_in_seconds
15
+ when 0..5 then 'менее 5 секунд'
16
+ when 6..10 then 'менее 10 секунд'
17
+ when 11..20 then 'менее 20 секунд'
18
+ when 21..40 then 'пол-минуты'
19
+ when 41..59 then 'меньше минуты'
20
+ else '1 минуту'
21
+ end
22
+
23
+ when 2..45 then distance_in_minutes.to_s +
24
+ " " + distance_in_minutes.items("минута", "минуты", "минут")
25
+ when 46..90 then 'около часа'
26
+ # исключение, сдвигаем на один влево чтобы соответствовать падежу
27
+ when 90..1440 then "около " + (distance_in_minutes.to_f / 60.0).round.to_s +
28
+ " " + (distance_in_minutes.to_f / 60.0).round.items("часа", "часов", '')
29
+ when 1441..2880 then '1 день'
30
+ else (distance_in_minutes / 1440).round.to_s +
31
+ " " + (distance_in_minutes / 1440).round.items("день", "дня", "дней")
32
+ end
33
+ end
34
+
35
+ @@ignored = "\xFF\xFF\xFF\xFF" # %% == Literal "%" character
36
+
37
+ def self.ru_strftime(date='%d.%m.%Y', time='')
38
+ date.gsub!(/%%/, @@ignored)
39
+ date.gsub!(/%a/, Date::RU_ABBR_DAYNAMES[time.wday])
40
+ date.gsub!(/%A/, Date::RU_DAYNAMES[time.wday])
41
+ date.gsub!(/%b/, Date::RU_ABBR_MONTHNAMES[time.mon])
42
+ date.gsub!(/%B/, Date::RU_MONTHNAMES[time.mon])
43
+ date.gsub!(@@ignored, '%%')
44
+ end
45
+ end
42
46
  end
43
47
 
44
48
  class Date
45
- def ru_strftime(*args)
46
- RuTils::DateTime::RussianDate.new(self).strftime(*args)
47
- end
49
+ RU_MONTHNAMES = [nil] + %w{ Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь }
50
+ RU_DAYNAMES = %w(Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота)
51
+ RU_ABBR_MONTHNAMES = [nil] + %w{ Янв Фев Мар Апр Май Июн Июл Авг Сен Окт Ноя Дек }
52
+ RU_ABBR_DAYNAMES = %w(Вск Пн Вт Ср Чт Пт Сб)
53
+ RU_INFLECTED_MONTHNAMES = [nil] + %w{ Января Февраля Марта Апреля Мая Июня Июля Авгуса Сентября Октября Ноября Декабря }
54
+ # RU_DAYNAMES_E -- оставить?
55
+ RU_DAYNAMES_E = [nil] + %w{первое второе третье четвёртое пятое шестое седьмое восьмое девятое десятое одиннадцатое двенадцатое тринадцатое четырнадцатое пятнадцатое шестнадцатое семнадцатое восемнадцатое девятнадцатое двадцатое двадцать тридцатое тридцатьпервое}
56
+ end
57
+
58
+ class Time
59
+ alias_method :strftime_norutils, :strftime
60
+
61
+ def strftime(date)
62
+ RuTils::DateTime::ru_strftime(date, self) if RuTils::overrides_enabled?
63
+ strftime_norutils(date)
64
+ end
48
65
  end