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 +7 -0
- data/README.md +18 -8
- data/lib/uaenv.rb +1 -1
- data/lib/uaenv/uadates/uadates.rb +90 -0
- data/lib/uaenv/version.rb +1 -1
- data/test/test_uadates.rb +38 -0
- metadata +4 -3
- data/lib/uaenv/datetime/datetime.rb +0 -42
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
|
-
|
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 "#{
|
45
|
-
puts "#{
|
44
|
+
puts "#{UaEnv::UaDates::UA_ABBR_MONTHNAMES[date.mon]}" => січ
|
45
|
+
puts "#{UaEnv::UaDates::UA_DAYNAMES[date.wday]}" => п'ятниця
|
46
46
|
|
47
|
-
|
48
|
-
функції Time#strftime
|
47
|
+
Починаючи з версії 0.0.9 не відбувається "перекриття" стандартної
|
48
|
+
функції Time#strftime:
|
49
49
|
|
50
|
-
Time.local(2007,"jan",5).
|
51
|
-
Time.local(2007,"jan",5).
|
52
|
-
Time.now.
|
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 :
|
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
@@ -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.
|
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-
|
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
|