et-orbi 1.2.2 → 1.2.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d3ad790bb200e2bb944f6d8b69abb66a3f5563c0d601fd51839c19fa9b2585ed
4
- data.tar.gz: 1a9c61b4371a23fb0e4c4db5dfdf5ffb0fd440415f811e232a580e6ce71d37f0
3
+ metadata.gz: 187fde2e940f4644e296f434208de71ceeced5bacd257fcc7a799e08e5b3fc2f
4
+ data.tar.gz: 7c9425490c4cb365453031032faa159fe1111d5bc606a2ad88d7a3cede16d660
5
5
  SHA512:
6
- metadata.gz: 5f6032e29f4f91a638c5d524cd94854128ad9f59d2a017989088dd44c130098bbce44460f0d57396e3dd81a155b770fdcc3454be8069513924aa1dfe1807ea0d
7
- data.tar.gz: 2b9b2e1b4dd3c49c103d856509096ca0672c3efff4b9e3d5affb87559de010416c9944de55cd4284a8f3bc949ef2f6251fe0fd56c7a055aa516f63b046a09c28
6
+ metadata.gz: 00f33cb173d79780c87e68d16e4ba64187f37ac9bde5eeafef7169846a597bf1708eeb6cf053d18b74a3030d84c0bfa8ced97898edc9ec5a4886b8470e41d31c
7
+ data.tar.gz: a5878f8ae60c18404c53d38a58b347916236138af79c90c8a35fb170fc559e85d89336b08b6ea4453a9001b9a4405c8df8aeeed126202f4e6d379d2a443e20ca
data/CHANGELOG.md CHANGED
@@ -2,6 +2,27 @@
2
2
  # CHANGELOG.md
3
3
 
4
4
 
5
+ ## et-orbi 1.2.6 released 2021-10-30
6
+
7
+ - Favour IANA timezone name in EtOrbi.make_time
8
+
9
+
10
+ ## et-orbi 1.2.5 released 2021-09-18
11
+
12
+ - Re-use the DateTime.parse result
13
+
14
+
15
+ ## et-orbi 1.2.4 released 2020-03-18
16
+
17
+ - Do not call Chronic (even if enabled) from make_from_array, gh-28
18
+ - Be modern, use strftime '%6N', join Ruby 2.x :-)
19
+
20
+
21
+ ## et-orbi 1.2.3 released 2020-03-06
22
+
23
+ - Introduce EtOrbi.chronic_enabled = false and EtOrbi.chronic_enabled?, gh-26
24
+
25
+
5
26
  ## et-orbi 1.2.2 released 2019-08-19
6
27
 
7
28
  - Let EoTime#== accept EoTime or ::Time instances, gh-20, gh-7
data/CREDITS.md CHANGED
@@ -1,6 +1,8 @@
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
4
6
  * d-m-u (https://github.com/d-m-u) EoTime#==(Time), gh-20, gh-7
5
7
  * Vais Salikhov (https://github.com/vais) missing US timezone aliases, gh-18 gh-19
6
8
  * Wenhui Wang https://github.com/w11th .parse vs Chronic+ActiveSupport, fugit 11
data/LICENSE.txt CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- Copyright (c) 2017-2019, John Mettraux, jmettraux+flor@gmail.com
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
@@ -31,7 +31,7 @@ build: gemspec_validate
31
31
  mv $(NAME)-$(VERSION).gem pkg/
32
32
 
33
33
  push: build
34
- gem push pkg/$(NAME)-$(VERSION).gem
34
+ gem push --otp "$(OTP)" pkg/$(NAME)-$(VERSION).gem
35
35
 
36
36
  spec:
37
37
  bundle exec rspec
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
 
2
2
  # et-orbi
3
3
 
4
- [![Build Status](https://secure.travis-ci.org/floraison/et-orbi.svg)](http://travis-ci.org/floraison/et-orbi)
5
- [![Build status](https://ci.appveyor.com/api/projects/status/6tbo9lk9qdor8ipl?svg=true)](https://ci.appveyor.com/project/jmettraux/et-orbi)
4
+ [![tests](https://github.com/floraison/et-orbi/workflows/test/badge.svg)](https://github.com/floraison/et-orbi/actions)
6
5
  [![Gem Version](https://badge.fury.io/rb/et-orbi.svg)](http://badge.fury.io/rb/et-orbi)
7
6
  [![Join the chat at https://gitter.im/floraison/fugit](https://badges.gitter.im/floraison/fugit.svg)](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 = 'http://github.com/floraison/et-orbi'
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 defined?(::Chronic) && t = ::Chronic.parse(str, opts)
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
- begin
21
- DateTime.parse(str)
22
- rescue
23
- fail ArgumentError, "No time information in #{str.inspect}"
24
- end
25
- #end if RUBY_VERSION < '1.9.0'
26
- #end if RUBY_VERSION < '2.0.0'
27
- #
28
- # is necessary since Time.parse('xxx') in Ruby < 1.9 yields `now`
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,13 +70,24 @@ 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 =
66
87
  zone ||
67
88
  get_as_tzone(t) ||
68
- get_tzone(t.zone) ||
69
- get_local_tzone(t)
89
+ get_local_tzone(t) ||
90
+ get_tzone(t.zone)
70
91
 
71
92
  z ||= t.zone
72
93
  # pass the abbreviation anyway,
@@ -86,10 +107,9 @@ module EtOrbi
86
107
 
87
108
  def make_from_array(a, zone)
88
109
 
89
- t = Time.utc(*a)
90
- s = t.strftime("%Y-%m-%d %H:%M:%S.#{'%06d' % t.usec}")
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
@@ -296,7 +296,7 @@ module EtOrbi
296
296
 
297
297
  def to_time_s
298
298
 
299
- strftime("%H:%M:%S.#{'%06d' % usec}")
299
+ strftime('%H:%M:%S.%6N')
300
300
  end
301
301
 
302
302
  def inc(t, dir=1)
data/lib/et-orbi/zones.rb CHANGED
@@ -13,7 +13,7 @@ module EtOrbi
13
13
  (?![-+])
14
14
  |Z
15
15
  )
16
- }x
16
+ }x.freeze
17
17
 
18
18
  # https://en.wikipedia.org/wiki/ISO_8601
19
19
  # Postel's law applies
data/lib/et-orbi.rb CHANGED
@@ -13,6 +13,6 @@ require 'et-orbi/zone'
13
13
 
14
14
  module EtOrbi
15
15
 
16
- VERSION = '1.2.2'
16
+ VERSION = '1.2.6'
17
17
  end
18
18
 
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.2
4
+ version: 1.2.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: 2019-08-19 00:00:00.000000000 Z
11
+ date: 2021-10-29 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: http://github.com/floraison/et-orbi
76
+ homepage: https://github.com/floraison/et-orbi
77
77
  licenses:
78
78
  - MIT
79
79
  metadata:
80
- changelog_uri: http://github.com/floraison/et-orbi/blob/master/CHANGELOG.md
81
- documentation_uri: http://github.com/floraison/et-orbi
82
- bug_tracker_uri: http://github.com/floraison/et-orbi/issues
83
- homepage_uri: http://github.com/floraison/et-orbi
84
- source_code_uri: http://github.com/floraison/et-orbi
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
- rubyforge_project:
101
- rubygems_version: 2.7.6
100
+ rubygems_version: 3.1.2
102
101
  signing_key:
103
102
  specification_version: 4
104
103
  summary: time with zones