et-orbi 1.0.5 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 69e37c4c31852fc38185e883d9c1cb061080eb6d
4
- data.tar.gz: 1862219b63d16c1e79b681bd5f930a419f1da254
3
+ metadata.gz: 16693871e0e1a8330e6ecade907b21302ad124ab
4
+ data.tar.gz: 00fee3dbf2143ee21043597a1d64f7d19c2c6dfa
5
5
  SHA512:
6
- metadata.gz: 5dcab4f70ec22ef0a7c8303b14042344860df2d26ca93fc27923a52b2a87aa36c671422f73be18d432a15524d60b86945c467c1b6fdda125f8408a8bf6e64f72
7
- data.tar.gz: '07203989eedf55dbfbeb40b0433060e03644760d07a8448b78f7c30af1694b173fc67e507360262a316978815cf04181c45c0264634af75f37dd492397e56d01'
6
+ metadata.gz: 6f151d68c6c1f070945f9cf9718e7d38004117832b53acac741de0e5e2c38ec8cd06c4bccca60a93072bc1b7dad2342a6e5bac7ed17f2a8829ec47554e36e0be
7
+ data.tar.gz: 66af905287bb713bc376adb0e67b7c1eac19a486fbc4a93c902615f33280dad69586f245726e3fb19a57ac6ab5649a7737391d3b1ead3d13b7aef6a945f96e65
@@ -2,6 +2,14 @@
2
2
  # et-orbi CHANGELOG.md
3
3
 
4
4
 
5
+ ## et-orbi 1.0.6 released 2017-10-05
6
+
7
+ - Introduce `make info`
8
+ - Alias EoTime#to_utc_time to #utc
9
+ - Alias EoTime#to_t to #to_local_time
10
+ - Implement EoTime#to_local_time (since #to_time returns a UTC Time instance)
11
+
12
+
5
13
  ## et-orbi 1.0.5 released 2017-06-23
6
14
 
7
15
  - Rework EtOrbi.make_time
data/CREDITS.md CHANGED
@@ -1,7 +1,9 @@
1
1
 
2
2
  # et-orbi credits
3
3
 
4
- * Jeremy Strouse https://github.com/jstrouse help alleviate issue with older versions of TZInfo
4
+ * Chris Arcand https://github.com/chrisarcand shew various issues around America/Chicago on OSX, gh-4
5
+ * Jeremy Strouse https://github.com/jstrouse helped alleviate issue with older versions of TZInfo
6
+
5
7
 
6
8
  ## since rufus-scheduler
7
9
 
data/Makefile CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- ## gem tasks ##
2
+ ## core floraison make ##
3
3
 
4
4
  NAME = \
5
5
  $(shell ruby -e "s = eval(File.read(Dir['*.gemspec'][0])); puts s.name")
@@ -26,6 +26,20 @@ build: gemspec_validate
26
26
  push: build
27
27
  gem push pkg/$(NAME)-$(VERSION).gem
28
28
 
29
+ spec:
30
+ bundle exec rspec
31
+ test: spec
29
32
 
30
- .PHONY: build push
33
+
34
+ ## specific to project ##
35
+
36
+ info:
37
+ uname -a
38
+ bundle exec ruby -v
39
+ bundle exec ruby -Ilib -r et-orbi -e "EtOrbi._make_info"
40
+
41
+
42
+ ## done ##
43
+
44
+ .PHONY: build info push spec
31
45
 
data/README.md CHANGED
@@ -28,6 +28,16 @@ EtOrbi::EoTime.new(0, 'Europe/Moscow').to_s
28
28
  # => "1970-01-01 03:00:00 +0300"
29
29
  ```
30
30
 
31
+ More about `EtOrbi::EoTime` instances:
32
+ ```
33
+ eot = EtOrbi::EoTime.new(0, 'Europe/Moscow')
34
+
35
+ eot.to_local_time.class # => Time
36
+ eot.to_local_time.to_s # => "1970-01-01 09:00:00 +0900" (at least on my system)
37
+
38
+ # For the rest, EtOrbi::EoTime mimicks ::Time
39
+ ```
40
+
31
41
  Helper methods:
32
42
  ```ruby
33
43
  require 'et-orbi'
@@ -20,9 +20,11 @@ Time zones for fugit and rufus-scheduler. Urbi et Orbi.
20
20
 
21
21
  #s.files = `git ls-files`.split("\n")
22
22
  s.files = Dir[
23
+ 'README.{md,txt}',
24
+ 'CHANGELOG.{md,txt}', 'CREDITS.{md,txt}', 'LICENSE.{md,txt}',
23
25
  'Makefile',
24
26
  'lib/**/*.rb', #'spec/**/*.rb', 'test/**/*.rb',
25
- '*.gemspec', '*.txt', '*.md'
27
+ "#{s.name}.gemspec",
26
28
  ]
27
29
 
28
30
  s.add_runtime_dependency 'tzinfo'
@@ -7,7 +7,7 @@ require 'tzinfo'
7
7
 
8
8
  module EtOrbi
9
9
 
10
- VERSION = '1.0.5'
10
+ VERSION = '1.0.6'
11
11
 
12
12
  #
13
13
  # module methods
@@ -36,12 +36,19 @@ module EtOrbi
36
36
  # is necessary since Time.parse('xxx') in Ruby < 1.9 yields `now`
37
37
 
38
38
  str_zone = get_tzone(list_iso8601_zones(str).last)
39
+ #p [ :parse, str, str_zone ]
40
+ #p ENV['TZ']
39
41
 
42
+ #p [ :parse, :oz, opts[:zone] ]
43
+ #p [ :parse, :sz, str_zone ]
44
+ #p [ :parse, :foz, find_olson_zone(str) ]
45
+ #p [ :parse, :ltz, local_tzone ]
40
46
  zone =
41
47
  opts[:zone] ||
42
48
  str_zone ||
43
49
  find_olson_zone(str) ||
44
50
  local_tzone
51
+ #p [ :parse, :zone, zone ]
45
52
 
46
53
  str = str.sub(zone.name, '') unless zone.name.match(/\A[-+]/)
47
54
  #
@@ -49,6 +56,7 @@ module EtOrbi
49
56
  # although where does rufus-scheduler have it from?
50
57
 
51
58
  local = Time.parse(str)
59
+ #p [ :parse, :local, local, local.zone ]
52
60
 
53
61
  secs =
54
62
  if str_zone
@@ -56,19 +64,20 @@ module EtOrbi
56
64
  else
57
65
  zone.period_for_local(local).to_utc(local).to_f
58
66
  end
67
+ #p [ :parse, :secs, secs ]
59
68
 
60
69
  EoTime.new(secs, zone)
61
70
  end
62
71
 
63
72
  def make_time(*a)
64
73
 
65
- #p a
74
+ #p [ :mt, a ]
66
75
  zone = a.length > 1 ? get_tzone(a.last) : nil
67
76
  a.pop if zone
68
77
  #p [ :mt, zone ]
69
78
 
70
79
  o = a.length > 1 ? a : a.first
71
- #p o
80
+ #p [ :mt, :o, o ]
72
81
 
73
82
  case o
74
83
  when Time then make_from_time(o, zone)
@@ -87,11 +96,11 @@ module EtOrbi
87
96
  z =
88
97
  zone ||
89
98
  get_tzone(t.zone) ||
90
- (
91
- local_tzone.period_for_local(t).abbreviation.to_s == t.zone &&
92
- local_tzone
93
- ) ||
94
- t.zone
99
+ get_local_tzone(t)
100
+
101
+ z ||= t.zone
102
+ # pass the abbreviation anyway,
103
+ # it will be used in resulting the error message
95
104
 
96
105
  EoTime.new(t.to_f, z)
97
106
  end
@@ -115,6 +124,7 @@ module EtOrbi
115
124
 
116
125
  def make_from_string(s, zone)
117
126
 
127
+ #p [ :mfs, s, zone ]
118
128
  parse(s, zone: zone)
119
129
  end
120
130
 
@@ -160,6 +170,21 @@ module EtOrbi
160
170
  end
161
171
  end
162
172
 
173
+ def render_nozone_time(seconds)
174
+
175
+ t =
176
+ Time.utc(0) + seconds
177
+ ts =
178
+ t.strftime('%Y-%m-%d %H:%M:%S') +
179
+ ".#{(seconds % 1).to_s.split('.').last}"
180
+ z =
181
+ EtOrbi.local_tzone ?
182
+ EtOrbi.local_tzone.period_for_local(t).abbreviation.to_s :
183
+ nil
184
+
185
+ "(secs:#{seconds},utc~:#{ts.inspect},ltz~:#{z.inspect})"
186
+ end
187
+
163
188
  def platform_info
164
189
 
165
190
  etos = Proc.new { |k, v| "#{k}:#{v.inspect}" }
@@ -173,19 +198,52 @@ module EtOrbi
173
198
  'rp' => RUBY_PLATFORM,
174
199
  'eov' => EtOrbi::VERSION,
175
200
  'rorv' => (Rails::VERSION::STRING rescue nil),
176
- 'astz' => Time.respond_to?(:zone) ? Time.zone.name : nil,
177
- # Active Support Time.zone
201
+ 'astz' => ([ Time.zone.class, Time.zone.tzinfo.name ] rescue nil),
178
202
  }.collect(&etos).join(',') + ',' +
179
203
  gather_tzs.collect(&etos).join(',') +
180
204
  ')'
181
205
  end
182
206
 
183
207
  alias make make_time
208
+
209
+ # For `make info`
210
+ #
211
+ def _make_info
212
+
213
+ puts render_nozone_time(Time.now.to_f)
214
+ puts platform_info
215
+ end
216
+
217
+ protected
218
+
219
+ def get_local_tzone(t)
220
+
221
+ # lt = local_tzone
222
+ # lp = lt.period_for_local(t)
223
+ # ab = lp.abbreviation.to_s
224
+ #
225
+ # return lt \
226
+ # if ab == t.zone
227
+ # return lt \
228
+ # if ab.match(/\A[-+]\d{2}(:?\d{2})?\z/) && lp.utc_offset == t.utc_offset
229
+ #
230
+ # nil
231
+
232
+ l = Time.local(t.year, t.month, t.day, t.hour, t.min, t.sec, t.usec)
233
+
234
+ t.zone == l.zone ? local_tzone : nil
235
+ end
184
236
  end
185
237
 
238
+ # Our EoTime class (which quacks like a ::Time).
239
+ #
240
+ # An EoTime instance should respond to most of the methods ::Time instances
241
+ # respond to. If a method is missing, feel free to open an issue to
242
+ # ask (politely) for it. If it makes sense, it'll get added, else
243
+ # a workaround will get suggested.
244
+ # The immediate workaround is to call #to_t on the EoTime instance to get
245
+ # equivalent ::Time instance in the local, current, timezone.
186
246
  #
187
- # our EoTime class (which quacks like a ::Time)
188
-
189
247
  class EoTime
190
248
 
191
249
  #
@@ -237,8 +295,8 @@ module EtOrbi
237
295
 
238
296
  fail ArgumentError.new(
239
297
  "cannot determine timezone from #{zone.inspect}" +
240
- "\n#{render_nozone_time(s)}" +
241
- "\n#{self.class.platform_info.sub(',debian:', ",\ndebian:")}" +
298
+ "\n#{EtOrbi.render_nozone_time(s)}" +
299
+ "\n#{EtOrbi.platform_info.sub(',debian:', ",\ndebian:")}" +
242
300
  "\nTry setting `ENV['TZ'] = 'Continent/City'` in your script " +
243
301
  "(see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)" +
244
302
  (defined?(TZInfo::Data) ? '' : "\nand adding gem 'tzinfo-data'")
@@ -259,22 +317,25 @@ module EtOrbi
259
317
  @zone = self.class.get_tzone(zone || :current)
260
318
  end
261
319
 
320
+ # Returns this ::EtOrbi::EoTime as a ::Time instance
321
+ # in the current UTC timezone.
322
+ #
262
323
  def utc
263
324
 
264
325
  Time.utc(1970, 1, 1) + @seconds
265
326
  end
266
327
 
328
+ # Returns true if this ::EtOrbi::EoTime instance timezone is UTC.
329
+ # Returns false else.
330
+ #
267
331
  def utc?
268
332
 
269
333
  %w[ zulu utc gmt ].include?(@zone.canonical_identifier.downcase)
270
-
271
- #t = Time.now
272
- #@zone.period_for_local(t).utc_offset == 0 &&
273
- #@zone.period_for_local(t + 183 * 24 * 3600).utc_offset == 0
274
334
  end
275
335
 
276
336
  alias getutc utc
277
337
  alias getgm utc
338
+ alias to_utc_time utc
278
339
 
279
340
  def to_f
280
341
 
@@ -293,15 +354,18 @@ module EtOrbi
293
354
  to_time.strftime(format)
294
355
  end
295
356
 
296
- # Returns a Ruby Time instance.
357
+ # Returns this ::EtOrbi::EoTime as a ::Time instance
358
+ # in the current timezone.
297
359
  #
298
- # Warning: the timezone of that Time instance will be UTC.
360
+ # Has a #to_t alias.
299
361
  #
300
- def to_time
362
+ def to_local_time
301
363
 
302
- @time ||= begin; u = utc; @zone.period_for_utc(u).to_local(u); end
364
+ Time.at(@seconds)
303
365
  end
304
366
 
367
+ alias to_t to_local_time
368
+
305
369
  def is_dst?
306
370
 
307
371
  @zone.period_for_utc(utc).std_offset != 0
@@ -325,9 +389,6 @@ module EtOrbi
325
389
 
326
390
  def utc_offset
327
391
 
328
- #@zone.period_for_utc(utc).utc_offset
329
- #@zone.period_for_utc(utc).utc_total_offset
330
- #@zone.period_for_utc(utc).std_offset
331
392
  @zone.period_for_utc(utc).utc_offset
332
393
  end
333
394
 
@@ -340,9 +401,11 @@ module EtOrbi
340
401
 
341
402
  def ==(o)
342
403
 
343
- o.is_a?(EoTime) && o.seconds == @seconds && o.zone == @zone
404
+ o.is_a?(EoTime) &&
405
+ o.seconds == @seconds &&
406
+ (o.zone == @zone || o.zone.current_period == @zone.current_period)
344
407
  end
345
- #alias eq? == # FIXME see Object#== (ri)
408
+ #alias eql? == # FIXME see Object#== (ri)
346
409
 
347
410
  def >(o); @seconds > _to_f(o); end
348
411
  def >=(o); @seconds >= _to_f(o); end
@@ -436,6 +499,15 @@ module EtOrbi
436
499
 
437
500
  protected
438
501
 
502
+ # Returns a Ruby Time instance.
503
+ #
504
+ # Warning: the timezone of that Time instance will be UTC.
505
+ #
506
+ def to_time
507
+
508
+ @time ||= begin; u = utc; @zone.period_for_utc(u).to_local(u); end
509
+ end
510
+
439
511
  def count_weeks(dir)
440
512
 
441
513
  c = 0
@@ -448,21 +520,6 @@ module EtOrbi
448
520
  c
449
521
  end
450
522
 
451
- def render_nozone_time(seconds)
452
-
453
- t =
454
- Time.utc(0) + seconds
455
- ts =
456
- t.strftime('%Y-%m-%d %H:%M:%S') +
457
- ".#{(seconds % 1).to_s.split('.').last}"
458
- z =
459
- EtOrbi.local_tzone ?
460
- EtOrbi.local_tzone.period_for_local(t).abbreviation.to_s :
461
- nil
462
-
463
- "(secs:#{seconds},utc~:#{ts.inspect},ltz~:#{z.inspect})"
464
- end
465
-
466
523
  def strfz(code)
467
524
 
468
525
  return @zone.name if code == '%/Z'
@@ -549,15 +606,23 @@ module EtOrbi
549
606
  tz = ::TZInfo::Timezone.get(etz) rescue nil
550
607
  return tz if tz
551
608
 
552
- tz = Time.zone.tzinfo \
553
- if Time.respond_to?(:zone) && Time.zone.respond_to?(:tzinfo)
609
+ if Time.respond_to?(:zone) && Time.zone.respond_to?(:tzinfo)
610
+ tz = Time.zone.tzinfo
611
+ return tz if tz
612
+ end
613
+
614
+ tz = ::TZInfo::Timezone.get(os_tz) rescue nil
554
615
  return tz if tz
555
616
 
556
617
  tzs = determine_local_tzones
557
-
558
618
  (etz && tzs.find { |z| z.name == etz }) || tzs.first
559
619
  end
560
620
 
621
+ def os_tz
622
+
623
+ debian_tz || centos_tz || osx_tz
624
+ end
625
+
561
626
  #
562
627
  # protected module methods
563
628
 
@@ -654,11 +719,6 @@ module EtOrbi
654
719
  nil
655
720
  rescue; nil; end
656
721
 
657
- # def find_tz
658
- #
659
- # debian_tz || centos_tz || osx_tz
660
- # end
661
-
662
722
  def gather_tzs
663
723
 
664
724
  { :debian => debian_tz, :centos => centos_tz, :osx => osx_tz }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: et-orbi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Mettraux
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-23 00:00:00.000000000 Z
11
+ date: 2017-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tzinfo
@@ -74,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
74
  version: '0'
75
75
  requirements: []
76
76
  rubyforge_project:
77
- rubygems_version: 2.5.2
77
+ rubygems_version: 2.6.13
78
78
  signing_key:
79
79
  specification_version: 4
80
80
  summary: time with zones