when_exe 0.3.6 → 0.3.7

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.
Files changed (117) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +171 -0
  3. data/lib/when_exe.rb +78 -47
  4. data/lib/when_exe/basictypes.rb +752 -747
  5. data/lib/when_exe/calendarnote.rb +805 -801
  6. data/lib/when_exe/calendartypes.rb +1583 -1531
  7. data/lib/when_exe/coordinates.rb +16 -15
  8. data/lib/when_exe/core/duration.rb +114 -110
  9. data/lib/when_exe/core/extension.rb +504 -504
  10. data/lib/when_exe/ephemeris.rb +1917 -1913
  11. data/lib/when_exe/ephemeris/moon.rb +333 -333
  12. data/lib/when_exe/ephemeris/notes.rb +389 -387
  13. data/lib/when_exe/ephemeris/planets.rb +585 -585
  14. data/lib/when_exe/ephemeris/sun.rb +214 -214
  15. data/lib/when_exe/googlecalendar.rb +144 -140
  16. data/lib/when_exe/icalendar.rb +1636 -1636
  17. data/lib/when_exe/inspect.rb +46 -22
  18. data/lib/when_exe/locales/akt.rb +176 -176
  19. data/lib/when_exe/locales/encoding_conversion.rb +134 -126
  20. data/lib/when_exe/locales/iast.rb +90 -90
  21. data/lib/when_exe/locales/locale.rb +750 -746
  22. data/lib/when_exe/locales/transliteration_table.rb +62 -62
  23. data/lib/when_exe/mini_application.rb +307 -305
  24. data/lib/when_exe/parts/enumerator.rb +2 -2
  25. data/lib/when_exe/parts/geometric_complex.rb +397 -397
  26. data/lib/when_exe/parts/method_cash.rb +224 -224
  27. data/lib/when_exe/parts/resource.rb +1069 -1071
  28. data/lib/when_exe/parts/timezone.rb +240 -230
  29. data/lib/when_exe/region/armenian.rb +56 -56
  30. data/lib/when_exe/region/babylonian.rb +405 -0
  31. data/lib/when_exe/region/bahai.rb +146 -146
  32. data/lib/when_exe/region/balinese.rb +622 -622
  33. data/lib/when_exe/region/chinese.rb +95 -25
  34. data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
  35. data/lib/when_exe/region/chinese/epochs.rb +1 -1
  36. data/lib/when_exe/region/chinese/twins.rb +803 -795
  37. data/lib/when_exe/region/christian.rb +824 -824
  38. data/lib/when_exe/region/coptic.rb +106 -87
  39. data/lib/when_exe/region/discordian.rb +225 -225
  40. data/lib/when_exe/region/far_east.rb +188 -188
  41. data/lib/when_exe/region/french.rb +56 -56
  42. data/lib/when_exe/region/geologicalage.rb +639 -639
  43. data/lib/when_exe/region/goddess.rb +58 -58
  44. data/lib/when_exe/region/indian.rb +1254 -1251
  45. data/lib/when_exe/region/iranian.rb +8 -8
  46. data/lib/when_exe/region/islamic.rb +3 -3
  47. data/lib/when_exe/region/japanese.rb +93 -99
  48. data/lib/when_exe/region/japanese/calendars.rb +396 -397
  49. data/lib/when_exe/region/japanese/epochs.rb +26 -26
  50. data/lib/when_exe/region/japanese/nihon_shoki.rb +71 -71
  51. data/lib/when_exe/region/japanese/notes.rb +1383 -1386
  52. data/lib/when_exe/region/japanese/residues.rb +1306 -1306
  53. data/lib/when_exe/region/japanese/twins.rb +225 -225
  54. data/lib/when_exe/region/japanese/weeks.rb +112 -0
  55. data/lib/when_exe/region/javanese.rb +230 -230
  56. data/lib/when_exe/region/jewish.rb +126 -126
  57. data/lib/when_exe/region/korean.rb +378 -378
  58. data/lib/when_exe/region/m17n.rb +114 -113
  59. data/lib/when_exe/region/martian.rb +258 -255
  60. data/lib/when_exe/region/mayan.rb +32 -32
  61. data/lib/when_exe/region/residue.rb +89 -89
  62. data/lib/when_exe/region/roman.rb +36 -24
  63. data/lib/when_exe/region/ryukyu.rb +97 -97
  64. data/lib/when_exe/region/shire.rb +240 -240
  65. data/lib/when_exe/region/soviet.rb +209 -0
  66. data/lib/when_exe/region/symmetry.rb +50 -50
  67. data/lib/when_exe/region/thai.rb +336 -335
  68. data/lib/when_exe/region/tibetan.rb +316 -315
  69. data/lib/when_exe/region/vietnamese.rb +440 -439
  70. data/lib/when_exe/region/weekdate.rb +80 -80
  71. data/lib/when_exe/region/world.rb +175 -175
  72. data/lib/when_exe/region/yerm.rb +14 -14
  73. data/lib/when_exe/region/zoroastrian.rb +203 -203
  74. data/lib/when_exe/timestandard.rb +707 -681
  75. data/lib/when_exe/tmduration.rb +338 -330
  76. data/lib/when_exe/tmobjects.rb +1346 -1325
  77. data/lib/when_exe/tmposition.rb +2115 -2072
  78. data/lib/when_exe/tmreference.rb +1693 -1669
  79. data/lib/when_exe/version.rb +1 -1
  80. data/link_to_online_documents +1 -1
  81. data/test/examples/JapanHolidaysRFC6350.ics +1 -1
  82. data/test/test.rb +67 -61
  83. data/test/test/basictypes.rb +409 -409
  84. data/test/test/calendarnote.rb +86 -69
  85. data/test/test/calendartypes.rb +97 -97
  86. data/test/test/coordinates.rb +396 -396
  87. data/test/test/ephemeris.rb +83 -74
  88. data/test/test/ephemeris/moon.rb +14 -14
  89. data/test/test/ephemeris/planets.rb +14 -14
  90. data/test/test/ephemeris/sun.rb +14 -14
  91. data/test/test/googlecalendar.rb +194 -176
  92. data/test/test/icalendar.rb +867 -858
  93. data/test/test/inspect.rb +117 -117
  94. data/test/test/parts.rb +487 -487
  95. data/test/test/region/balinese.rb +34 -0
  96. data/test/test/region/chinese.rb +218 -206
  97. data/test/test/region/christian.rb +245 -245
  98. data/test/test/region/coptic.rb +27 -27
  99. data/test/test/region/french.rb +33 -33
  100. data/test/test/region/geologicalage.rb +17 -17
  101. data/test/test/region/indian.rb +57 -57
  102. data/test/test/region/iran.rb +54 -54
  103. data/test/test/region/islamic.rb +18 -18
  104. data/test/test/region/japanese.rb +237 -219
  105. data/test/test/region/jewish.rb +61 -61
  106. data/test/test/region/m17n.rb +184 -184
  107. data/test/test/region/mayan.rb +195 -195
  108. data/test/test/region/residue.rb +147 -139
  109. data/test/test/region/thai.rb +116 -116
  110. data/test/test/region/tibetan.rb +30 -30
  111. data/test/test/region/vietnamese.rb +102 -102
  112. data/test/test/region/yerm.rb +146 -146
  113. data/test/test/timestandard.rb +81 -81
  114. data/test/test/tmobjects.rb +328 -328
  115. data/test/test/tmposition.rb +397 -284
  116. data/test/test/tmreference.rb +157 -157
  117. metadata +13 -10
@@ -1,230 +1,240 @@
1
- # -*- coding: utf-8 -*-
2
- =begin
3
- Copyright (C) 2011-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
- #
9
- # 本ライブラリのための諸々の部品
10
- #
11
- module When::Parts
12
-
13
- #
14
- # TZInfo::Timezone クラスを本ライブラリから使用するためのラッパークラス
15
- #
16
- class Timezone
17
-
18
- #
19
- # When::V::Timezone と Qhwn::Parts::Timezone の抽象基底
20
- #
21
- module Base
22
- # 標準時間帯の時計
23
- # @return [When::TM::Clock]
24
- attr_reader :standard
25
-
26
- # 夏時間帯の時計
27
- # @return [When::TM::Clock]
28
- attr_reader :daylight
29
-
30
- # 夏時間帯と標準時間帯の時間差
31
- # @return [When::TM:IntervalLength]
32
- attr_reader :tz_difference
33
-
34
- # When::TM::TemporalPosition の時間帯を変更して複製する
35
- #
36
- # @param [When::TM::CalDate, When::TM::DateAndTime, When::TM::JulianDate] date
37
- # @param [Hash] options see {When::TM::TemporalPosition._instance}
38
- #
39
- # @return [When::TM::DateAndTime, When::TM::JulianDate]
40
- #
41
- def ^(date, options={})
42
- date = When::TM::Position.any_other(date, options)
43
- options = date._attr.merge({:clock=>self}).merge(options)
44
- return When::TM::JulianDate.dynamical_time(date.dynamical_time, options) unless date.frame.kind_of?(When::TM::Calendar)
45
- date.frame.jul_trans(When::TM::JulianDate.dynamical_time(date.dynamical_time), options)
46
- end
47
- end
48
-
49
- class << self
50
- include Resource::Pool
51
-
52
- # @private
53
- alias :_get :[]
54
-
55
- # オブジェクト参照
56
- #
57
- # @param [String] label 識別名 ( "America/New_York" など)
58
- #
59
- # @return [When::Parts::Timezone] 時間帯オブジェクト
60
- #
61
- def [](label)
62
- ref = _get(label)
63
- return ref if ref
64
- self[label] = self.new(label)
65
- rescue
66
- nil
67
- end
68
- alias :get :[]
69
-
70
- # TZInfo でサポートしている Timezone の連想配列
71
- #
72
- # @return [Hash] { String => TZInfo::CountryTimezone }
73
- # [ String - 時間帯ID ]
74
- # [ TZInfo::CountryTimezone - 時間帯オブジェクト(proxy for autoload) ]
75
- #
76
- def tz_info
77
- return @tz_info if @tz_info
78
- zones = {}
79
- TZInfo::Country.all.each do |c|
80
- c.zone_info.each do |z|
81
- zones[z.identifier] ||= {}
82
- zones[z.identifier][c.code] = z
83
- end
84
- end
85
-
86
- @tz_info = {}
87
- zones.each_pair do |id, hash|
88
- if hash.keys.size == 1
89
- @tz_info[id] = hash[hash.keys[0]]
90
- else
91
- hash.each_pair do |c, z|
92
- @tz_info["#{id}(#{c})"] = z
93
- end
94
- end
95
- end
96
- @tz_info
97
- end
98
- end
99
-
100
- include Base
101
-
102
- # ラップしている TZInfo::Timezone インスタンス
103
- # @return [TZInfo::Timezone]
104
- attr_reader :timezone
105
-
106
- # ユニーク識別名
107
- # @return [String]
108
- def label
109
- @timezone.identifier
110
- end
111
-
112
- # 時間帯を代表する都市の経度 / 度
113
- # @return [Rational]
114
- def longitude
115
- self.class.tz_info[label].longitude
116
- end
117
-
118
- # 時間帯を代表する都市の緯度 / 度
119
- # @return [Rational]
120
- def latitude
121
- self.class.tz_info[label].latitude
122
- end
123
-
124
- # 時間帯を代表する都市の空間位置
125
- # @return [When::Coordinates::Spatial]
126
- def location
127
- return @location if @location
128
- tzinfo = self.class.tz_info[label]
129
- longitude = When::Coordinates.to_dms(tzinfo.longitude, 'EW')
130
- latitude = When::Coordinates.to_dms(tzinfo.latitude, 'NS')
131
- @location = When.Resource("_l:long=#{longitude}&lat=#{latitude}&label=#{label}")
132
- end
133
-
134
- # 時分秒のインデクス
135
- # @return [Array<When::Coordinates::Index>]
136
- attr_reader :indices
137
-
138
- # オブジェクト生成
139
- #
140
- # @param [String] identifier 識別名 ( "America/New_York" など)
141
- #
142
- def initialize(identifier)
143
- @timezone = TZInfo::Timezone.get(identifier)
144
- unless TZInfo::TimeOrDateTime.method_defined?(:_to_datetime)
145
- if TZInfo::RubyCoreSupport.respond_to?(:datetime_new)
146
- TZInfo::TimeOrDateTime.class_eval %Q{
147
- alias :_to_datetime :to_datetime
148
- ::Rational
149
- def to_datetime
150
- unless @datetime
151
- u = usec
152
- s = u == 0 ? sec : Rational(sec * 1000000 + u, 1000000)
153
- @datetime = TZInfo::RubyCoreSupport.datetime_new(year, mon, mday, hour, min, s, 0, Date::GREGORIAN)
154
- end
155
- @datetime
156
- end
157
- }
158
- else
159
- TZInfo::TimeOrDateTime.class_eval %Q{
160
- alias :_to_datetime :to_datetime
161
- def to_datetime
162
- @datetime ||= DateTime.new(year, mon, mday, hour, min, sec, 0, Date::GREGORIAN)
163
- end
164
- }
165
- end
166
- end
167
- dst, std = _offsets(Time.now.to_i)
168
- @standard = When::TM::Clock.new({:zone=>std, :tz_prop=>self})
169
- if std == dst
170
- @daylight = @standard
171
- @tz_difference = 0
172
- else
173
- @daylight = When::TM::Clock.new({:zone=>dst, :tz_prop=>self})
174
- @tz_difference = @standard.universal_time - @daylight.universal_time
175
- end
176
- @indices = When::Coordinates::DefaultTimeIndices
177
- end
178
-
179
- # @private
180
- def _daylight(time)
181
- frame, cal_date, clk_time = time
182
- clocks = {}
183
- if clk_time
184
- time = frame.to_universal_time(cal_date, clk_time, @standard)
185
- offsets = _offsets((time/When::TM::Duration::SECOND).floor)
186
- offsets.each do |offset|
187
- clocks[offset] ||= When::TM::Clock.new({:zone=>offset, :tz_prop=>self})
188
- return clocks[offsets[0]] if @timezone.period_for_utc(
189
- (frame.to_universal_time(cal_date, clk_time, clocks[offset])/When::TM::Duration::SECOND).floor).dst?
190
- end
191
- end
192
- offset = @timezone.period_for_utc((time/When::TM::Duration::SECOND).floor).utc_total_offset
193
- clocks[offset] || When::TM::Clock.new({:zone=>offset, :tz_prop=>self})
194
- end
195
-
196
- # @private
197
- def _need_validate
198
- true
199
- end
200
-
201
- private
202
-
203
- def _offsets(time)
204
- now = @timezone.period_for_utc(time)
205
- past = @timezone.period_for_utc(now.utc_start-1) if now.utc_start
206
- future = @timezone.period_for_utc(now.utc_end) if now.utc_end
207
- std = now.utc_offset
208
- dst = now.utc_total_offset
209
- [past, future].each do |period|
210
- next unless period
211
- std = period.utc_offset if std > period.utc_offset
212
- dst = period.utc_total_offset if dst < period.utc_total_offset
213
- end
214
- [dst, std]
215
- end
216
-
217
- # その他のメソッド
218
- # When::Parts::GeometricComplex で定義されていないメソッドは
219
- # 処理を first (type: When::TM::(Temporal)Position) に委譲する
220
- #
221
- def method_missing(name, *args, &block)
222
- self.class.module_eval %Q{
223
- def #{name}(*args, &block)
224
- timezone.send("#{name}", *args, &block)
225
- end
226
- } unless When::Parts::MethodCash.escape(name)
227
- timezone.send(name, *args, &block)
228
- end
229
- end
230
- end
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2011-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
+ #
9
+ # 本ライブラリのための諸々の部品
10
+ #
11
+ module When::Parts
12
+
13
+ #
14
+ # TZInfo::Timezone クラスを本ライブラリから使用するためのラッパークラス
15
+ #
16
+ class Timezone
17
+
18
+ #
19
+ # When::V::Timezone と Qhwn::Parts::Timezone の抽象基底
20
+ #
21
+ module Base
22
+ # 標準時間帯の時計
23
+ # @return [When::TM::Clock]
24
+ attr_reader :standard
25
+
26
+ # 夏時間帯の時計
27
+ # @return [When::TM::Clock]
28
+ attr_reader :daylight
29
+
30
+ # 夏時間帯と標準時間帯の時間差
31
+ # @return [When::TM:IntervalLength]
32
+ attr_reader :tz_difference
33
+
34
+ # When::TM::TemporalPosition の時間帯を変更して複製する
35
+ #
36
+ # @param [When::TM::CalDate, When::TM::DateAndTime, When::TM::JulianDate] date
37
+ # @param [Hash] options see {When::TM::TemporalPosition._instance}
38
+ #
39
+ # @return [When::TM::DateAndTime, When::TM::JulianDate]
40
+ #
41
+ def ^(date, options={})
42
+ date = When::TM::Position.any_other(date, options)
43
+ options = date._attr.merge({:clock=>self}).merge(options)
44
+ return When::TM::JulianDate.dynamical_time(date.dynamical_time, options) unless date.frame.kind_of?(When::TM::Calendar)
45
+ date.frame.jul_trans(When::TM::JulianDate.dynamical_time(date.dynamical_time), options)
46
+ end
47
+ end
48
+
49
+ class << self
50
+ include Resource::Pool
51
+
52
+ # @private
53
+ alias :_get :[]
54
+
55
+ # オブジェクト参照
56
+ #
57
+ # @param [String] label 識別名 ( "America/New_York" など)
58
+ #
59
+ # @return [When::Parts::Timezone] 時間帯オブジェクト
60
+ #
61
+ def [](label)
62
+ ref = _get(label)
63
+ return ref if ref
64
+ return nil unless label =~ /\A[A-Z]/i
65
+ self[label] = self.new(label)
66
+ rescue NameError
67
+ raise NameError, 'Prease install TZInfo - gem install tzinfo'
68
+ end
69
+ alias :get :[]
70
+
71
+ # TZInfo でサポートしている Timezone の連想配列
72
+ #
73
+ # @return [Hash] { String => TZInfo::CountryTimezone }
74
+ # [ String - 時間帯ID ]
75
+ # [ TZInfo::CountryTimezone - 時間帯オブジェクト(proxy for autoload) ]
76
+ #
77
+ def tz_info
78
+ return @tz_info if @tz_info
79
+ zones = {}
80
+ TZInfo::Country.all.each do |c|
81
+ c.zone_info.each do |z|
82
+ zones[z.identifier] ||= {}
83
+ zones[z.identifier][c.code] = z
84
+ end
85
+ end
86
+
87
+ @tz_info = {}
88
+ zones.each_pair do |id, hash|
89
+ if hash.keys.size == 1
90
+ @tz_info[id] = hash[hash.keys[0]]
91
+ else
92
+ hash.each_pair do |c, z|
93
+ @tz_info["#{id}(#{c})"] = z
94
+ end
95
+ end
96
+ end
97
+ @tz_info
98
+ end
99
+ end
100
+
101
+ include Base
102
+
103
+ # ラップしている TZInfo::Timezone インスタンス
104
+ # @return [TZInfo::Timezone]
105
+ attr_reader :timezone
106
+
107
+ # ユニーク識別名
108
+ # @return [String]
109
+ def label
110
+ @timezone.identifier
111
+ end
112
+
113
+ # 時間帯を代表する都市の経度 / 度
114
+ # @return [Rational]
115
+ def longitude
116
+ self.class.tz_info[label].longitude
117
+ end
118
+
119
+ # 時間帯を代表する都市の緯度 / 度
120
+ # @return [Rational]
121
+ def latitude
122
+ self.class.tz_info[label].latitude
123
+ end
124
+
125
+ # 時間帯を代表する都市の空間位置
126
+ # @return [When::Coordinates::Spatial]
127
+ def location
128
+ return @location if @location
129
+ tzinfo = self.class.tz_info[label]
130
+ longitude = When::Coordinates.to_dms(tzinfo.longitude, 'EW')
131
+ latitude = When::Coordinates.to_dms(tzinfo.latitude, 'NS')
132
+ @location = When.Resource("_l:long=#{longitude}&lat=#{latitude}&label=#{label}")
133
+ end
134
+
135
+ # 時分秒のインデクス
136
+ # @return [Array<When::Coordinates::Index>]
137
+ attr_reader :indices
138
+
139
+ # オブジェクト生成
140
+ #
141
+ # @param [String] identifier 識別名 ( "America/New_York" など)
142
+ #
143
+ def initialize(identifier)
144
+ id, query = identifier.split('?', 2)
145
+ @timezone = TZInfo::Timezone.get(id)
146
+ unless TZInfo::TimeOrDateTime.method_defined?(:_to_datetime)
147
+ if TZInfo::RubyCoreSupport.respond_to?(:datetime_new)
148
+ TZInfo::TimeOrDateTime.class_eval %Q{
149
+ alias :_to_datetime :to_datetime
150
+ ::Rational
151
+ def to_datetime
152
+ unless @datetime
153
+ u = usec
154
+ s = u == 0 ? sec : Rational(sec * 1000000 + u, 1000000)
155
+ @datetime = TZInfo::RubyCoreSupport.datetime_new(year, mon, mday, hour, min, s, 0, Date::GREGORIAN)
156
+ end
157
+ @datetime
158
+ end
159
+ }
160
+ else
161
+ TZInfo::TimeOrDateTime.class_eval %Q{
162
+ alias :_to_datetime :to_datetime
163
+ def to_datetime
164
+ @datetime ||= DateTime.new(year, mon, mday, hour, min, sec, 0, Date::GREGORIAN)
165
+ end
166
+ }
167
+ end
168
+ end
169
+ dst, std = _offsets(Time.now.to_i)
170
+ options = query ? Hash[*(query.split('&').map {|item| item.split('=',2)}.flatten)] : {}
171
+ @standard = When::TM::Clock.new(options.merge({:zone=>std, :tz_prop=>self}))
172
+ if std == dst
173
+ @daylight = @standard
174
+ @tz_difference = 0
175
+ else
176
+ @daylight = When::TM::Clock.new(options.merge({:zone=>dst, :tz_prop=>self}))
177
+ @tz_difference = @standard.universal_time - @daylight.universal_time
178
+ end
179
+ @indices = When::Coordinates::DefaultTimeIndices
180
+ end
181
+
182
+ # @private
183
+ def _daylight(time)
184
+ frame, cal_date, clk_time = time
185
+ clocks = {}
186
+ options = {}
187
+ %w(border location).each do |attr|
188
+ value = @standard.instance_variable_get("@#{attr}")
189
+ next unless value
190
+ value = value.dup unless value.kind_of?(When::Parts::Resource) && value.registered?
191
+ options[attr] = value
192
+ end
193
+ if clk_time
194
+ time = frame.to_universal_time(cal_date, clk_time, @standard)
195
+ offsets = _offsets((time/When::TM::Duration::SECOND).floor)
196
+ offsets.each do |offset|
197
+ clocks[offset] ||= When::TM::Clock.new(options.merge({:zone=>offset, :tz_prop=>self}))
198
+ return clocks[offsets[0]] if @timezone.period_for_utc(
199
+ (frame.to_universal_time(cal_date, clk_time, clocks[offset])/When::TM::Duration::SECOND).floor).dst?
200
+ end
201
+ end
202
+ offset = @timezone.period_for_utc((time/When::TM::Duration::SECOND).floor).utc_total_offset
203
+ clocks[offset] || When::TM::Clock.new(options.merge({:zone=>offset, :tz_prop=>self}))
204
+ end
205
+
206
+ # @private
207
+ def _need_validate
208
+ true
209
+ end
210
+
211
+ private
212
+
213
+ def _offsets(time)
214
+ now = @timezone.period_for_utc(time)
215
+ past = @timezone.period_for_utc(now.utc_start-1) if now.utc_start
216
+ future = @timezone.period_for_utc(now.utc_end) if now.utc_end
217
+ std = now.utc_offset
218
+ dst = now.utc_total_offset
219
+ [past, future].each do |period|
220
+ next unless period
221
+ std = period.utc_offset if std > period.utc_offset
222
+ dst = period.utc_total_offset if dst < period.utc_total_offset
223
+ end
224
+ [dst, std]
225
+ end
226
+
227
+ # その他のメソッド
228
+ # When::Parts::GeometricComplex で定義されていないメソッドは
229
+ # 処理を first (type: When::TM::(Temporal)Position) に委譲する
230
+ #
231
+ def method_missing(name, *args, &block)
232
+ self.class.module_eval %Q{
233
+ def #{name}(*args, &block)
234
+ timezone.send("#{name}", *args, &block)
235
+ end
236
+ } unless When::Parts::MethodCash.escape(name)
237
+ timezone.send(name, *args, &block)
238
+ end
239
+ end
240
+ end