when_exe 0.3.5 → 0.3.6
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/bin/irb.rc +1 -0
- data/bin/locales.rb +8 -6
- data/bin/when.rb +1 -1
- data/lib/when_exe.rb +231 -146
- data/lib/when_exe/basictypes.rb +108 -18
- data/lib/when_exe/calendarnote.rb +263 -116
- data/lib/when_exe/calendartypes.rb +413 -22
- data/lib/when_exe/coordinates.rb +58 -36
- data/lib/when_exe/core/compatibility.rb +8 -6
- data/lib/when_exe/core/extension.rb +40 -15
- data/lib/when_exe/ephemeris.rb +20 -19
- data/lib/when_exe/{region → ephemeris}/moon.rb +4 -4
- data/lib/when_exe/{region/ephemeric_notes.rb → ephemeris/notes.rb} +25 -6
- data/lib/when_exe/{region → ephemeris}/planets.rb +0 -0
- data/lib/when_exe/{region → ephemeris}/sun.rb +7 -3
- data/lib/when_exe/{region → ephemeris}/v50.rb +0 -0
- data/lib/when_exe/googlecalendar.rb +2 -2
- data/lib/when_exe/icalendar.rb +3 -3
- data/lib/when_exe/inspect.rb +130 -70
- data/lib/when_exe/locales/af.rb +2 -2
- data/lib/when_exe/locales/akt.rb +176 -0
- data/lib/when_exe/locales/ar.rb +2 -2
- data/lib/when_exe/locales/{locales.rb → autoload.rb} +6 -2
- data/lib/when_exe/locales/az.rb +2 -2
- data/lib/when_exe/locales/bg.rb +2 -2
- data/lib/when_exe/locales/bn.rb +2 -2
- data/lib/when_exe/locales/bs.rb +2 -2
- data/lib/when_exe/locales/ca.rb +2 -2
- data/lib/when_exe/locales/cs.rb +2 -2
- data/lib/when_exe/locales/cy.rb +2 -2
- data/lib/when_exe/locales/da.rb +2 -2
- data/lib/when_exe/locales/de.rb +2 -2
- data/lib/when_exe/locales/de_AT.rb +2 -2
- data/lib/when_exe/locales/de_CH.rb +2 -2
- data/lib/when_exe/locales/el.rb +2 -2
- data/lib/when_exe/locales/en.rb +2 -2
- data/lib/when_exe/locales/en_AU.rb +2 -2
- data/lib/when_exe/locales/en_CA.rb +2 -2
- data/lib/when_exe/locales/en_GB.rb +2 -2
- data/lib/when_exe/locales/en_IE.rb +2 -2
- data/lib/when_exe/locales/en_IN.rb +3 -3
- data/lib/when_exe/locales/en_NZ.rb +2 -2
- data/lib/when_exe/locales/en_US.rb +2 -2
- data/lib/when_exe/locales/en_ZA.rb +88 -0
- data/lib/when_exe/locales/encoding_conversion.rb +126 -0
- data/lib/when_exe/locales/eo.rb +2 -2
- data/lib/when_exe/locales/es.rb +2 -2
- data/lib/when_exe/locales/es_419.rb +2 -2
- data/lib/when_exe/locales/es_AR.rb +2 -2
- data/lib/when_exe/locales/es_CL.rb +2 -2
- data/lib/when_exe/locales/es_CO.rb +2 -2
- data/lib/when_exe/locales/es_CR.rb +2 -2
- data/lib/when_exe/locales/es_EC.rb +2 -2
- data/lib/when_exe/locales/es_MX.rb +2 -2
- data/lib/when_exe/locales/es_PA.rb +2 -2
- data/lib/when_exe/locales/es_PE.rb +2 -2
- data/lib/when_exe/locales/es_US.rb +84 -0
- data/lib/when_exe/locales/es_VE.rb +2 -2
- data/lib/when_exe/locales/et.rb +2 -2
- data/lib/when_exe/locales/eu.rb +2 -2
- data/lib/when_exe/locales/fa.rb +2 -2
- data/lib/when_exe/locales/fi.rb +3 -3
- data/lib/when_exe/locales/fr.rb +2 -2
- data/lib/when_exe/locales/fr_CA.rb +2 -2
- data/lib/when_exe/locales/fr_CH.rb +2 -2
- data/lib/when_exe/locales/gl.rb +2 -2
- data/lib/when_exe/locales/he.rb +3 -3
- data/lib/when_exe/locales/hi.rb +2 -2
- data/lib/when_exe/locales/hi_IN.rb +2 -2
- data/lib/when_exe/locales/hr.rb +2 -2
- data/lib/when_exe/locales/hu.rb +6 -5
- data/lib/when_exe/locales/iast.rb +90 -0
- data/lib/when_exe/locales/id.rb +2 -2
- data/lib/when_exe/locales/is.rb +2 -2
- data/lib/when_exe/locales/it.rb +2 -2
- data/lib/when_exe/locales/it_CH.rb +2 -2
- data/lib/when_exe/locales/ja.rb +2 -2
- data/lib/when_exe/locales/kn.rb +2 -2
- data/lib/when_exe/locales/ko.rb +2 -2
- data/lib/when_exe/locales/links.rb +3 -3
- data/lib/when_exe/locales/lo.rb +2 -2
- data/lib/when_exe/{parts → locales}/locale.rb +77 -49
- data/lib/when_exe/locales/lt.rb +6 -2
- data/lib/when_exe/locales/lv.rb +2 -2
- data/lib/when_exe/locales/mk.rb +2 -2
- data/lib/when_exe/locales/mn.rb +2 -2
- data/lib/when_exe/locales/ms.rb +2 -2
- data/lib/when_exe/locales/nb.rb +2 -2
- data/lib/when_exe/locales/ne.rb +2 -2
- data/lib/when_exe/locales/nl.rb +2 -2
- data/lib/when_exe/locales/nn.rb +2 -2
- data/lib/when_exe/locales/or.rb +2 -2
- data/lib/when_exe/locales/pl.rb +2 -2
- data/lib/when_exe/locales/pt.rb +2 -2
- data/lib/when_exe/locales/pt_BR.rb +2 -2
- data/lib/when_exe/locales/rm.rb +2 -2
- data/lib/when_exe/locales/ro.rb +2 -2
- data/lib/when_exe/locales/ru.rb +2 -2
- data/lib/when_exe/locales/sk.rb +2 -2
- data/lib/when_exe/locales/sl.rb +2 -2
- data/lib/when_exe/locales/sr.rb +2 -2
- data/lib/when_exe/locales/sv.rb +2 -2
- data/lib/when_exe/locales/sw.rb +2 -2
- data/lib/when_exe/locales/ta.rb +95 -0
- data/lib/when_exe/locales/th.rb +2 -2
- data/lib/when_exe/locales/tl.rb +3 -3
- data/lib/when_exe/locales/tr.rb +2 -2
- data/lib/when_exe/locales/transliteration_table.rb +62 -0
- data/lib/when_exe/locales/uk.rb +15 -15
- data/lib/when_exe/locales/ur.rb +2 -2
- data/lib/when_exe/locales/uz.rb +2 -2
- data/lib/when_exe/locales/vi.rb +2 -2
- data/lib/when_exe/locales/wo.rb +2 -2
- data/lib/when_exe/locales/zh_CN.rb +2 -2
- data/lib/when_exe/locales/zh_HK.rb +15 -15
- data/lib/when_exe/locales/zh_TW.rb +2 -2
- data/lib/when_exe/locales/zh_YUE.rb +77 -0
- data/lib/when_exe/mini_application.rb +22 -12
- data/lib/when_exe/parts/geometric_complex.rb +16 -1
- data/lib/when_exe/parts/method_cash.rb +184 -238
- data/lib/when_exe/parts/resource.rb +65 -16
- data/lib/when_exe/region/armenian.rb +56 -0
- data/lib/when_exe/region/bahai.rb +13 -13
- data/lib/when_exe/region/balinese.rb +33 -35
- data/lib/when_exe/region/chinese.rb +82 -78
- data/lib/when_exe/region/{chinese_calendar.rb → chinese/calendars.rb} +59 -40
- data/lib/when_exe/region/{chinese_epoch.rb → chinese/epochs.rb} +3 -4
- data/lib/when_exe/region/{chinese_twin.rb → chinese/twins.rb} +48 -51
- data/lib/when_exe/region/christian.rb +236 -127
- data/lib/when_exe/region/coptic.rb +9 -10
- data/lib/when_exe/region/dee.rb +48 -0
- data/lib/when_exe/region/discordian.rb +225 -0
- data/lib/when_exe/region/far_east.rb +2 -6
- data/lib/when_exe/region/french.rb +7 -17
- data/lib/when_exe/region/geologicalage.rb +0 -1
- data/lib/when_exe/region/goddess.rb +58 -0
- data/lib/when_exe/region/indian.rb +323 -231
- data/lib/when_exe/region/iranian.rb +159 -22
- data/lib/when_exe/region/islamic.rb +7 -9
- data/lib/when_exe/region/japanese.rb +14 -803
- data/lib/when_exe/region/japanese/calendars.rb +397 -0
- data/lib/when_exe/region/japanese/epochs.rb +426 -0
- data/lib/when_exe/region/{nihon_shoki.rb → japanese/nihon_shoki.rb} +0 -2
- data/lib/when_exe/region/{japanese_notes.rb → japanese/notes.rb} +179 -150
- data/lib/when_exe/region/japanese/residues.rb +1306 -0
- data/lib/when_exe/region/{japanese_twin.rb → japanese/twins.rb} +12 -15
- data/lib/when_exe/region/javanese.rb +16 -14
- data/lib/when_exe/region/jewish.rb +8 -9
- data/lib/when_exe/region/korean.rb +146 -35
- data/lib/when_exe/region/m17n.rb +8 -10
- data/lib/when_exe/region/martian.rb +44 -16
- data/lib/when_exe/region/mayan.rb +12 -10
- data/lib/when_exe/region/pope.rb +0 -1
- data/lib/when_exe/region/residue.rb +4 -5
- data/lib/when_exe/region/roman.rb +20 -24
- data/lib/when_exe/region/ryukyu.rb +3 -4
- data/lib/when_exe/region/shire.rb +97 -94
- data/lib/when_exe/region/symmetry.rb +50 -0
- data/lib/when_exe/region/thai.rb +164 -56
- data/lib/when_exe/region/tibetan.rb +86 -86
- data/lib/when_exe/region/vietnamese.rb +9 -12
- data/lib/when_exe/region/weekdate.rb +80 -0
- data/lib/when_exe/region/world.rb +65 -70
- data/lib/when_exe/region/yerm.rb +98 -0
- data/lib/when_exe/region/zoroastrian.rb +203 -0
- data/lib/when_exe/timestandard.rb +4 -4
- data/lib/when_exe/tmobjects.rb +1 -3
- data/lib/when_exe/tmposition.rb +13 -12
- data/lib/when_exe/tmreference.rb +11 -10
- data/lib/when_exe/version.rb +1 -1
- data/link_to_online_documents +3 -3
- data/test/examples/Residue.m17n +1 -1
- data/test/examples/Terms.m17n +1 -1
- data/test/test.rb +2 -1
- data/test/test/basictypes.rb +18 -2
- data/test/test/calendarnote.rb +1 -1
- data/test/test/calendartypes.rb +1 -1
- data/test/test/coordinates.rb +7 -7
- data/test/test/{region → ephemeris}/moon.rb +0 -0
- data/test/test/{region → ephemeris}/planets.rb +0 -0
- data/test/test/{region → ephemeris}/sun.rb +0 -0
- data/test/test/parts.rb +8 -13
- data/test/test/region/christian.rb +245 -0
- data/test/test/region/french.rb +16 -16
- data/test/test/region/iran.rb +34 -34
- data/test/test/region/japanese.rb +6 -4
- data/test/test/region/m17n.rb +8 -7
- data/test/test/region/mayan.rb +12 -12
- data/test/test/region/residue.rb +20 -4
- data/test/test/region/thai.rb +25 -3
- data/test/test/region/yerm.rb +146 -0
- metadata +39 -20
- data/lib/when_exe/region/japanese_residues.rb +0 -1212
- data/test/test/region/civil.rb +0 -124
data/lib/when_exe/locales/vi.rb
CHANGED
@@ -5,8 +5,8 @@
|
|
5
5
|
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
6
6
|
=end
|
7
7
|
|
8
|
-
module When
|
9
|
-
|
8
|
+
module When
|
9
|
+
module Locale
|
10
10
|
|
11
11
|
# from https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/vi.yml
|
12
12
|
|
data/lib/when_exe/locales/wo.rb
CHANGED
@@ -5,8 +5,8 @@
|
|
5
5
|
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
6
6
|
=end
|
7
7
|
|
8
|
-
module When
|
9
|
-
|
8
|
+
module When
|
9
|
+
module Locale
|
10
10
|
|
11
11
|
# from https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/wo.yml
|
12
12
|
|
@@ -5,8 +5,8 @@
|
|
5
5
|
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
6
6
|
=end
|
7
7
|
|
8
|
-
module When
|
9
|
-
|
8
|
+
module When
|
9
|
+
module Locale
|
10
10
|
|
11
11
|
# from https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/zh-CN.yml
|
12
12
|
|
@@ -5,8 +5,8 @@
|
|
5
5
|
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
6
6
|
=end
|
7
7
|
|
8
|
-
module When
|
9
|
-
|
8
|
+
module When
|
9
|
+
module Locale
|
10
10
|
|
11
11
|
# from https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/zh-HK.yml
|
12
12
|
|
@@ -45,30 +45,30 @@ module When::BasicTypes
|
|
45
45
|
"十二月"],
|
46
46
|
"order"=>[:year, :month, :day]},
|
47
47
|
"time"=>
|
48
|
-
{"am"=>"
|
48
|
+
{"am"=>"上午",
|
49
49
|
"formats"=>
|
50
|
-
{"default"=>"%Y年%b%d
|
51
|
-
"long"=>"%Y年%b%d
|
52
|
-
"short"=>"%b%d
|
50
|
+
{"default"=>"%Y年%b%d日 %A %H:%M:%S %Z",
|
51
|
+
"long"=>"%Y年%b%d日 %H:%M",
|
52
|
+
"short"=>"%b%d日 %H:%M",
|
53
53
|
"time"=>"%H:%M:%S %Z"},
|
54
|
-
"pm"=>"
|
54
|
+
"pm"=>"下午"},
|
55
55
|
"datetime"=>
|
56
56
|
{"distance_in_words"=>
|
57
|
-
{"about_x_hours"=>{"one"=>"
|
58
|
-
"about_x_months"=>{"one"=>"
|
59
|
-
"about_x_years"=>{"one"=>"
|
60
|
-
"almost_x_years"=>{"one"=>"
|
57
|
+
{"about_x_hours"=>{"one"=>"約一小時", "other"=>"約%{count}小時"},
|
58
|
+
"about_x_months"=>{"one"=>"約一個月", "other"=>"約%{count}個月"},
|
59
|
+
"about_x_years"=>{"one"=>"約一年", "other"=>"約%{count}年"},
|
60
|
+
"almost_x_years"=>{"one"=>"接近一年", "other"=>"接近%{count}年"},
|
61
61
|
"half_a_minute"=>"半分鐘",
|
62
|
-
"less_than_x_minutes"=>{"one"=>"
|
63
|
-
"less_than_x_seconds"=>{"one"=>"
|
62
|
+
"less_than_x_minutes"=>{"one"=>"不到一分鐘", "other"=>"不到%{count}分鐘"},
|
63
|
+
"less_than_x_seconds"=>{"one"=>"不到一秒", "other"=>"不到%{count}秒"},
|
64
64
|
"over_x_years"=>{"one"=>"超過一年", "other"=>"超過%{count}年"},
|
65
|
-
"x_days"=>{"one"=>"
|
65
|
+
"x_days"=>{"one"=>"一天", "other"=>"%{count}天"},
|
66
66
|
"x_minutes"=>{"one"=>"一分鐘", "other"=>"%{count}分鐘"},
|
67
67
|
"x_months"=>{"one"=>"一個月", "other"=>"%{count}個月"},
|
68
68
|
"x_seconds"=>{"one"=>"一秒", "other"=>"%{count}秒"}},
|
69
69
|
"prompts"=>
|
70
70
|
{"day"=>"日",
|
71
|
-
"hour"=>"
|
71
|
+
"hour"=>"時",
|
72
72
|
"minute"=>"分",
|
73
73
|
"month"=>"月",
|
74
74
|
"second"=>"秒",
|
@@ -5,8 +5,8 @@
|
|
5
5
|
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
6
6
|
=end
|
7
7
|
|
8
|
-
module When
|
9
|
-
|
8
|
+
module When
|
9
|
+
module Locale
|
10
10
|
|
11
11
|
# from https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/zh-TW.yml
|
12
12
|
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
=begin
|
3
|
+
Copyright (C) 2012-2014 Takashi SUGA
|
4
|
+
|
5
|
+
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
6
|
+
=end
|
7
|
+
|
8
|
+
module When
|
9
|
+
module Locale
|
10
|
+
|
11
|
+
# from https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/zh-YUE.yml
|
12
|
+
|
13
|
+
Locale_zh_YUE =
|
14
|
+
{"date"=>
|
15
|
+
{"abbr_day_names"=>["日", "一", "二", "三", "四", "五", "六"],
|
16
|
+
"abbr_month_names"=>
|
17
|
+
[nil,
|
18
|
+
"1月",
|
19
|
+
"2月",
|
20
|
+
"3月",
|
21
|
+
"4月",
|
22
|
+
"5月",
|
23
|
+
"6月",
|
24
|
+
"7月",
|
25
|
+
"8月",
|
26
|
+
"9月",
|
27
|
+
"10月",
|
28
|
+
"11月",
|
29
|
+
"12月"],
|
30
|
+
"day_names"=>["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
|
31
|
+
"formats"=>{"default"=>"%Y-%m-%d", "long"=>"%Y年%b%d日", "short"=>"%b%d日"},
|
32
|
+
"month_names"=>
|
33
|
+
[nil,
|
34
|
+
"一月",
|
35
|
+
"二月",
|
36
|
+
"三月",
|
37
|
+
"四月",
|
38
|
+
"五月",
|
39
|
+
"六月",
|
40
|
+
"七月",
|
41
|
+
"八月",
|
42
|
+
"九月",
|
43
|
+
"十月",
|
44
|
+
"十一月",
|
45
|
+
"十二月"],
|
46
|
+
"order"=>[:year, :month, :day]},
|
47
|
+
"time"=>
|
48
|
+
{"am"=>"上晝",
|
49
|
+
"formats"=>
|
50
|
+
{"default"=>"%Y年%b%d號 %A %H:%M:%S %Z",
|
51
|
+
"long"=>"%Y年%b%d號 %H:%M",
|
52
|
+
"short"=>"%b%d號 %H:%M",
|
53
|
+
"time"=>"%H:%M:%S %Z"},
|
54
|
+
"pm"=>"下晝"},
|
55
|
+
"datetime"=>
|
56
|
+
{"distance_in_words"=>
|
57
|
+
{"about_x_hours"=>{"one"=>"大概一個鐘", "other"=>"大概%{count}個鐘"},
|
58
|
+
"about_x_months"=>{"one"=>"大概一個月", "other"=>"大概%{count}個月"},
|
59
|
+
"about_x_years"=>{"one"=>"大概一年", "other"=>"大概%{count}年"},
|
60
|
+
"almost_x_years"=>{"one"=>"差唔多一年", "other"=>"差唔多%{count}年"},
|
61
|
+
"half_a_minute"=>"半分鐘",
|
62
|
+
"less_than_x_minutes"=>{"one"=>"唔夠一分鐘", "other"=>"唔夠%{count}分鐘"},
|
63
|
+
"less_than_x_seconds"=>{"one"=>"唔夠一秒", "other"=>"唔夠%{count}秒"},
|
64
|
+
"over_x_years"=>{"one"=>"超過一年", "other"=>"超過%{count}年"},
|
65
|
+
"x_days"=>{"one"=>"一日", "other"=>"%{count}日"},
|
66
|
+
"x_minutes"=>{"one"=>"一分鐘", "other"=>"%{count}分鐘"},
|
67
|
+
"x_months"=>{"one"=>"一個月", "other"=>"%{count}個月"},
|
68
|
+
"x_seconds"=>{"one"=>"一秒", "other"=>"%{count}秒"}},
|
69
|
+
"prompts"=>
|
70
|
+
{"day"=>"日",
|
71
|
+
"hour"=>"點",
|
72
|
+
"minute"=>"分",
|
73
|
+
"month"=>"月",
|
74
|
+
"second"=>"秒",
|
75
|
+
"year"=>"年"}}}
|
76
|
+
end
|
77
|
+
end
|
@@ -61,10 +61,10 @@ module When
|
|
61
61
|
Thread.start(socket.accept) do |client|
|
62
62
|
query = client.gets.chomp.force_encoding("UTF-8")
|
63
63
|
start = Time.now
|
64
|
-
puts start._log_('%FT%X.%L') + ': Query - ' + When::
|
64
|
+
puts start._log_('%FT%X.%L') + ': Query - ' + When::Locale.translate(query, config['!'])
|
65
65
|
begin
|
66
66
|
result = free_conv(*query.split(/\s+/))
|
67
|
-
result = When::
|
67
|
+
result = When::Locale.translate(result, config['!'])
|
68
68
|
client.puts JSON.generate(Array(_to_string(result))).to_s
|
69
69
|
stop = Time.now
|
70
70
|
puts stop._log_('%FT%X.%L') + ": Respond (%7.0f ms)" % (1000 * (stop.to_f - start.to_f))
|
@@ -126,19 +126,28 @@ module When
|
|
126
126
|
if methods.size == 0
|
127
127
|
lambda {|date| date.send(*output)}
|
128
128
|
else
|
129
|
-
lambda {|date, type|
|
130
|
-
case type
|
131
|
-
when When::YEAR ; date.strftime("%Y")
|
132
|
-
when When::MONTH ; date.strftime("%B %Y")
|
133
|
-
when When::WEEK ; nil
|
134
|
-
when When::DAY ; date[0]
|
135
|
-
else ; '-'
|
136
|
-
end
|
137
|
-
}
|
129
|
+
lambda {|date, type| column(date, type)}
|
138
130
|
end
|
139
131
|
_free_conv(calendars, dates, methods, output, options, &block)
|
140
132
|
end
|
141
133
|
|
134
|
+
# 七曜表の一日分
|
135
|
+
#
|
136
|
+
# @param [When::TM::TemporalPosition] date 処理する一日
|
137
|
+
# @param [Integer, nil] type 当該日の種類
|
138
|
+
#
|
139
|
+
# @return [Object>] 処理結果
|
140
|
+
#
|
141
|
+
def column(date, type)
|
142
|
+
case type
|
143
|
+
when When::YEAR ; date.strftime("%Y")
|
144
|
+
when When::MONTH ; date.strftime("%B %Y")
|
145
|
+
when When::WEEK ; nil
|
146
|
+
when When::DAY ; date[0]
|
147
|
+
else ; '-'
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
142
151
|
private
|
143
152
|
|
144
153
|
# to_h メソッドのオプション設定
|
@@ -173,6 +182,7 @@ module When
|
|
173
182
|
when Range ; arg.each {|d| dates << d}
|
174
183
|
when Symbol ; output = [arg]
|
175
184
|
when String
|
185
|
+
arg = When::EncodingConversion.to_internal_encoding(arg)
|
176
186
|
case arg
|
177
187
|
when /^:(.+?)(?:\[(..)\])?$/ ; output = [$1.to_sym, $2].compact
|
178
188
|
when /^(year|month|week)(?:\[(..)\])?$/i ; methods << [$1.downcase + '_included', $2||'SU']
|
@@ -217,7 +227,7 @@ module When
|
|
217
227
|
#
|
218
228
|
def _free_conv(calendars, dates, methods, output, options, &block)
|
219
229
|
dates[0] ||= When.now
|
220
|
-
calendars[0] ||= When
|
230
|
+
calendars[0] ||= When::Gregorian
|
221
231
|
result = dates.map {|date|
|
222
232
|
date = When.when?(date)
|
223
233
|
opts = {}
|
@@ -5,6 +5,9 @@
|
|
5
5
|
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
6
6
|
=end
|
7
7
|
|
8
|
+
require 'when_exe/parts/method_cash'
|
9
|
+
require 'when_exe/tmduration'
|
10
|
+
|
8
11
|
#
|
9
12
|
# 本ライブラリのための諸々の部品
|
10
13
|
#
|
@@ -105,7 +108,7 @@ module When::Parts
|
|
105
108
|
# 分解能がない場合は、When::SYSTEM を返す
|
106
109
|
#
|
107
110
|
def precision
|
108
|
-
@node[0] && @node[0][0].respond_to?(:precision) ? @node[0][0].precision :
|
111
|
+
@node[0] && @node[0][0].respond_to?(:precision) ? @node[0][0].precision : When::SYSTEM
|
109
112
|
end
|
110
113
|
|
111
114
|
# 範囲を反転する
|
@@ -150,6 +153,16 @@ module When::Parts
|
|
150
153
|
return GeometricComplex.new(copy, self.reverse)
|
151
154
|
end
|
152
155
|
|
156
|
+
# 共通集合
|
157
|
+
#
|
158
|
+
# @param [Range, When::Parts::GeometricComplex] other
|
159
|
+
#
|
160
|
+
# @return [When::Parts::GeometricComplex] self と other の共通集合を返す
|
161
|
+
#
|
162
|
+
def &(other)
|
163
|
+
-(-self | -other)
|
164
|
+
end
|
165
|
+
|
153
166
|
# ISO19108 の TM オブジェクトに変換する
|
154
167
|
#
|
155
168
|
# @param [Hash] options When::TM::TemporalPosition の生成を行う場合に使用する
|
@@ -172,6 +185,8 @@ module When::Parts
|
|
172
185
|
end
|
173
186
|
return objects[0] if objects.length==1
|
174
187
|
return When::TM::TopologicalComplex.new(objects)
|
188
|
+
rescue NameError
|
189
|
+
raise NameError, "Please require 'when_exe' to use Temporal Objects Package"
|
175
190
|
end
|
176
191
|
|
177
192
|
# 範囲に含まれるか?
|
@@ -5,274 +5,220 @@
|
|
5
5
|
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
6
6
|
=end
|
7
7
|
|
8
|
-
|
9
|
-
# 本ライブラリのための諸々の部品
|
10
|
-
#
|
11
|
-
module When::Parts
|
12
|
-
|
13
|
-
#
|
14
|
-
# == メソッドの実行結果をキャッシュし処理の高速化を行う
|
15
|
-
#
|
16
|
-
# === fn というメソッドをキャッシュ化
|
17
|
-
# * fn ではなく fn_ を定義しておく
|
18
|
-
# * fn メソッドが呼ばれると fn_ を実行し、{引数=>戻り値} を Hash に記憶する
|
19
|
-
# * 同じ引数で再度 fn メソッドが呼ばれると Hash から戻り値を取り出して返す
|
20
|
-
#
|
21
|
-
# === a_to_b と b_to_a という互いに逆関数のメソッドをキャッシュ化
|
22
|
-
# * a_to_b ではなく a_to_b_ , b_to_a ではなく b_to_a_ を定義しておく
|
23
|
-
# * a_to_b メソッドが呼ばれると a_to_b_ を実行し、{引数=>戻り値}, {戻り値=>引数}を Hash に記憶する
|
24
|
-
# * 同じ引数で再度 a_to_b メソッドが呼ばれると Hash から戻り値を取り出して返す
|
25
|
-
# * b_to_a メソッドが呼ばれ Hash に戻り値があれば Hash から戻り値を取り出して返す
|
26
|
-
#
|
27
|
-
# == 特記事項
|
28
|
-
#
|
29
|
-
# === Argument identification
|
30
|
-
# The eql? method of When::TM::(Temporal)Position is not overridden.
|
31
|
-
# It seems that the cost of identification of the argument exceeds the merit of the method cash.
|
32
|
-
# I do not recommend applying the methodcash to the method which takes
|
33
|
-
# When::TM::(Temporal)Position as an argument.
|
8
|
+
module When
|
34
9
|
#
|
35
|
-
#
|
36
|
-
# There is a problem in consistency of hash when this function is used in multi-thread environment.
|
37
|
-
# If the initialize method sets Mutex in instance variable @_m_cash_lock_,
|
38
|
-
# this function gives up use of hash in the critical situation.
|
10
|
+
# 本ライブラリのための諸々の部品
|
39
11
|
#
|
40
|
-
|
41
|
-
# include MethodCash
|
42
|
-
#
|
43
|
-
# def initialize
|
44
|
-
# ...
|
45
|
-
# @_m_cash_lock_ = Mutex.new
|
46
|
-
# ...
|
47
|
-
# end
|
48
|
-
# end
|
49
|
-
#
|
50
|
-
# 参考 http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/47663
|
51
|
-
#
|
52
|
-
module MethodCash
|
12
|
+
module Parts
|
53
13
|
|
54
|
-
#
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
14
|
+
#
|
15
|
+
# == メソッドの実行結果をキャッシュし処理の高速化を行う
|
16
|
+
#
|
17
|
+
# === fn というメソッドをキャッシュ化
|
18
|
+
# * fn ではなく fn_ を定義しておく
|
19
|
+
# * fn メソッドが呼ばれると fn_ を実行し、{引数=>戻り値} を Hash に記憶する
|
20
|
+
# * 同じ引数で再度 fn メソッドが呼ばれると Hash から戻り値を取り出して返す
|
21
|
+
#
|
22
|
+
# === a_to_b と b_to_a という互いに逆関数のメソッドをキャッシュ化
|
23
|
+
# * a_to_b ではなく a_to_b_ , b_to_a ではなく b_to_a_ を定義しておく
|
24
|
+
# * a_to_b メソッドが呼ばれると a_to_b_ を実行し、{引数=>戻り値}, {戻り値=>引数}を Hash に記憶する
|
25
|
+
# * 同じ引数で再度 a_to_b メソッドが呼ばれると Hash から戻り値を取り出して返す
|
26
|
+
# * b_to_a メソッドが呼ばれ Hash に戻り値があれば Hash から戻り値を取り出して返す
|
27
|
+
#
|
28
|
+
# == 特記事項
|
29
|
+
#
|
30
|
+
# === Argument identification
|
31
|
+
# The eql? method of When::TM::(Temporal)Position is not overridden.
|
32
|
+
# It seems that the cost of identification of the argument exceeds the merit of the method cash.
|
33
|
+
# I do not recommend applying the methodcash to the method which takes
|
34
|
+
# When::TM::(Temporal)Position as an argument.
|
35
|
+
#
|
36
|
+
# === Multi-thread critical situation
|
37
|
+
# There is a problem in consistency of hash when this function is used in multi-thread environment.
|
38
|
+
# If the initialize method sets Mutex in instance variable @_m_cash_lock_,
|
39
|
+
# this function gives up use of hash in the critical situation.
|
40
|
+
#
|
41
|
+
# class Foo
|
42
|
+
# include MethodCash
|
43
|
+
#
|
44
|
+
# def initialize
|
45
|
+
# ...
|
46
|
+
# @_m_cash_lock_ = Mutex.new
|
47
|
+
# ...
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# 参考 http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/47663
|
52
|
+
#
|
53
|
+
module MethodCash
|
54
|
+
|
55
|
+
# @private
|
56
|
+
Escape = {:to_str => true,
|
57
|
+
:to_ary => true,
|
58
|
+
:to_hash => true}
|
59
|
+
|
60
|
+
class << self
|
61
|
+
|
62
|
+
# '_' で終わるメソッドをキャッシュせずに毎回計算するか否か
|
63
|
+
#
|
64
|
+
# @return [Boolean] キャッシュしない true, キャッシュする false/nil
|
65
|
+
#
|
66
|
+
attr_accessor :direct
|
67
|
+
|
68
|
+
# When::Parts::MethodCash のグローバルな設定を行う
|
69
|
+
#
|
70
|
+
# @param [Hash] options 以下の通り
|
71
|
+
# @option options [Boolean] :direct '_' で終わるメソッドをキャッシュせずに毎回計算するか否か
|
72
|
+
# @option options [Hash{Symbol=>boolean}] :escape 毎回 method_missing を発生させるメソッドを true にする
|
73
|
+
# @option options [false, nil] :escape to_str, to_ary, to_hash のみ毎回 method_missing を発生させる
|
74
|
+
# @option options [true] :escape すべて毎回 method_missing を発生させる
|
75
|
+
#
|
76
|
+
# @return [void]
|
77
|
+
#
|
78
|
+
# @note When::TM::Calendar クラスの一部はキャッシュ使用を前提としているため :direct=>true では動作しません
|
79
|
+
#
|
80
|
+
def _setup_(options={})
|
81
|
+
@_setup_info = options
|
82
|
+
@direct = options[:direct]
|
83
|
+
case options[:escape]
|
84
|
+
when true
|
85
|
+
instance_eval %Q{
|
86
|
+
def escape(method)
|
87
|
+
true
|
88
|
+
end
|
89
|
+
}
|
90
|
+
when Hash
|
91
|
+
@escape = Escape.merge(options[:escape])
|
92
|
+
instance_eval %Q{
|
93
|
+
def escape(method)
|
94
|
+
@escape[method]
|
95
|
+
end
|
96
|
+
}
|
97
|
+
else
|
98
|
+
instance_eval %Q{
|
99
|
+
def escape(method)
|
100
|
+
Escape.key?(method)
|
101
|
+
end
|
102
|
+
}
|
103
|
+
end
|
104
|
+
end
|
60
105
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
106
|
+
# 設定情報を取得する
|
107
|
+
#
|
108
|
+
# @return [Hash] 設定情報
|
109
|
+
#
|
110
|
+
def _setup_info
|
111
|
+
@_setup_info ||= {}
|
112
|
+
end
|
66
113
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
# @return [void]
|
76
|
-
#
|
77
|
-
# @note When::TM::Calendar クラスの一部はキャッシュ使用を前提としているため :direct=>true では動作しません
|
78
|
-
#
|
79
|
-
def _setup_(options={})
|
80
|
-
@_setup_info = options
|
81
|
-
@direct = options[:direct]
|
82
|
-
case options[:escape]
|
83
|
-
when true
|
84
|
-
instance_eval %Q{
|
85
|
-
def escape(method)
|
86
|
-
true
|
87
|
-
end
|
88
|
-
}
|
89
|
-
when Hash
|
90
|
-
@escape = Escape.merge(options[:escape])
|
91
|
-
instance_eval %Q{
|
92
|
-
def escape(method)
|
93
|
-
@escape[method]
|
94
|
-
end
|
95
|
-
}
|
96
|
-
else
|
97
|
-
instance_eval %Q{
|
98
|
-
def escape(method)
|
99
|
-
Escape.key?(method)
|
100
|
-
end
|
101
|
-
}
|
114
|
+
# method_missing メソッドを forward するか否か
|
115
|
+
#
|
116
|
+
# @param [Symbol] method メソッドシンボル
|
117
|
+
#
|
118
|
+
# @return [boolean] true - しない, false/nil - する
|
119
|
+
#
|
120
|
+
def escape(method)
|
121
|
+
Escape.key?(method)
|
102
122
|
end
|
103
123
|
end
|
104
124
|
|
105
|
-
|
106
|
-
#
|
107
|
-
# @return [Hash] 設定情報
|
108
|
-
#
|
109
|
-
def _setup_info
|
110
|
-
@_setup_info ||= {}
|
111
|
-
end
|
125
|
+
alias :method_missing_ :method_missing
|
112
126
|
|
113
|
-
# method_missing メソッドを forward するか否か
|
114
127
|
#
|
115
|
-
#
|
128
|
+
# 最初に発生する method_missing で、キャッシュ機能を登録する
|
116
129
|
#
|
117
|
-
# @
|
130
|
+
# @param [Symbol] name メソッド名
|
131
|
+
# @param [Array] args メソッド引数
|
132
|
+
# @param [block] block ブロック(省略可)
|
118
133
|
#
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
end
|
123
|
-
|
124
|
-
alias :method_missing_ :method_missing
|
125
|
-
|
126
|
-
#
|
127
|
-
# 最初に発生する method_missing で、キャッシュ機能を登録する
|
128
|
-
#
|
129
|
-
# @param [Symbol] name メソッド名
|
130
|
-
# @param [Array] args メソッド引数
|
131
|
-
# @param [block] block ブロック(省略可)
|
132
|
-
#
|
133
|
-
# @return [void]
|
134
|
-
#
|
135
|
-
def method_missing(name, *args, &block)
|
134
|
+
# @return [void]
|
135
|
+
#
|
136
|
+
def method_missing(name, *args, &block)
|
136
137
|
|
137
|
-
|
138
|
-
|
138
|
+
return method_missing_(name, *args, &block) unless respond_to?("#{name}_", true)
|
139
|
+
return send("#{name}_", *args, &block) if MethodCash.direct
|
139
140
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
141
|
+
if ((name.to_s =~ /^(_*)(.+?)_to_(.+)$/) && respond_to?("#{$1}#{$3}_to_#{$2}_", true))
|
142
|
+
prefix, from, to = $~[1..3]
|
143
|
+
begin
|
144
|
+
if (@_m_cash_lock_)
|
145
|
+
return send("#{prefix}#{from}_to_#{to}_", *args, &block) unless @_m_cash_lock_.try_lock
|
146
|
+
unlock = "ensure ; @_m_cash_lock_.locked? && @_m_cash_lock_.unlock"
|
147
|
+
end
|
148
|
+
[[from, to],[to, from]].each do |pair|
|
149
|
+
a, b = pair
|
150
|
+
lock = @_m_cash_lock_ ? " return #{prefix}#{a}_to_#{b}_(*args) unless @_m_cash_lock_.try_lock" : ''
|
151
|
+
instance_eval %Q{
|
152
|
+
def #{prefix}#{a}_to_#{b}(*args)
|
153
|
+
key = _key_simplefy(args)
|
154
|
+
inv = @_m_cash_["#{prefix}#{a}_to_#{b}"][key]
|
155
|
+
return inv if inv
|
156
|
+
begin
|
157
|
+
#{lock}
|
158
|
+
inv = #{prefix}#{a}_to_#{b}_(*args)
|
159
|
+
@_m_cash_["#{prefix}#{b}_to_#{a}"][_key_simplefy(inv)] = args
|
160
|
+
@_m_cash_["#{prefix}#{a}_to_#{b}"][key] = inv
|
161
|
+
return inv
|
162
|
+
#{unlock}
|
163
|
+
end
|
164
|
+
end
|
165
|
+
}
|
166
|
+
end
|
167
|
+
key = _key_simplefy(args)
|
168
|
+
inv = send("#{prefix}#{from}_to_#{to}_", *args)
|
169
|
+
@_m_cash_ ||= {}
|
170
|
+
@_m_cash_["#{prefix}#{to}_to_#{from}"] ||= {}
|
171
|
+
@_m_cash_["#{prefix}#{from}_to_#{to}"] ||= {}
|
172
|
+
@_m_cash_["#{prefix}#{to}_to_#{from}"][_key_simplefy(inv)] = args
|
173
|
+
@_m_cash_["#{prefix}#{from}_to_#{to}"][key] = inv
|
174
|
+
return inv
|
175
|
+
ensure
|
176
|
+
@_m_cash_lock_ && @_m_cash_lock_.locked? && @_m_cash_lock_.unlock
|
146
177
|
end
|
147
|
-
|
148
|
-
|
149
|
-
|
178
|
+
|
179
|
+
else
|
180
|
+
begin
|
181
|
+
respond = respond_to?("#{name}_setup", true)
|
182
|
+
setup = respond ? "#{name}_setup(key, *args)" :
|
183
|
+
"(@_m_cash_[\"#{name}\"][key] = #{name}_(*args))"
|
184
|
+
if (@_m_cash_lock_)
|
185
|
+
return send("#{name}_", *args, &block) unless @_m_cash_lock_.try_lock
|
186
|
+
lock = " return #{name}_(*args) unless @_m_cash_lock_.try_lock"
|
187
|
+
unlock = "ensure ; @_m_cash_lock_.locked? && @_m_cash_lock_.unlock"
|
188
|
+
end
|
150
189
|
instance_eval %Q{
|
151
|
-
def #{
|
190
|
+
def #{name}(*args)
|
152
191
|
key = _key_simplefy(args)
|
153
|
-
|
154
|
-
return
|
192
|
+
ret = @_m_cash_["#{name}"][key]
|
193
|
+
return ret if ret
|
155
194
|
begin
|
156
195
|
#{lock}
|
157
|
-
|
158
|
-
@_m_cash_["#{prefix}#{b}_to_#{a}"][_key_simplefy(inv)] = args
|
159
|
-
@_m_cash_["#{prefix}#{a}_to_#{b}"][key] = inv
|
160
|
-
return inv
|
196
|
+
return #{setup}
|
161
197
|
#{unlock}
|
162
198
|
end
|
163
199
|
end
|
164
200
|
}
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
@_m_cash_["#{prefix}#{from}_to_#{to}"] ||= {}
|
171
|
-
@_m_cash_["#{prefix}#{to}_to_#{from}"][_key_simplefy(inv)] = args
|
172
|
-
@_m_cash_["#{prefix}#{from}_to_#{to}"][key] = inv
|
173
|
-
return inv
|
174
|
-
ensure
|
175
|
-
@_m_cash_lock_ && @_m_cash_lock_.locked? && @_m_cash_lock_.unlock
|
176
|
-
end
|
177
|
-
|
178
|
-
else
|
179
|
-
begin
|
180
|
-
respond = respond_to?("#{name}_setup", true)
|
181
|
-
setup = respond ? "#{name}_setup(key, *args)" :
|
182
|
-
"(@_m_cash_[\"#{name}\"][key] = #{name}_(*args))"
|
183
|
-
if (@_m_cash_lock_)
|
184
|
-
return send("#{name}_", *args, &block) unless @_m_cash_lock_.try_lock
|
185
|
-
lock = " return #{name}_(*args) unless @_m_cash_lock_.try_lock"
|
186
|
-
unlock = "ensure ; @_m_cash_lock_.locked? && @_m_cash_lock_.unlock"
|
187
|
-
end
|
188
|
-
instance_eval %Q{
|
189
|
-
def #{name}(*args)
|
190
|
-
key = _key_simplefy(args)
|
191
|
-
ret = @_m_cash_["#{name}"][key]
|
192
|
-
return ret if ret
|
193
|
-
begin
|
194
|
-
#{lock}
|
195
|
-
return #{setup}
|
196
|
-
#{unlock}
|
197
|
-
end
|
198
|
-
end
|
199
|
-
}
|
200
|
-
key = _key_simplefy(args)
|
201
|
-
@_m_cash_ ||= {}
|
202
|
-
@_m_cash_["#{name}"] ||= {}
|
203
|
-
if (respond)
|
204
|
-
return send("#{name}_setup", key, *args)
|
205
|
-
else
|
206
|
-
return(@_m_cash_["#{name}"][key] ||= send("#{name}_", *args))
|
207
|
-
end
|
208
|
-
ensure
|
209
|
-
@_m_cash_lock_ && @_m_cash_lock_.locked? && @_m_cash_lock_.unlock
|
210
|
-
end
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
private
|
215
|
-
|
216
|
-
def _key_simplefy(args)
|
217
|
-
key = args.kind_of?(Array) ? args.dup : args
|
218
|
-
key = key[0] while key.kind_of?(Array) && key.length<=1
|
219
|
-
return key
|
220
|
-
end
|
221
|
-
end
|
222
|
-
|
223
|
-
#
|
224
|
-
# デバッグのためのオブジェクト内部記録用
|
225
|
-
# @private
|
226
|
-
module SnapShot
|
227
|
-
|
228
|
-
@@depth = 2
|
229
|
-
|
230
|
-
class << self
|
231
|
-
def _default(depth=2)
|
232
|
-
@@depth = depth
|
233
|
-
end
|
234
|
-
|
235
|
-
def _snapshot(object, depth=@@depth, processed={})
|
236
|
-
obj = object.dup rescue (return object)
|
237
|
-
# def obj.is_snapshoted? ; true ; end
|
238
|
-
if (depth==0 || processed.key?(object))
|
239
|
-
return object if object.instance_of?(String)
|
240
|
-
string = object.to_s
|
241
|
-
string = "<##{object.class}>" + string unless (string =~ /^#</)
|
242
|
-
return string
|
243
|
-
else
|
244
|
-
object.instance_variables.each do |v|
|
245
|
-
if ((v =~ /^@_/) && object.kind_of?(SnapShot))
|
246
|
-
obj._remove_instance_variable(v)
|
201
|
+
key = _key_simplefy(args)
|
202
|
+
@_m_cash_ ||= {}
|
203
|
+
@_m_cash_["#{name}"] ||= {}
|
204
|
+
if (respond)
|
205
|
+
return send("#{name}_setup", key, *args)
|
247
206
|
else
|
248
|
-
|
249
|
-
case src
|
250
|
-
when Array
|
251
|
-
val = src.map {|e| _snapshot(e, depth-1, processed)}
|
252
|
-
when Hash
|
253
|
-
val = {}
|
254
|
-
src.each_pair {|k,c| val[_snapshot(k, depth-1, processed)] = _snapshot(c, depth-1, processed)}
|
255
|
-
else
|
256
|
-
val = _snapshot(src, depth-1, processed)
|
257
|
-
end
|
258
|
-
obj.instance_variable_set(v, val)
|
207
|
+
return(@_m_cash_["#{name}"][key] ||= send("#{name}_", *args))
|
259
208
|
end
|
209
|
+
ensure
|
210
|
+
@_m_cash_lock_ && @_m_cash_lock_.locked? && @_m_cash_lock_.unlock
|
260
211
|
end
|
261
|
-
processed[object] = true
|
262
212
|
end
|
263
|
-
return obj
|
264
213
|
end
|
265
|
-
end
|
266
214
|
|
267
|
-
|
268
|
-
SnapShot._snapshot(self, depth, processed)
|
269
|
-
end
|
215
|
+
private
|
270
216
|
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
217
|
+
def _key_simplefy(args)
|
218
|
+
key = args.kind_of?(Array) ? args.dup : args
|
219
|
+
key = key[0] while key.kind_of?(Array) && key.length<=1
|
220
|
+
return key
|
221
|
+
end
|
275
222
|
end
|
276
223
|
end
|
277
|
-
# module Resource ; include SnapShot ; end
|
278
224
|
end
|