uaenv 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ Версія 0.0.9 - 26.12.2011
2
+ * UaEnv::UaDates#ua_strftime більше не підмінює стандартні методи Time#strftime DateTime#strftime
3
+ * Новий метод UaEnv::UaDates#distance_of_time_in_words
4
+ Версія 0.0.8 - 11.11.2011
5
+ * Змінена структура проекту
6
+ * Модуль UaEnv::DateTime перейменований у UaEnv::UaDates
7
+ * Додані юніт-тести
1
8
  Версія 0.0.6 - 16.02.2009
2
9
  * Код переписаний для підтримки Ruby 1.9
3
10
  * Ruby 1.8 більше не підтримується
data/README.md CHANGED
@@ -28,7 +28,7 @@ UaEnv реалізує суму прописом для цілих і дробо
28
28
 
29
29
  ## Дати
30
30
 
31
- В клас Date введені наступні константи:
31
+ Введені наступні константи:
32
32
 
33
33
  - UA_ABBR_DAYNAMES (нд пн вт ...)
34
34
  - UA_DAYNAMES_E (перше друге третє ...)
@@ -41,17 +41,27 @@ UaEnv реалізує суму прописом для цілих і дробо
41
41
 
42
42
  require 'date'
43
43
  date = Date.new(2007, 01, 5)
44
- puts "#{Date::UA_ABBR_MONTHNAMES[date.mon]}" => січ
45
- puts "#{Date::UA_DAYNAMES[date.wday]}" => п'ятниця
44
+ puts "#{UaEnv::UaDates::UA_ABBR_MONTHNAMES[date.mon]}" => січ
45
+ puts "#{UaEnv::UaDates::UA_DAYNAMES[date.wday]}" => п'ятниця
46
46
 
47
- Відбувається "перекриття" стандартної
48
- функції Time#strftime ("рідну" #strftime можно продовжити використовувати через alias-метод #strftime_nouaenv):
47
+ Починаючи з версії 0.0.9 не відбувається "перекриття" стандартної
48
+ функції Time#strftime:
49
49
 
50
- Time.local(2007,"jan",5).strftime("%a, %A, %b, %B") => "пт, п'ятниця, січ, січень"
51
- Time.local(2007,"jan",5).strftime_nouaenv("%a, %A, %b, %B") => "Fri, Friday, Jan, January"
52
- Time.now.strftime("Сьогодні %A, %d %B %Y року, %H:%M:%S") => "Сьогодні субота, 6 січня 2007 року, 14:50:34"
50
+ Time.local(2007,"jan",5).ua_strftime("%a, %A, %b, %B") => "пт, п'ятниця, січ, січень"
51
+ Time.local(2007,"jan",5).strftime("%a, %A, %b, %B") => "Fri, Friday, Jan, January"
52
+ Time.now.ua_strftime("Сьогодні %A, %d %B %Y року, %H:%M:%S") => "Сьогодні субота, 6 січня 2007 року, 14:50:34"
53
53
 
54
54
 
55
+ ## Відстань між двома датами
56
+
57
+ Приблизна відстань між двома цілими числами в секундах:
58
+
59
+ UaEnv::UaDates.distance_of_time_in_words(0, 31, true) => "півхвилини"
60
+ UaEnv::UaDates.distance_of_time_in_words(0, 140) => "2 хвилини"
61
+ UaEnv::UaDates.distance_of_time_in_words(0, 60 * 120 + 60 * 60) => "близько 3 годин"
62
+ UaEnv::UaDates.distance_of_time_in_words(60 * 60 * 24 * 3) => "3 дні"
63
+
64
+
55
65
  ## Транслітерація
56
66
 
57
67
  Транслітерація української кирилиці у латиницю (національна):
data/lib/uaenv.rb CHANGED
@@ -15,7 +15,7 @@ module UaEnv
15
15
  end
16
16
  end
17
17
 
18
- UaEnv::load_component :datetime # Дата і час без локалі
18
+ UaEnv::load_component :uadates # Дата і час без локалі
19
19
  UaEnv::load_component :pluralizer # Вивід чисел прописом
20
20
  UaEnv::load_component :transliteration # Транслітерація
21
21
  UaEnv::load_component :fio # Відмінювання прізвища, імені і по батькові у давальний відмінок
@@ -0,0 +1,90 @@
1
+ # encoding: utf-8
2
+
3
+ require 'date'
4
+
5
+ module UaEnv
6
+
7
+ module UaDates
8
+ UA_MONTHNAMES = [nil] + %w{ січень лютий березень квітень травень червень липень серпень вересень жовтень листопад грудень }
9
+ UA_DAYNAMES = %w(неділя понеділок вівторок середа червер п'ятниця субота)
10
+ UA_ABBR_MONTHNAMES = [nil] + %w{ січ лют бер кві тра чер лип сер вер жов лис гру }
11
+ UA_ABBR_DAYNAMES = %w(нд пн вт ср чт пт сб)
12
+ UA_INFLECTED_MONTHNAMES = [nil] + %w{ січня лютого березня квітня травня червня липня серпня вересня жовтня листопада грудня }
13
+ UA_DAYNAMES_E = [nil] + %w{перше друге третє четверте п'яте шосте сьоме восьме дев'яте десяте одинадцяте дванадцяте тринадцяте чотирнадцяте п'ятнадцяте шістнадцяте сімнадцяте вісімнадцяте дев'ятнадцяте двадцяте двадцять тридцяте тридцять}
14
+
15
+ # http://www.ruby-doc.org/core-1.9.3/Time.html#method-i-strftime
16
+ # http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html#method-i-strftime
17
+ # Literal string:
18
+ # %% - Literal ``%'' character
19
+ #
20
+ # http://unicode.org/reports/tr20/tr20-1.html
21
+ # U+FFFC Object replacement character
22
+ # офіційно застосовується для позначення вкладеного об'єкту
23
+ @@ignored = [0xEF, 0xBF, 0xBC].pack("U*").freeze
24
+
25
+ def self.ua_strftime(format='%d.%m.%Y', time='')
26
+ clean_fmt = format.to_s.gsub(/%%/, @@ignored).
27
+ gsub(/%a/, UA_ABBR_DAYNAMES[time.wday]).
28
+ gsub(/%A/, UA_DAYNAMES[time.wday]).
29
+ gsub(/%b/, UA_ABBR_MONTHNAMES[time.mon]).
30
+ gsub(/%d(\s)*%B/, time.day.to_s + '\1' + UA_INFLECTED_MONTHNAMES[time.mon]).
31
+ gsub(/%B/, UA_MONTHNAMES[time.mon]).
32
+ gsub(@@ignored, '%%')
33
+ end
34
+
35
+ # http://apidock.com/rails/ActionView/Helpers/DateHelper/distance_of_time_in_words
36
+ def self.distance_of_time_in_words(from_time, to_time = 0, include_seconds = false, options = {})
37
+ from_time = from_time.to_time if from_time.respond_to?(:to_time)
38
+ to_time = to_time.to_time if to_time.respond_to?(:to_time)
39
+ distance_in_minutes = (((to_time - from_time).abs)/60).round
40
+ distance_in_seconds = ((to_time - from_time).abs).round
41
+
42
+ case distance_in_minutes
43
+ when 0..1
44
+ return (distance_in_minutes == 0) ?
45
+ 'менше хвилини' :
46
+ '1 хвилину' unless include_seconds
47
+
48
+ case distance_in_seconds
49
+ when 0..5 then 'менше 5 секунд'
50
+ when 6..10 then 'менше 10 секунд'
51
+ when 11..20 then 'менше 20 секунд'
52
+ when 21..40 then 'півхвилини'
53
+ when 41..59 then 'менше хвилини'
54
+ else '1 хвилину'
55
+ end
56
+
57
+ when 2..45 then distance_in_minutes.to_s +
58
+ " " + distance_in_minutes.items("хвилина", "хвилини", "хвилин")
59
+ when 46..90 then 'близько години'
60
+
61
+ when 90..1440 then "близько " + (distance_in_minutes.to_f / 60.0).round.to_s +
62
+ " " + (distance_in_minutes.to_f / 60.0).round.items("години", 'годин', 'годин')
63
+ when 1441..2880 then '1 день'
64
+ else (distance_in_minutes / 1440).round.to_s +
65
+ " " + (distance_in_minutes / 1440).round.items("день", "дні", "днів")
66
+ end
67
+ end
68
+
69
+
70
+ end # module UaDates
71
+
72
+ end # module UaEnv
73
+
74
+ class Time
75
+ #alias_method :strftime_nouaenv, :strftime
76
+
77
+ def ua_strftime(format)
78
+ UaEnv::UaDates::ua_strftime(format, self)
79
+ #strftime_nouaenv(format)
80
+ end
81
+ end
82
+
83
+ class DateTime
84
+ #alias_method :strftime_nouaenv, :strftime
85
+
86
+ def ua_strftime(format)
87
+ UaEnv::UaDates::ua_strftime(format, self)
88
+ #strftime_nouaenv(format)
89
+ end
90
+ end
data/lib/uaenv/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module UaEnv
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -0,0 +1,38 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'test/unit'
4
+ require_relative '../lib/uaenv'
5
+
6
+ class DateTimeTestCase < Test::Unit::TestCase
7
+ def test_ua_time
8
+ assert_equal "пт, п'ятниця, січ, січень", Time.local(2007,"jan",5).ua_strftime("%a, %A, %b, %B")
9
+ end
10
+
11
+ def test_ua_date
12
+ assert_equal "пт, п'ятниця, січ, січень", DateTime.new(2007, 1, 5).ua_strftime("%a, %A, %b, %B")
13
+ end
14
+
15
+ def test_time
16
+ assert_equal "Fri, Friday, Jan, January", Time.local(2007,"jan",5).strftime("%a, %A, %b, %B")
17
+ end
18
+
19
+ def test_date
20
+ assert_equal "Fri, Friday, Jan, January", DateTime.new(2007, 1, 5).strftime("%a, %A, %b, %B")
21
+ end
22
+ end
23
+
24
+ class DistanceOfTimeTest < Test::Unit::TestCase
25
+ def test_distance_of_time_in_words
26
+ assert_format_eq "півхвилини", 0, 31, true
27
+ assert_format_eq "менше хвилини", 0, 31
28
+ assert_format_eq "2 хвилини", 0, 140
29
+ assert_format_eq "близько 2 годин", 0, 60 * 114
30
+ assert_format_eq "близько 3 годин", 0, 60 * 120 + 60 * 60
31
+ assert_format_eq "близько 5 годин", 60 * 60 * 5
32
+ assert_format_eq "3 дні", 60 * 60 * 24 * 3
33
+ end
34
+
35
+ def assert_format_eq(str, *from_and_distance)
36
+ assert_equal str, UaEnv::UaDates.distance_of_time_in_words(*from_and_distance)
37
+ end
38
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uaenv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-07 00:00:00.000000000 Z
12
+ date: 2011-12-26 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Simple processing of Ukrainian strings
15
15
  email:
@@ -25,16 +25,17 @@ files:
25
25
  - Rakefile
26
26
  - TODO
27
27
  - lib/uaenv.rb
28
- - lib/uaenv/datetime/datetime.rb
29
28
  - lib/uaenv/fio/fio.rb
30
29
  - lib/uaenv/pluralizer/pluralizer.rb
31
30
  - lib/uaenv/transliteration/iso9.rb
32
31
  - lib/uaenv/transliteration/national.rb
33
32
  - lib/uaenv/transliteration/qwertz.rb
34
33
  - lib/uaenv/transliteration/transliteration.rb
34
+ - lib/uaenv/uadates/uadates.rb
35
35
  - lib/uaenv/version.rb
36
36
  - test/run_tests.rb
37
37
  - test/test_pluralizer.rb
38
+ - test/test_uadates.rb
38
39
  - uaenv.gemspec
39
40
  homepage: https://github.com/mamantoha/uaenv
40
41
  licenses: []
@@ -1,42 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module UaEnv
4
-
5
- module DateTime
6
-
7
- # http://unicode.org/reports/tr20/tr20-1.html
8
- # U+FFFC Object replacement character
9
- # офіційно застосовується для позначення вкладеного об'єкту
10
- @@ignored = [0xEF, 0xBF, 0xBC].pack("U*").freeze
11
-
12
- def self.ua_strftime(date='%d.%m.%Y', time='')
13
- date.gsub!(/%%/, @@ignored)
14
- date.gsub!(/%a/, Date::UA_ABBR_DAYNAMES[time.wday])
15
- date.gsub!(/%A/, Date::UA_DAYNAMES[time.wday])
16
- date.gsub!(/%b/, Date::UA_ABBR_MONTHNAMES[time.mon])
17
- date.gsub!(/%d(\s)*%B/, time.day.to_s + '\1' + Date::UA_INFLECTED_MONTHNAMES[time.mon])
18
- date.gsub!(/%B/, Date::UA_MONTHNAMES[time.mon])
19
- date.gsub!(@@ignored, '%%')
20
- end
21
-
22
- end # module DateTime
23
-
24
- end # module UaEnv
25
-
26
- class Date
27
- UA_MONTHNAMES = [nil] + %w{ січень лютий березень квітень травень червень липень серпень вересень жовтень листопад грудень }
28
- UA_DAYNAMES = %w(неділя понеділок вівторок середа червер п'ятниця субота)
29
- UA_ABBR_MONTHNAMES = [nil] + %w{ січ лют бер кві тра чер лип сер вер жов лис гру }
30
- UA_ABBR_DAYNAMES = %w(нд пн вт ср чт пт сб)
31
- UA_INFLECTED_MONTHNAMES = [nil] + %w{ січня лютого березня квітня травня червня липня серпня вересня жовтня листопада грудня }
32
- UA_DAYNAMES_E = [nil] + %w{перше друге третє четверте п'яте шосте сьоме восьме дев'яте десяте одинадцяте дванадцяте тринадцяте чотирнадцяте п'ятнадцяте шістнадцяте сімнадцяте вісімнадцяте дев'ятнадцяте двадцяте двадцять тридцяте тридцять}
33
- end
34
-
35
- class Time
36
- alias_method :strftime_nouaenv, :strftime
37
-
38
- def strftime(date)
39
- UaEnv::DateTime::ua_strftime(date, self)
40
- strftime_nouaenv(date)
41
- end
42
- end