when_exe 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +36 -33
  3. data/bin/locales.rb +1 -1
  4. data/bin/make_ttl.rb.config +1 -1
  5. data/lib/when_exe.rb +27 -16
  6. data/lib/when_exe/basictypes.rb +772 -771
  7. data/lib/when_exe/calendartypes.rb +1485 -1453
  8. data/lib/when_exe/coordinates.rb +5 -0
  9. data/lib/when_exe/core/compatibility.rb +1 -1
  10. data/lib/when_exe/core/duration.rb +147 -116
  11. data/lib/when_exe/core/extension.rb +499 -497
  12. data/lib/when_exe/ephemeris.rb +1952 -1951
  13. data/lib/when_exe/ephemeris/eclipse.rb +5 -4
  14. data/lib/when_exe/ephemeris/notes.rb +457 -421
  15. data/lib/when_exe/ephemeris/planets.rb +585 -585
  16. data/lib/when_exe/ephemeris/sun.rb +214 -214
  17. data/lib/when_exe/google_api.rb +153 -0
  18. data/lib/when_exe/icalendar.rb +1640 -1632
  19. data/lib/when_exe/inspect.rb +42 -20
  20. data/lib/when_exe/linkeddata.rb +28 -7
  21. data/lib/when_exe/locales/autoload.rb +2 -1
  22. data/lib/when_exe/locales/locale.rb +35 -15
  23. data/lib/when_exe/locales/zh.rb +77 -0
  24. data/lib/when_exe/mini_application.rb +3 -1
  25. data/lib/when_exe/{googlecalendar.rb → obsolete/googlecalendar.rb} +144 -144
  26. data/lib/when_exe/parts/enumerator.rb +498 -486
  27. data/lib/when_exe/parts/geometric_complex.rb +397 -397
  28. data/lib/when_exe/parts/timezone.rb +246 -241
  29. data/lib/when_exe/region/armenian.rb +55 -56
  30. data/lib/when_exe/region/babylonian.rb +406 -405
  31. data/lib/when_exe/region/bahai.rb +107 -106
  32. data/lib/when_exe/region/balinese.rb +624 -622
  33. data/lib/when_exe/region/chinese.rb +1071 -1026
  34. data/lib/when_exe/region/chinese/epochs.rb +28 -28
  35. data/lib/when_exe/region/chinese/notes.rb +219 -0
  36. data/lib/when_exe/region/chinese/twins.rb +803 -803
  37. data/lib/when_exe/region/christian.rb +21 -15
  38. data/lib/when_exe/region/coptic.rb +107 -106
  39. data/lib/when_exe/region/discordian.rb +218 -218
  40. data/lib/when_exe/region/east_asian.rb +1 -1
  41. data/lib/when_exe/region/french.rb +126 -56
  42. data/lib/when_exe/region/geologicalage.rb +639 -639
  43. data/lib/when_exe/region/goddess.rb +60 -58
  44. data/lib/when_exe/region/hanke_henry.rb +2 -2
  45. data/lib/when_exe/region/indian.rb +1225 -1222
  46. data/lib/when_exe/region/international_fixed.rb +96 -97
  47. data/lib/when_exe/region/iranian.rb +206 -203
  48. data/lib/when_exe/region/islamic.rb +102 -102
  49. data/lib/when_exe/region/japanese.rb +126 -71
  50. data/lib/when_exe/region/japanese/epochs.rb +426 -426
  51. data/lib/when_exe/region/japanese/notes.rb +101 -81
  52. data/lib/when_exe/region/japanese/residues.rb +1345 -1311
  53. data/lib/when_exe/region/japanese/twins.rb +225 -225
  54. data/lib/when_exe/region/japanese/weeks.rb +112 -112
  55. data/lib/when_exe/region/javanese.rb +230 -230
  56. data/lib/when_exe/region/jewish.rb +130 -131
  57. data/lib/when_exe/region/m17n.rb +114 -114
  58. data/lib/when_exe/region/martian.rb +258 -258
  59. data/lib/when_exe/region/mayan.rb +11 -8
  60. data/lib/when_exe/region/pax.rb +4 -5
  61. data/lib/when_exe/region/pope.rb +1 -1
  62. data/lib/when_exe/region/positivist.rb +100 -100
  63. data/lib/when_exe/region/residue.rb +162 -162
  64. data/lib/when_exe/region/roman.rb +333 -333
  65. data/lib/when_exe/region/{soviet.rb → russian.rb} +221 -209
  66. data/lib/when_exe/region/shire.rb +222 -223
  67. data/lib/when_exe/region/symmetry.rb +50 -50
  68. data/lib/when_exe/region/thai.rb +336 -336
  69. data/lib/when_exe/region/tibetan.rb +315 -316
  70. data/lib/when_exe/region/tranquility.rb +207 -208
  71. data/lib/when_exe/region/vanishing_leprechaun.rb +3 -1
  72. data/lib/when_exe/region/vietnamese.rb +449 -440
  73. data/lib/when_exe/region/weekdate.rb +80 -80
  74. data/lib/when_exe/region/world.rb +170 -171
  75. data/lib/when_exe/region/world_season.rb +89 -89
  76. data/lib/when_exe/region/yerm.rb +3 -3
  77. data/lib/when_exe/region/zoroastrian.rb +205 -205
  78. data/lib/when_exe/timestandard.rb +708 -707
  79. data/lib/when_exe/tmduration.rb +338 -338
  80. data/lib/when_exe/tmobjects.rb +1356 -1356
  81. data/lib/when_exe/tmposition.rb +66 -31
  82. data/lib/when_exe/version.rb +16 -2
  83. data/test/examples/Residue.m17n +83 -83
  84. data/test/examples/Terms.m17n +2 -2
  85. data/test/test.rb +2 -2
  86. data/test/test/google_api.rb +65 -0
  87. data/test/test/linkeddata.rb +1 -1
  88. data/test/test/{googlecalendar.rb → obsolete/googlecalendar.rb} +194 -194
  89. data/test/test/region/indian.rb +90 -85
  90. data/test/test/region/m17n.rb +7 -7
  91. data/test/test/region/mayan.rb +195 -195
  92. data/test/test/region/residue.rb +153 -153
  93. data/test/test/tmposition.rb +11 -1
  94. data/when_exe.gemspec +2 -2
  95. metadata +95 -8
  96. data/test/test.rb.config +0 -1
@@ -1,241 +1,246 @@
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
- attr_reader :identifier
110
- alias :label :identifier
111
- alias :inspect :identifier
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
- @identifier = identifier
145
- id, query = identifier.split('?', 2)
146
- @timezone = TZInfo::Timezone.get(id)
147
- unless TZInfo::TimeOrDateTime.method_defined?(:_to_datetime)
148
- if TZInfo::RubyCoreSupport.respond_to?(:datetime_new)
149
- TZInfo::TimeOrDateTime.class_eval %Q{
150
- alias :_to_datetime :to_datetime
151
- ::Rational
152
- def to_datetime
153
- unless @datetime
154
- u = usec
155
- s = u == 0 ? sec : Rational(sec * 1000000 + u, 1000000)
156
- @datetime = TZInfo::RubyCoreSupport.datetime_new(year, mon, mday, hour, min, s, 0, Date::GREGORIAN)
157
- end
158
- @datetime
159
- end
160
- }
161
- else
162
- TZInfo::TimeOrDateTime.class_eval %Q{
163
- alias :_to_datetime :to_datetime
164
- def to_datetime
165
- @datetime ||= DateTime.new(year, mon, mday, hour, min, sec, 0, Date::GREGORIAN)
166
- end
167
- }
168
- end
169
- end
170
- dst, std = _offsets(Time.now.to_i)
171
- options = query ? Hash[*(query.split('&').map {|item| item.split('=',2)}.flatten)] : {}
172
- @standard = When::TM::Clock.new(options.merge({:zone=>std, :tz_prop=>self}))
173
- if std == dst
174
- @daylight = @standard
175
- @tz_difference = 0
176
- else
177
- @daylight = When::TM::Clock.new(options.merge({:zone=>dst, :tz_prop=>self}))
178
- @tz_difference = @standard.universal_time - @daylight.universal_time
179
- end
180
- @indices = When::Coordinates::DefaultTimeIndices
181
- end
182
-
183
- # @private
184
- def _daylight(time)
185
- frame, cal_date, clk_time = time
186
- clocks = {}
187
- options = {}
188
- %w(border location).each do |attr|
189
- value = @standard.instance_variable_get("@#{attr}")
190
- next unless value
191
- value = value.dup unless value.kind_of?(When::Parts::Resource) && value.registered?
192
- options[attr] = value
193
- end
194
- if clk_time
195
- time = frame.to_universal_time(cal_date, clk_time, @standard)
196
- offsets = _offsets((time/When::TM::Duration::SECOND).floor)
197
- offsets.each do |offset|
198
- clocks[offset] ||= When::TM::Clock.new(options.merge({:zone=>offset, :tz_prop=>self}))
199
- return clocks[offsets[0]] if @timezone.period_for_utc(
200
- (frame.to_universal_time(cal_date, clk_time, clocks[offset])/When::TM::Duration::SECOND).floor).dst?
201
- end
202
- end
203
- offset = @timezone.period_for_utc((time/When::TM::Duration::SECOND).floor).utc_total_offset
204
- clocks[offset] || When::TM::Clock.new(options.merge({:zone=>offset, :tz_prop=>self}))
205
- end
206
-
207
- # @private
208
- def _need_validate
209
- true
210
- end
211
-
212
- private
213
-
214
- def _offsets(time)
215
- now = @timezone.period_for_utc(time)
216
- past = @timezone.period_for_utc(now.utc_start-1) if now.utc_start
217
- future = @timezone.period_for_utc(now.utc_end) if now.utc_end
218
- std = now.utc_offset
219
- dst = now.utc_total_offset
220
- [past, future].each do |period|
221
- next unless period
222
- std = period.utc_offset if std > period.utc_offset
223
- dst = period.utc_total_offset if dst < period.utc_total_offset
224
- end
225
- [dst, std]
226
- end
227
-
228
- # その他のメソッド
229
- # When::Parts::GeometricComplex で定義されていないメソッドは
230
- # 処理を first (type: When::TM::(Temporal)Position) に委譲する
231
- #
232
- def method_missing(name, *args, &block)
233
- self.class.module_eval %Q{
234
- def #{name}(*args, &block)
235
- timezone.send("#{name}", *args, &block)
236
- end
237
- } unless When::Parts::MethodCash.escape(name)
238
- timezone.send(name, *args, &block)
239
- end
240
- end
241
- end
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2011-2015 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
+ @tz_info[id] = hash[hash.keys[0]]
90
+ unless hash.keys.size == 1
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
+ attr_reader :identifier
109
+ alias :label :identifier
110
+ alias :inspect :identifier
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
+ city_tz = @timezone
129
+ unless self.class.tz_info[label]
130
+ while city_tz.kind_of?(TZInfo::LinkedTimezone)
131
+ city_tz = TZInfo::Timezone.get(city_tz.send(:info).link_to_identifier)
132
+ end
133
+ end
134
+ tzinfo = self.class.tz_info[city_tz.identifier]
135
+ longitude = When::Coordinates.to_dms(tzinfo.longitude, 'EW')
136
+ latitude = When::Coordinates.to_dms(tzinfo.latitude, 'NS')
137
+ @location = When.Resource("_l:long=#{longitude}&lat=#{latitude}&label=#{label}")
138
+ end
139
+
140
+ # 時分秒のインデクス
141
+ # @return [Array<When::Coordinates::Index>]
142
+ attr_reader :indices
143
+
144
+ # オブジェクト生成
145
+ #
146
+ # @param [String] identifier 識別名 ( "America/New_York" など)
147
+ #
148
+ def initialize(identifier)
149
+ @identifier = identifier
150
+ id, query = identifier.split('?', 2)
151
+ @timezone = TZInfo::Timezone.get(id.sub(/\(.+?\)\z/,''))
152
+ unless TZInfo::TimeOrDateTime.method_defined?(:_to_datetime)
153
+ if TZInfo::RubyCoreSupport.respond_to?(:datetime_new)
154
+ TZInfo::TimeOrDateTime.class_eval %Q{
155
+ alias :_to_datetime :to_datetime
156
+ ::Rational
157
+ def to_datetime
158
+ unless @datetime
159
+ u = usec
160
+ s = u == 0 ? sec : Rational(sec * 1000000 + u, 1000000)
161
+ @datetime = TZInfo::RubyCoreSupport.datetime_new(year, mon, mday, hour, min, s, 0, Date::GREGORIAN)
162
+ end
163
+ @datetime
164
+ end
165
+ }
166
+ else
167
+ TZInfo::TimeOrDateTime.class_eval %Q{
168
+ alias :_to_datetime :to_datetime
169
+ def to_datetime
170
+ @datetime ||= DateTime.new(year, mon, mday, hour, min, sec, 0, Date::GREGORIAN)
171
+ end
172
+ }
173
+ end
174
+ end
175
+ dst, std = _offsets(Time.now.to_i)
176
+ options = query ? Hash[*(query.split('&').map {|item| item.split('=',2)}.flatten)] : {}
177
+ @standard = When::TM::Clock.new(options.merge({:zone=>std, :tz_prop=>self}))
178
+ if std == dst
179
+ @daylight = @standard
180
+ @tz_difference = 0
181
+ else
182
+ @daylight = When::TM::Clock.new(options.merge({:zone=>dst, :tz_prop=>self}))
183
+ @tz_difference = @standard.universal_time - @daylight.universal_time
184
+ end
185
+ @indices = When::Coordinates::DefaultTimeIndices
186
+ end
187
+
188
+ # @private
189
+ def _daylight(time)
190
+ frame, cal_date, clk_time = time
191
+ clocks = {}
192
+ options = {}
193
+ %w(border location).each do |attr|
194
+ value = @standard.instance_variable_get("@#{attr}")
195
+ next unless value
196
+ value = value.dup unless value.kind_of?(When::Parts::Resource) && value.registered?
197
+ options[attr] = value
198
+ end
199
+ if clk_time
200
+ time = frame.to_universal_time(cal_date, clk_time, @standard)
201
+ offsets = _offsets((time/When::TM::Duration::SECOND).floor)
202
+ offsets.each do |offset|
203
+ clocks[offset] ||= When::TM::Clock.new(options.merge({:zone=>offset, :tz_prop=>self}))
204
+ return clocks[offsets[0]] if @timezone.period_for_utc(
205
+ (frame.to_universal_time(cal_date, clk_time, clocks[offset])/When::TM::Duration::SECOND).floor).dst?
206
+ end
207
+ end
208
+ offset = @timezone.period_for_utc((time/When::TM::Duration::SECOND).floor).utc_total_offset
209
+ clocks[offset] || When::TM::Clock.new(options.merge({:zone=>offset, :tz_prop=>self}))
210
+ end
211
+
212
+ # @private
213
+ def _need_validate
214
+ true
215
+ end
216
+
217
+ private
218
+
219
+ def _offsets(time)
220
+ now = @timezone.period_for_utc(time)
221
+ past = @timezone.period_for_utc(now.utc_start-1) if now.utc_start
222
+ future = @timezone.period_for_utc(now.utc_end) if now.utc_end
223
+ std = now.utc_offset
224
+ dst = now.utc_total_offset
225
+ [past, future].each do |period|
226
+ next unless period
227
+ std = period.utc_offset if std > period.utc_offset
228
+ dst = period.utc_total_offset if dst < period.utc_total_offset
229
+ end
230
+ [dst, std]
231
+ end
232
+
233
+ # その他のメソッド
234
+ # When::Parts::GeometricComplex で定義されていないメソッドは
235
+ # 処理を first (type: When::TM::(Temporal)Position) に委譲する
236
+ #
237
+ def method_missing(name, *args, &block)
238
+ self.class.module_eval %Q{
239
+ def #{name}(*args, &block)
240
+ timezone.send("#{name}", *args, &block)
241
+ end
242
+ } unless When::Parts::MethodCash.escape(name)
243
+ timezone.send(name, *args, &block)
244
+ end
245
+ end
246
+ end