when_exe 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
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