timezone 1.2.8 → 1.2.9

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 (267) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +28 -24
  3. data/.travis.yml +1 -1
  4. data/CHANGES.markdown +5 -0
  5. data/CODE_OF_CONDUCT.md +46 -0
  6. data/Gemfile +2 -0
  7. data/README.markdown +5 -0
  8. data/Rakefile +3 -1
  9. data/benchmark.rb +1 -0
  10. data/data/Africa/Casablanca +2 -924
  11. data/data/Africa/Ceuta +0 -922
  12. data/data/Africa/El_Aaiun +2 -924
  13. data/data/Africa/Juba +2 -2
  14. data/data/Africa/Khartoum +2 -1
  15. data/data/Africa/Windhoek +3 -967
  16. data/data/America/Adak +2 -924
  17. data/data/America/Anchorage +2 -924
  18. data/data/America/Asuncion +0 -922
  19. data/data/America/Atka +2 -924
  20. data/data/America/Bahia_Banderas +0 -922
  21. data/data/America/Boise +0 -922
  22. data/data/America/Cambridge_Bay +0 -922
  23. data/data/America/Campo_Grande +0 -922
  24. data/data/America/Chicago +0 -922
  25. data/data/America/Chihuahua +0 -922
  26. data/data/America/Cuiaba +0 -922
  27. data/data/America/Dawson +0 -922
  28. data/data/America/Denver +0 -922
  29. data/data/America/Detroit +1 -925
  30. data/data/America/Edmonton +0 -922
  31. data/data/America/Ensenada +0 -922
  32. data/data/America/Fort_Wayne +0 -922
  33. data/data/America/Glace_Bay +0 -922
  34. data/data/America/Godthab +0 -922
  35. data/data/America/Goose_Bay +0 -922
  36. data/data/America/Grand_Turk +43 -1
  37. data/data/America/Halifax +0 -922
  38. data/data/America/Havana +0 -922
  39. data/data/America/Indiana/Indianapolis +0 -922
  40. data/data/America/Indiana/Knox +0 -922
  41. data/data/America/Indiana/Marengo +0 -922
  42. data/data/America/Indiana/Petersburg +0 -922
  43. data/data/America/Indiana/Tell_City +0 -922
  44. data/data/America/Indiana/Vevay +0 -922
  45. data/data/America/Indiana/Vincennes +0 -922
  46. data/data/America/Indiana/Winamac +0 -922
  47. data/data/America/Indianapolis +0 -922
  48. data/data/America/Inuvik +0 -922
  49. data/data/America/Iqaluit +0 -922
  50. data/data/America/Juneau +2 -924
  51. data/data/America/Kentucky/Louisville +0 -922
  52. data/data/America/Kentucky/Monticello +0 -922
  53. data/data/America/Knox_IN +0 -922
  54. data/data/America/Los_Angeles +0 -922
  55. data/data/America/Louisville +0 -922
  56. data/data/America/Matamoros +0 -922
  57. data/data/America/Mazatlan +0 -922
  58. data/data/America/Menominee +0 -922
  59. data/data/America/Merida +0 -922
  60. data/data/America/Metlakatla +2 -924
  61. data/data/America/Mexico_City +0 -922
  62. data/data/America/Miquelon +0 -922
  63. data/data/America/Moncton +0 -922
  64. data/data/America/Monterrey +0 -922
  65. data/data/America/Montreal +0 -922
  66. data/data/America/Nassau +0 -922
  67. data/data/America/New_York +0 -922
  68. data/data/America/Nipigon +0 -922
  69. data/data/America/Nome +2 -924
  70. data/data/America/North_Dakota/Beulah +0 -922
  71. data/data/America/North_Dakota/Center +0 -922
  72. data/data/America/North_Dakota/New_Salem +0 -922
  73. data/data/America/Ojinaga +0 -922
  74. data/data/America/Pangnirtung +0 -922
  75. data/data/America/Port-au-Prince +0 -922
  76. data/data/America/Rainy_River +0 -922
  77. data/data/America/Rankin_Inlet +0 -922
  78. data/data/America/Resolute +0 -922
  79. data/data/America/Santa_Isabel +0 -922
  80. data/data/America/Santiago +0 -922
  81. data/data/America/Sao_Paulo +0 -922
  82. data/data/America/Scoresbysund +0 -922
  83. data/data/America/Shiprock +0 -922
  84. data/data/America/Sitka +2 -924
  85. data/data/America/St_Johns +0 -922
  86. data/data/America/Thule +0 -922
  87. data/data/America/Thunder_Bay +0 -922
  88. data/data/America/Tijuana +0 -922
  89. data/data/America/Toronto +0 -922
  90. data/data/America/Vancouver +0 -922
  91. data/data/America/Whitehorse +0 -922
  92. data/data/America/Winnipeg +0 -922
  93. data/data/America/Yakutat +2 -924
  94. data/data/America/Yellowknife +0 -922
  95. data/data/Antarctica/McMurdo +0 -922
  96. data/data/Antarctica/South_Pole +0 -922
  97. data/data/Antarctica/Troll +0 -922
  98. data/data/Arctic/Longyearbyen +0 -922
  99. data/data/Asia/Amman +0 -922
  100. data/data/Asia/Beirut +0 -922
  101. data/data/Asia/Calcutta +5 -3
  102. data/data/Asia/Damascus +0 -922
  103. data/data/Asia/Famagusta +44 -1
  104. data/data/Asia/Gaza +0 -922
  105. data/data/Asia/Hebron +0 -922
  106. data/data/Asia/Jerusalem +0 -922
  107. data/data/Asia/Kolkata +5 -3
  108. data/data/Asia/Nicosia +0 -922
  109. data/data/Asia/Rangoon +3 -3
  110. data/data/Asia/Tehran +0 -922
  111. data/data/Asia/Tel_Aviv +0 -922
  112. data/data/Asia/Yangon +3 -3
  113. data/data/Atlantic/Azores +0 -922
  114. data/data/Atlantic/Bermuda +0 -922
  115. data/data/Atlantic/Canary +0 -922
  116. data/data/Atlantic/Faeroe +0 -922
  117. data/data/Atlantic/Faroe +0 -922
  118. data/data/Atlantic/Jan_Mayen +0 -922
  119. data/data/Atlantic/Madeira +0 -922
  120. data/data/Australia/ACT +0 -922
  121. data/data/Australia/Adelaide +0 -922
  122. data/data/Australia/Broken_Hill +0 -922
  123. data/data/Australia/Canberra +0 -922
  124. data/data/Australia/Currie +0 -922
  125. data/data/Australia/Hobart +0 -922
  126. data/data/Australia/LHI +0 -922
  127. data/data/Australia/Lord_Howe +0 -922
  128. data/data/Australia/Melbourne +0 -922
  129. data/data/Australia/NSW +0 -922
  130. data/data/Australia/South +0 -922
  131. data/data/Australia/Sydney +0 -922
  132. data/data/Australia/Tasmania +0 -922
  133. data/data/Australia/Victoria +0 -922
  134. data/data/Australia/Yancowinna +0 -922
  135. data/data/Brazil/East +0 -922
  136. data/data/CET +0 -922
  137. data/data/CST6CDT +0 -922
  138. data/data/Canada/Atlantic +0 -922
  139. data/data/Canada/Central +0 -922
  140. data/data/Canada/Eastern +0 -922
  141. data/data/Canada/Mountain +0 -922
  142. data/data/Canada/Newfoundland +0 -922
  143. data/data/Canada/Pacific +0 -922
  144. data/data/Canada/Yukon +0 -922
  145. data/data/Chile/Continental +0 -922
  146. data/data/Chile/EasterIsland +0 -922
  147. data/data/Cuba +0 -922
  148. data/data/EET +0 -922
  149. data/data/EST5EDT +0 -922
  150. data/data/Eire +4 -926
  151. data/data/Europe/Amsterdam +0 -922
  152. data/data/Europe/Andorra +0 -922
  153. data/data/Europe/Athens +0 -922
  154. data/data/Europe/Belfast +0 -922
  155. data/data/Europe/Belgrade +0 -922
  156. data/data/Europe/Berlin +0 -922
  157. data/data/Europe/Bratislava +0 -922
  158. data/data/Europe/Brussels +0 -922
  159. data/data/Europe/Bucharest +0 -922
  160. data/data/Europe/Budapest +0 -922
  161. data/data/Europe/Busingen +0 -922
  162. data/data/Europe/Chisinau +0 -922
  163. data/data/Europe/Copenhagen +0 -922
  164. data/data/Europe/Dublin +4 -926
  165. data/data/Europe/Gibraltar +0 -922
  166. data/data/Europe/Guernsey +0 -922
  167. data/data/Europe/Helsinki +0 -922
  168. data/data/Europe/Isle_of_Man +0 -922
  169. data/data/Europe/Jersey +0 -922
  170. data/data/Europe/Kiev +0 -922
  171. data/data/Europe/Lisbon +0 -922
  172. data/data/Europe/Ljubljana +0 -922
  173. data/data/Europe/London +0 -922
  174. data/data/Europe/Luxembourg +0 -922
  175. data/data/Europe/Madrid +0 -922
  176. data/data/Europe/Malta +0 -922
  177. data/data/Europe/Mariehamn +0 -922
  178. data/data/Europe/Monaco +0 -922
  179. data/data/Europe/Nicosia +0 -922
  180. data/data/Europe/Oslo +0 -922
  181. data/data/Europe/Paris +0 -922
  182. data/data/Europe/Podgorica +0 -922
  183. data/data/Europe/Prague +0 -922
  184. data/data/Europe/Riga +0 -922
  185. data/data/Europe/Rome +0 -922
  186. data/data/Europe/San_Marino +0 -922
  187. data/data/Europe/Sarajevo +0 -922
  188. data/data/Europe/Skopje +0 -922
  189. data/data/Europe/Sofia +0 -922
  190. data/data/Europe/Stockholm +0 -922
  191. data/data/Europe/Tallinn +0 -922
  192. data/data/Europe/Tirane +0 -922
  193. data/data/Europe/Tiraspol +0 -922
  194. data/data/Europe/Uzhgorod +0 -922
  195. data/data/Europe/Vaduz +0 -922
  196. data/data/Europe/Vatican +0 -922
  197. data/data/Europe/Vienna +0 -922
  198. data/data/Europe/Vilnius +0 -922
  199. data/data/Europe/Warsaw +0 -922
  200. data/data/Europe/Zagreb +0 -922
  201. data/data/Europe/Zaporozhye +0 -922
  202. data/data/Europe/Zurich +0 -922
  203. data/data/GB +0 -922
  204. data/data/GB-Eire +0 -922
  205. data/data/Iran +0 -922
  206. data/data/Israel +0 -922
  207. data/data/MET +0 -922
  208. data/data/MST7MDT +0 -922
  209. data/data/Mexico/BajaNorte +0 -922
  210. data/data/Mexico/BajaSur +0 -922
  211. data/data/Mexico/General +0 -922
  212. data/data/NZ +0 -922
  213. data/data/NZ-CHAT +0 -922
  214. data/data/Navajo +0 -922
  215. data/data/PST8PDT +0 -922
  216. data/data/Pacific/Apia +2 -924
  217. data/data/Pacific/Auckland +0 -922
  218. data/data/Pacific/Chatham +0 -922
  219. data/data/Pacific/Easter +0 -922
  220. data/data/Pacific/Fiji +1 -923
  221. data/data/Pacific/Midway +2 -2
  222. data/data/Pacific/Pago_Pago +2 -2
  223. data/data/Pacific/Samoa +2 -2
  224. data/data/Pacific/Tongatapu +1 -966
  225. data/data/Poland +0 -922
  226. data/data/Portugal +0 -922
  227. data/data/US/Alaska +2 -924
  228. data/data/US/Aleutian +2 -924
  229. data/data/US/Central +0 -922
  230. data/data/US/East-Indiana +0 -922
  231. data/data/US/Eastern +0 -922
  232. data/data/US/Indiana-Starke +0 -922
  233. data/data/US/Michigan +1 -925
  234. data/data/US/Mountain +0 -922
  235. data/data/US/Pacific +0 -922
  236. data/data/US/Pacific-New +0 -922
  237. data/data/US/Samoa +2 -2
  238. data/data/WET +0 -922
  239. data/lib/timezone.rb +3 -1
  240. data/lib/timezone/deprecate.rb +2 -0
  241. data/lib/timezone/error.rb +2 -0
  242. data/lib/timezone/loader.rb +2 -0
  243. data/lib/timezone/lookup.rb +2 -0
  244. data/lib/timezone/lookup/basic.rb +2 -0
  245. data/lib/timezone/lookup/geonames.rb +11 -8
  246. data/lib/timezone/lookup/google.rb +10 -8
  247. data/lib/timezone/lookup/test.rb +2 -0
  248. data/lib/timezone/net_http_client.rb +3 -1
  249. data/lib/timezone/nil_zone.rb +4 -2
  250. data/lib/timezone/parser.rb +2 -0
  251. data/lib/timezone/version.rb +3 -1
  252. data/lib/timezone/zone.rb +19 -8
  253. data/test/http_test_client.rb +3 -2
  254. data/test/test_timezone.rb +2 -0
  255. data/test/threadsafe_lookup.rb +2 -0
  256. data/test/timezone/lookup/test_basic.rb +2 -0
  257. data/test/timezone/lookup/test_geonames.rb +2 -0
  258. data/test/timezone/lookup/test_google.rb +2 -0
  259. data/test/timezone/lookup/test_test.rb +2 -0
  260. data/test/timezone/test_deprecate.rb +2 -0
  261. data/test/timezone/test_loader.rb +2 -0
  262. data/test/timezone/test_lookup.rb +2 -0
  263. data/test/timezone/test_mathn_compatibility.rb +2 -0
  264. data/test/timezone/test_nil_zone.rb +2 -0
  265. data/test/timezone/test_zone.rb +33 -21
  266. data/timezone.gemspec +3 -1
  267. metadata +6 -5
data/lib/timezone.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/zone'
2
4
  require 'timezone/nil_zone'
3
5
  require 'timezone/lookup'
@@ -41,7 +43,7 @@ module Timezone
41
43
  return ::Timezone::Zone.new(name) if Loader.valid?(name)
42
44
 
43
45
  if block_given? && default != :__block
44
- warn('warning: block supersedes default value argument'.freeze)
46
+ warn('warning: block supersedes default value argument')
45
47
  end
46
48
 
47
49
  return block.call(name) if block_given?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Timezone
2
4
  # This class provides a way to set a custom hook for deprecations.
3
5
  module Deprecate
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Timezone
2
4
  # Error messages that can be raised by this gem. To catch any
3
5
  # related error message, use Error::Base.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/error'
2
4
 
3
5
  module Timezone # rubocop:disable Style/Documentation
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/lookup/geonames'
2
4
  require 'timezone/lookup/google'
3
5
  require 'timezone/lookup/test'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/error'
2
4
 
3
5
  module Timezone
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/lookup/basic'
2
4
  require 'timezone/error'
3
5
  require 'json'
@@ -15,11 +17,11 @@ module Timezone
15
17
 
16
18
  def initialize(config)
17
19
  if config.username.nil?
18
- raise(::Timezone::Error::InvalidConfig, 'missing username'.freeze)
20
+ raise(::Timezone::Error::InvalidConfig, 'missing username')
19
21
  end
20
22
 
21
- config.protocol ||= 'http'.freeze
22
- config.url ||= 'api.geonames.org'.freeze
23
+ config.protocol ||= 'http'
24
+ config.url ||= 'api.geonames.org'
23
25
 
24
26
  super
25
27
  end
@@ -48,11 +50,12 @@ module Timezone
48
50
  def get_timezone_id(data)
49
51
  return data['timezoneId'] if data['timezoneId']
50
52
 
51
- if config.offset_etc_zones && data['gmtOffset']
52
- return unless data['gmtOffset'].is_a? Numeric
53
- return 'Etc/UTC' if data['gmtOffset'] == 0
54
- "Etc/GMT#{format('%+d', -data['gmtOffset'])}"
55
- end
53
+ return unless config.offset_etc_zones
54
+ return unless data['gmtOffset']
55
+ return unless data['gmtOffset'].is_a? Numeric
56
+
57
+ return 'Etc/UTC' if data['gmtOffset'].zero?
58
+ "Etc/GMT#{format('%+d', -data['gmtOffset'])}"
56
59
  end
57
60
 
58
61
  def url(lat, long)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/lookup/basic'
2
4
  require 'timezone/error'
3
5
  require 'json'
@@ -16,11 +18,11 @@ module Timezone
16
18
 
17
19
  def initialize(config)
18
20
  if config.api_key.nil?
19
- raise(::Timezone::Error::InvalidConfig, 'missing api key'.freeze)
21
+ raise(::Timezone::Error::InvalidConfig, 'missing api key')
20
22
  end
21
23
 
22
- config.protocol ||= 'https'.freeze
23
- config.url ||= 'maps.googleapis.com'.freeze
24
+ config.protocol ||= 'https'
25
+ config.url ||= 'maps.googleapis.com'
24
26
 
25
27
  super
26
28
  end
@@ -28,20 +30,20 @@ module Timezone
28
30
  def lookup(lat, long)
29
31
  response = client.get(url(lat, long))
30
32
 
31
- if response.code == '403'.freeze
32
- raise(Timezone::Error::Google, '403 Forbidden'.freeze)
33
+ if response.code == '403'
34
+ raise(Timezone::Error::Google, '403 Forbidden')
33
35
  end
34
36
 
35
37
  return unless response.code =~ /^2\d\d$/
36
38
  data = JSON.parse(response.body)
37
39
 
38
- return if data['status'.freeze] == NO_TIMEZONE_INFORMATION
40
+ return if data['status'] == NO_TIMEZONE_INFORMATION
39
41
 
40
- if data['status'.freeze] != 'OK'.freeze
42
+ if data['status'] != 'OK'
41
43
  raise(Timezone::Error::Google, data['errorMessage'])
42
44
  end
43
45
 
44
- data['timeZoneId'.freeze]
46
+ data['timeZoneId']
45
47
  rescue => e
46
48
  raise(Timezone::Error::Google, e.message)
47
49
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/lookup/basic'
2
4
  require 'timezone/error'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uri'
2
4
  require 'net/http'
3
5
 
@@ -19,7 +21,7 @@ module Timezone
19
21
  @http = Net::HTTP.new(config.uri.host, config.uri.port)
20
22
  @http.open_timeout = config.open_timeout || 5
21
23
  @http.read_timeout = config.read_timeout || 5
22
- @http.use_ssl = (config.protocol == 'https'.freeze)
24
+ @http.use_ssl = (config.protocol == 'https')
23
25
  end
24
26
 
25
27
  def get(url)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Timezone
2
4
  # A "nil" timezone object - representative of a missing timezone.
3
5
  class NilZone
@@ -12,14 +14,14 @@ module Timezone
12
14
  #
13
15
  # @return [String]
14
16
  def to_s
15
- 'NilZone'.freeze
17
+ 'NilZone'
16
18
  end
17
19
 
18
20
  # A stubbed timezone debug string.
19
21
  #
20
22
  # @return [String]
21
23
  def inspect
22
- '#<Timezone::NilZone>'.freeze
24
+ '#<Timezone::NilZone>'
23
25
  end
24
26
 
25
27
  # If this is a valid timezone.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'time'
2
4
 
3
5
  module Timezone
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Timezone
2
- VERSION = '1.2.8'.freeze
4
+ VERSION = '1.2.9'.freeze
3
5
  end
data/lib/timezone/zone.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
  require 'date'
3
5
  require 'time'
@@ -120,7 +122,16 @@ module Timezone
120
122
 
121
123
  utc = utc_to_local(time)
122
124
  offset = utc_offset(time)
123
- Time.new(utc.year, utc.month, utc.day, utc.hour, utc.min, utc.sec, offset)
125
+
126
+ Time.new(
127
+ utc.year,
128
+ utc.month,
129
+ utc.day,
130
+ utc.hour,
131
+ utc.min,
132
+ utc.sec + utc.subsec,
133
+ offset
134
+ )
124
135
  end
125
136
 
126
137
  # The timezone abbreviation, at the given time.
@@ -248,15 +259,15 @@ module Timezone
248
259
 
249
260
  mid = (from + to).div(2)
250
261
 
251
- if yield(time, private_rules[mid])
252
- return mid if mid == 0
253
-
254
- return mid unless yield(time, private_rules[mid - 1])
255
-
256
- binary_search(time, from, mid - 1, &block)
257
- else
262
+ unless yield(time, private_rules[mid])
258
263
  return binary_search(time, mid + 1, to, &block)
259
264
  end
265
+
266
+ return mid if mid.zero?
267
+
268
+ return mid unless yield(time, private_rules[mid - 1])
269
+
270
+ binary_search(time, from, mid - 1, &block)
260
271
  end
261
272
  end
262
273
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HTTPTestClient
2
4
  Response = Struct.new(:body) do
3
5
  def code; '200'; end
@@ -5,8 +7,7 @@ class HTTPTestClient
5
7
 
6
8
  attr_accessor :body
7
9
 
8
- def initialize(_config)
9
- end
10
+ def initialize(_config); end
10
11
 
11
12
  def get(_url)
12
13
  HTTPTestClient::Response.new(body)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone'
2
4
  require 'minitest/autorun'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone'
2
4
 
3
5
  # Simple script to validate that lookups are threadsafe.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/lookup/basic'
2
4
  require 'minitest/autorun'
3
5
  require 'ostruct'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/lookup/geonames'
2
4
  require 'minitest/autorun'
3
5
  require_relative '../../http_test_client'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/lookup/google'
2
4
  require 'minitest/autorun'
3
5
  require 'timecop'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/lookup/test'
2
4
  require 'timezone'
3
5
  require 'minitest/autorun'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/deprecate'
2
4
  require 'minitest/autorun'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/loader'
2
4
  require 'minitest/autorun'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/lookup'
2
4
  require 'minitest/autorun'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone'
2
4
  require 'minitest/autorun'
3
5
  require 'mathn'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timezone/nil_zone'
2
4
  require 'minitest/autorun'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'timecop'
2
4
  require 'timezone/zone'
3
5
  require 'minitest/autorun'
@@ -31,7 +33,7 @@ class TestZone < ::Minitest::Test
31
33
  end
32
34
 
33
35
  def test_abbr
34
- assert_equal 'PDT', la.abbr(Time.new(2011, 6, 05))
36
+ assert_equal 'PDT', la.abbr(Time.new(2011, 6, 5))
35
37
  assert_equal 'PST', la.abbr(Time.new(2011, 11, 20))
36
38
  end
37
39
 
@@ -75,20 +77,20 @@ class TestZone < ::Minitest::Test
75
77
  end
76
78
 
77
79
  def test_utc_offsets
78
- assert_equal(36_000, utc_offset('Australia/Sydney', 2011, 06, 05))
79
- assert_equal(-25_200, utc_offset('America/Los_Angeles', 2011, 06, 05))
80
- assert_equal(20_700, utc_offset('Asia/Kathmandu', 2011, 06, 05))
81
- assert_equal(-18_000, utc_offset('America/New_York', 2011, 01, 11))
82
- assert_equal(-14_400, utc_offset('America/New_York', 2011, 06, 11))
80
+ assert_equal(36_000, utc_offset('Australia/Sydney', 2011, 6, 5))
81
+ assert_equal(-25_200, utc_offset('America/Los_Angeles', 2011, 6, 5))
82
+ assert_equal(20_700, utc_offset('Asia/Kathmandu', 2011, 6, 5))
83
+ assert_equal(-18_000, utc_offset('America/New_York', 2011, 1, 11))
84
+ assert_equal(-14_400, utc_offset('America/New_York', 2011, 6, 11))
83
85
  end
84
86
 
85
87
  def test_dst
86
- refute dst?('Australia/Sydney', 2011, 06, 05)
87
- assert dst?('America/Los_Angeles', 2011, 06, 05)
88
- refute dst?('Asia/Kathmandu', 2011, 06, 05)
88
+ refute dst?('Australia/Sydney', 2011, 6, 5)
89
+ assert dst?('America/Los_Angeles', 2011, 6, 5)
90
+ refute dst?('Asia/Kathmandu', 2011, 6, 5)
89
91
 
90
- refute dst?('America/New_York', 2011, 01, 11)
91
- assert dst?('America/New_York', 2011, 06, 11)
92
+ refute dst?('America/New_York', 2011, 1, 11)
93
+ assert dst?('America/New_York', 2011, 6, 11)
92
94
  end
93
95
 
94
96
  def test_gmt_timezone
@@ -150,21 +152,31 @@ class TestZone < ::Minitest::Test
150
152
  local = Time.new(2011, 1, 4, 9, 36, 29, 20_700)
151
153
  assert_equal local.to_s, zone('Asia/Kathmandu').time_with_offset(utc).to_s
152
154
 
153
- utc = Time.utc(2014, 12, 15, 22, 00, 00)
154
- local = Time.new(2014, 12, 15, 14, 00, 00, '-08:00')
155
+ utc = Time.utc(2014, 12, 15, 22, 0, 0)
156
+ local = Time.new(2014, 12, 15, 14, 0, 0, '-08:00')
155
157
  assert_equal(
156
158
  local.to_s,
157
159
  zone('America/Los_Angeles').time_with_offset(utc).to_s
158
160
  )
159
161
 
160
- utc = Time.utc(2014, 4, 5, 22, 00, 00)
161
- local = Time.new(2014, 4, 5, 15, 00, 00, '-07:00')
162
+ utc = Time.utc(2014, 4, 5, 22, 0, 0)
163
+ local = Time.new(2014, 4, 5, 15, 0, 0, '-07:00')
162
164
  assert_equal(
163
165
  local.to_s,
164
166
  zone('America/Los_Angeles').time_with_offset(utc).to_s
165
167
  )
166
168
  end
167
169
 
170
+ def test_time_with_offset_and_fractional_seconds
171
+ utc = Time.utc(2011, 1, 4, 3, 51, 29.123)
172
+ time_with_offset = zone('Asia/Kathmandu').time_with_offset(utc)
173
+ assert_equal 123_000, time_with_offset.usec
174
+
175
+ utc = Time.utc(2011, 1, 4, 3, 51, 29, 123_456)
176
+ time_with_offset = zone('Asia/Kathmandu').time_with_offset(utc)
177
+ assert_equal 123_456, time_with_offset.usec
178
+ end
179
+
168
180
  def test_australian_timezone_with_dst
169
181
  utc = Time.utc(2010, 12, 23, 19, 37, 15)
170
182
  local = Time.utc(2010, 12, 24, 6, 7, 15)
@@ -218,12 +230,12 @@ class TestZone < ::Minitest::Test
218
230
  assert_equal timezone.utc_offset(utc), 10_800
219
231
  end
220
232
 
221
- EQUIVALENCE_METHODS = [
222
- :time,
223
- :local_to_utc,
224
- :time_with_offset,
225
- :dst?,
226
- :utc_offset
233
+ EQUIVALENCE_METHODS = %i[
234
+ time
235
+ local_to_utc
236
+ time_with_offset
237
+ dst?
238
+ utc_offset
227
239
  ].freeze
228
240
 
229
241
  def check_equivalence(name, time, other)
data/timezone.gemspec CHANGED
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # -*- encoding: utf-8 -*-
3
+
2
4
  $:.push File.expand_path('../lib', __FILE__)
3
5
  require 'timezone/version'
4
6
 
@@ -27,6 +29,6 @@ Gem::Specification.new do |s|
27
29
 
28
30
  s.add_development_dependency('rake')
29
31
  s.add_development_dependency('minitest', '~> 5.8')
30
- s.add_development_dependency('rubocop', '= 0.40')
32
+ s.add_development_dependency('rubocop', '= 0.49.1')
31
33
  s.add_development_dependency('timecop', '~> 0.8')
32
34
  end