uaenv 0.0.8 → 0.0.9

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