et-orbi 1.2.1 → 1.2.5
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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +21 -0
- data/CREDITS.md +3 -0
- data/LICENSE.txt +1 -1
- data/Makefile +1 -1
- data/README.md +50 -3
- data/et-orbi.gemspec +1 -1
- data/lib/et-orbi/make.rb +37 -17
- data/lib/et-orbi/time.rb +19 -6
- data/lib/et-orbi/zones.rb +1 -1
- data/lib/et-orbi.rb +1 -1
- metadata +9 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ee673cb530f7c10cff490be7104ce58f7ed2aaba9824169e9598c29f136dc22c
|
4
|
+
data.tar.gz: 25f5e2700473dfd30ae472388b298a9caa1ceae2bd4ed4985f800953f453c3b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68014f7b6df2c3cb55b0ef4b7b7405db4f65ee1e583b95c13dfeb4138cd370a64eeacdd26bf519618613caf4851eea1609c148d1851207cbec1e514ec34f9e48
|
7
|
+
data.tar.gz: 2f00a51829515e0b9d49b536b2a5914aa916a9eff1ffb623b32416182220b4b635bc12216a247172aee798b4e524f3fc7bac0f5f23c903bf77f22dd39ae8d18d
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,27 @@
|
|
2
2
|
# CHANGELOG.md
|
3
3
|
|
4
4
|
|
5
|
+
## et-orbi 1.2.5 released 2021-09-18
|
6
|
+
|
7
|
+
- Re-use the DateTime.parse result
|
8
|
+
|
9
|
+
|
10
|
+
## et-orbi 1.2.4 released 2020-03-18
|
11
|
+
|
12
|
+
- Do not call Chronic (even if enabled) from make_from_array, gh-28
|
13
|
+
- Be modern, use strftime '%6N', join Ruby 2.x :-)
|
14
|
+
|
15
|
+
|
16
|
+
## et-orbi 1.2.3 released 2020-03-06
|
17
|
+
|
18
|
+
- Introduce EtOrbi.chronic_enabled = false and EtOrbi.chronic_enabled?, gh-26
|
19
|
+
|
20
|
+
|
21
|
+
## et-orbi 1.2.2 released 2019-08-19
|
22
|
+
|
23
|
+
- Let EoTime#== accept EoTime or ::Time instances, gh-20, gh-7
|
24
|
+
|
25
|
+
|
5
26
|
## et-orbi 1.2.1 released 2019-05-01
|
6
27
|
|
7
28
|
- More US time zone corrections, Vais Salikhov, gh-19
|
data/CREDITS.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
|
2
2
|
# et-orbi credits
|
3
3
|
|
4
|
+
* adank92 (https://github.com/adank92) https://github.com/ondrejbartas/sidekiq-cron/issues/276 gh-28
|
5
|
+
* Stan Hu (https://github.com/stanhu) Chronic toubles, gh-24, gh-26, etc
|
6
|
+
* d-m-u (https://github.com/d-m-u) EoTime#==(Time), gh-20, gh-7
|
4
7
|
* Vais Salikhov (https://github.com/vais) missing US timezone aliases, gh-18 gh-19
|
5
8
|
* Wenhui Wang https://github.com/w11th .parse vs Chronic+ActiveSupport, fugit 11
|
6
9
|
* Marcel https://github.com/MTRNord "Mitteleuropaeische Sommerzeit", gh-15
|
data/LICENSE.txt
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
Copyright (c) 2017-
|
2
|
+
Copyright (c) 2017-2021, John Mettraux, jmettraux+flor@gmail.com
|
3
3
|
|
4
4
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
5
|
of this software and associated documentation files (the "Software"), to deal
|
data/Makefile
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
|
2
2
|
# et-orbi
|
3
3
|
|
4
|
-
[](https://ci.appveyor.com/project/jmettraux/et-orbi)
|
4
|
+
[](https://github.com/floraison/et-orbi/actions)
|
6
5
|
[](http://badge.fury.io/rb/et-orbi)
|
7
6
|
[](https://gitter.im/floraison/fugit?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
8
7
|
|
@@ -16,6 +15,8 @@ require 'et-orbi'
|
|
16
15
|
|
17
16
|
EtOrbi.now
|
18
17
|
# => #<EtOrbi::EoTime:0x007f94d94 ...>
|
18
|
+
EtOrbi.now('Asia/Singapore')
|
19
|
+
# => #<EtOrbi::EoTime:0x39c96e48 @time=nil, @zone=#<TZInfo::DataTimezone: Asia/Singapore>...>
|
19
20
|
EtOrbi.parse('2017-12-13 13:00:00 America/Jamaica')
|
20
21
|
# => #<EtOrbi::EoTime:0x007f94d90 @zone=#<TZInfo::DataTimezone: America/Jamaica>...>
|
21
22
|
EtOrbi.make_time(Time.now)
|
@@ -37,7 +38,7 @@ EtOrbi.parse('1970-01-01 03:00:00 Europe/Moscow')
|
|
37
38
|
```
|
38
39
|
|
39
40
|
More about `EtOrbi::EoTime` instances:
|
40
|
-
```
|
41
|
+
```ruby
|
41
42
|
eot = EtOrbi::EoTime.new(0, 'Europe/Moscow')
|
42
43
|
|
43
44
|
eot.to_local_time.class # => Time
|
@@ -69,6 +70,52 @@ EtOrbi.platform_info
|
|
69
70
|
# astz: ActiveSupport provided Time.zone
|
70
71
|
```
|
71
72
|
|
73
|
+
### Chronic integration
|
74
|
+
|
75
|
+
By default, et-orbi relies on [Chronic](https://github.com/mojombo/chronic) to parse strings like "tomorrow" or "friday 1pm", if `Chronic` is present.
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
EtOrbi.parse('tomorrow')
|
79
|
+
# => #<EtOrbi::EoTime:0x007fbc6aa8a560
|
80
|
+
# @seconds=1575687600.0,
|
81
|
+
# @zone=#<TZInfo::TimezoneProxy: Asia/Tokyo>,
|
82
|
+
# @time=nil>
|
83
|
+
EtOrbi.parse('tomorrow').to_s
|
84
|
+
# => "2019-12-07 12:00:00 +0900"
|
85
|
+
```
|
86
|
+
|
87
|
+
This is a poor design choice I replicated from [rufus-scheduler](https://github.com/jmettraux/rufus-scheduler).
|
88
|
+
|
89
|
+
Of course this leads to [issues](https://gitlab.com/gitlab-org/gitlab/issues/37014).
|
90
|
+
|
91
|
+
It's probably better to have Chronic do its work outside of et-orbi, like in:
|
92
|
+
```ruby
|
93
|
+
EtOrbi.parse(Chronic.parse('tomorrow').to_s).to_s
|
94
|
+
# => "2019-12-07 12:00:00 +0900"
|
95
|
+
```
|
96
|
+
|
97
|
+
If one has Chronic present in their project but doesn't want it to interfere with et-orbi, it can be disabled at `parse` call:
|
98
|
+
```ruby
|
99
|
+
EtOrbi.parse('tomorrow')
|
100
|
+
# => #<EtOrbi::EoTime:0x007ffb5b2a2390
|
101
|
+
# @seconds=1575687600.0,
|
102
|
+
# @zone=#<TZInfo::TimezoneProxy: Asia/Tokyo>,
|
103
|
+
# @time=nil>
|
104
|
+
EtOrbi.parse('tomorrow', enable_chronic: false)
|
105
|
+
# ArgumentError: No time information in "tomorrow"
|
106
|
+
# from /home/jmettraux/w/et-orbi/lib/et-orbi/make.rb:31:in `rescue in parse'
|
107
|
+
```
|
108
|
+
or at the et-orbi level:
|
109
|
+
```ruby
|
110
|
+
irb(main):007:0> EtOrbi.chronic_enabled = false
|
111
|
+
# => false
|
112
|
+
irb(main):008:0> EtOrbi.chronic_enabled?
|
113
|
+
# => false
|
114
|
+
EtOrbi.parse('tomorrow')
|
115
|
+
# ArgumentError: No time information in "tomorrow"
|
116
|
+
# from /home/jmettraux/w/et-orbi/lib/et-orbi/make.rb:31:in `rescue in parse'
|
117
|
+
```
|
118
|
+
|
72
119
|
### Rails?
|
73
120
|
|
74
121
|
If Rails is present, `Time.zone` is provided and EtOrbi will use it, unless `ENV['TZ']` is set to a valid timezone name. Setting `ENV['TZ']` to nil can give back precedence to `Time.zone`.
|
data/et-orbi.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.platform = Gem::Platform::RUBY
|
11
11
|
s.authors = [ 'John Mettraux' ]
|
12
12
|
s.email = [ 'jmettraux+flor@gmail.com' ]
|
13
|
-
s.homepage = '
|
13
|
+
s.homepage = 'https://github.com/floraison/et-orbi'
|
14
14
|
s.license = 'MIT'
|
15
15
|
s.summary = 'time with zones'
|
16
16
|
|
data/lib/et-orbi/make.rb
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
|
2
2
|
module EtOrbi
|
3
3
|
|
4
|
+
@chronic_enabled = true
|
5
|
+
#
|
6
|
+
def self.chronic_enabled?
|
7
|
+
@chronic_enabled
|
8
|
+
end
|
9
|
+
def self.chronic_enabled=(b)
|
10
|
+
@chronic_enabled = b
|
11
|
+
end
|
12
|
+
|
4
13
|
class << self
|
5
14
|
|
6
15
|
def now(zone=nil)
|
@@ -12,28 +21,29 @@ module EtOrbi
|
|
12
21
|
|
13
22
|
str, str_zone = extract_zone(str)
|
14
23
|
|
15
|
-
if
|
16
|
-
|
24
|
+
if t = chronic_parse(str, opts)
|
17
25
|
str = [ t.strftime('%F %T'), str_zone ].compact.join(' ')
|
18
26
|
end
|
19
27
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
#
|
28
|
-
|
28
|
+
dt =
|
29
|
+
begin
|
30
|
+
DateTime.parse(str)
|
31
|
+
rescue
|
32
|
+
fail ArgumentError, "No time information in #{str.inspect}"
|
33
|
+
end
|
34
|
+
#end if RUBY_VERSION < '1.9.0'
|
35
|
+
#end if RUBY_VERSION < '2.0.0'
|
36
|
+
#
|
37
|
+
# is necessary since Time.parse('xxx') in Ruby < 1.9 yields `now`
|
29
38
|
|
30
39
|
zone =
|
31
40
|
opts[:zone] ||
|
32
41
|
get_tzone(str_zone) ||
|
33
42
|
determine_local_tzone
|
34
43
|
|
35
|
-
local = Time.parse(str)
|
36
|
-
secs = zone.local_to_utc(local).to_f
|
44
|
+
#local = Time.parse(str)
|
45
|
+
#secs = zone.local_to_utc(local).to_f
|
46
|
+
secs = zone.local_to_utc(dt).to_time.to_f
|
37
47
|
|
38
48
|
EoTime.new(secs, zone)
|
39
49
|
end
|
@@ -60,6 +70,17 @@ module EtOrbi
|
|
60
70
|
|
61
71
|
protected
|
62
72
|
|
73
|
+
def chronic_parse(str, opts)
|
74
|
+
|
75
|
+
return false unless defined?(::Chronic)
|
76
|
+
return false unless opts.fetch(:enable_chronic) { self.chronic_enabled? }
|
77
|
+
|
78
|
+
os = opts
|
79
|
+
.select { |k, _| Chronic::Parser::DEFAULT_OPTIONS.keys.include?(k) }
|
80
|
+
|
81
|
+
::Chronic.parse(str, os)
|
82
|
+
end
|
83
|
+
|
63
84
|
def make_from_time(t, zone)
|
64
85
|
|
65
86
|
z =
|
@@ -86,10 +107,9 @@ module EtOrbi
|
|
86
107
|
|
87
108
|
def make_from_array(a, zone)
|
88
109
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
make_from_string(s, zone)
|
110
|
+
parse(
|
111
|
+
Time.utc(*a).strftime('%Y-%m-%d %H:%M:%S.%6N'), # not a Chronic string
|
112
|
+
zone: zone, enable_chronic: false)
|
93
113
|
end
|
94
114
|
|
95
115
|
def make_from_string(s, zone)
|
data/lib/et-orbi/time.rb
CHANGED
@@ -205,11 +205,24 @@ module EtOrbi
|
|
205
205
|
|
206
206
|
def ==(o)
|
207
207
|
|
208
|
-
o.is_a?(EoTime)
|
209
|
-
|
210
|
-
|
208
|
+
if o.is_a?(EoTime)
|
209
|
+
o.seconds == @seconds &&
|
210
|
+
(o.zone == @zone || o.zone.current_period == @zone.current_period)
|
211
|
+
elsif o.is_a?(::Time)
|
212
|
+
(to_f * 1000).to_i == (o.to_f * 1000).to_i
|
213
|
+
else
|
214
|
+
false
|
215
|
+
end
|
211
216
|
end
|
212
|
-
|
217
|
+
|
218
|
+
# Nota Bene:
|
219
|
+
#
|
220
|
+
# Unlike ==, the equal? method should never be overridden by subclasses
|
221
|
+
# as it is used to determine object identity (that is, a.equal?(b) if and
|
222
|
+
# only if a is the same object as b)
|
223
|
+
#
|
224
|
+
# The eql? method returns true if obj and other refer to the same hash key.
|
225
|
+
# This is used by Hash to test members for equality.
|
213
226
|
|
214
227
|
def >(o); @seconds > _to_f(o); end
|
215
228
|
def >=(o); @seconds >= _to_f(o); end
|
@@ -283,7 +296,7 @@ module EtOrbi
|
|
283
296
|
|
284
297
|
def to_time_s
|
285
298
|
|
286
|
-
strftime(
|
299
|
+
strftime('%H:%M:%S.%6N')
|
287
300
|
end
|
288
301
|
|
289
302
|
def inc(t, dir=1)
|
@@ -414,7 +427,7 @@ module EtOrbi
|
|
414
427
|
|
415
428
|
fail ArgumentError(
|
416
429
|
"Comparison of EoTime with #{o.inspect} failed"
|
417
|
-
) unless o.
|
430
|
+
) unless o.respond_to?(:to_f)
|
418
431
|
|
419
432
|
o.to_f
|
420
433
|
end
|
data/lib/et-orbi/zones.rb
CHANGED
data/lib/et-orbi.rb
CHANGED
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.2.
|
4
|
+
version: 1.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mettraux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tzinfo
|
@@ -73,15 +73,15 @@ files:
|
|
73
73
|
- lib/et-orbi/zones.rb
|
74
74
|
- lib/et_orbi.rb
|
75
75
|
- lib/etorbi.rb
|
76
|
-
homepage:
|
76
|
+
homepage: https://github.com/floraison/et-orbi
|
77
77
|
licenses:
|
78
78
|
- MIT
|
79
79
|
metadata:
|
80
|
-
changelog_uri:
|
81
|
-
documentation_uri:
|
82
|
-
bug_tracker_uri:
|
83
|
-
homepage_uri:
|
84
|
-
source_code_uri:
|
80
|
+
changelog_uri: https://github.com/floraison/et-orbi/blob/master/CHANGELOG.md
|
81
|
+
documentation_uri: https://github.com/floraison/et-orbi
|
82
|
+
bug_tracker_uri: https://github.com/floraison/et-orbi/issues
|
83
|
+
homepage_uri: https://github.com/floraison/et-orbi
|
84
|
+
source_code_uri: https://github.com/floraison/et-orbi
|
85
85
|
post_install_message:
|
86
86
|
rdoc_options: []
|
87
87
|
require_paths:
|
@@ -97,8 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: '0'
|
99
99
|
requirements: []
|
100
|
-
|
101
|
-
rubygems_version: 2.6.14.1
|
100
|
+
rubygems_version: 3.1.2
|
102
101
|
signing_key:
|
103
102
|
specification_version: 4
|
104
103
|
summary: time with zones
|