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