https://github.com/floraison/et-orbi
Time zones for fugit and rufus-scheduler. Urbi et Orbi.
https://github.com/floraison/et-orbi
Keywords
ruby time timezone
Keywords from Contributors
rubygems crash-reporting scheduler gem activerecord sinatra feature-flag identity grape doorkeeper
Last synced: about 15 hours ago
JSON representation
Repository metadata
Time zones for fugit and rufus-scheduler. Urbi et Orbi.
- Host: GitHub
- URL: https://github.com/floraison/et-orbi
- Owner: floraison
- License: mit
- Created: 2017-03-18T07:21:55.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2025-11-24T23:56:57.000Z (17 days ago)
- Last Synced: 2025-11-27T21:36:59.855Z (15 days ago)
- Topics: ruby, time, timezone
- Language: Ruby
- Size: 413 KB
- Stars: 26
- Watchers: 3
- Forks: 13
- Open Issues: 1
- Releases: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
README.md
et-orbi
Time zones for fugit and for rufus-scheduler. Urbi et Orbi.
EtOrbi::EoTime instances quack like Ruby Time instances, but their #zone returns a TZInfo::TimeZone instance.
Getting EoTime instances:
require 'et-orbi'
EtOrbi.now
# => #<EtOrbi::EoTime:0x007f94d94 ...>
EtOrbi.now('Asia/Singapore')
# => #<EtOrbi::EoTime:0x39c96e48 @time=nil, @zone=#<TZInfo::DataTimezone: Asia/Singapore>...>
EtOrbi.parse('2017-12-13 13:00:00 America/Jamaica')
# => #<EtOrbi::EoTime:0x007f94d90 @zone=#<TZInfo::DataTimezone: America/Jamaica>...>
EtOrbi.make_time(Time.now)
# => #<EtOrbi::EoTime:0x007f94d91 ...>
EtOrbi.make_time(2017, 1, 31, 12, 'Europe/Moscow').to_debug_s
# => 'ot 2017-01-31 12:00:00 +03:00 dst:false'
EtOrbi::EoTime.new(0, 'UTC').to_s
# => "1970-01-01 00:00:00 +0000"
EtOrbi::EoTime.new(0, 'Europe/Moscow').to_s
# => "1970-01-01 03:00:00 +0300"
EtOrbi::EoTime.new(0, 'Europe/Moscow').to_zs
# => "1970-01-01 03:00:00 Europe/Moscow" # "be precise in your speech"
EtOrbi.parse('1970-01-01 03:00:00 Europe/Moscow')
# => #<EtOrbi::EoTime:0x00007fa4bc83fcd0
# @seconds=0.0, @zone=#<TZInfo::DataTimezone: Europe/Moscow>, @time=nil>
More about EtOrbi::EoTime instances:
eot = EtOrbi::EoTime.new(0, 'Europe/Moscow')
eot.to_local_time.class # => Time
eot.to_local_time.to_s # => "1970-01-01 09:00:00 +0900" (at least on my system)
# For the rest, EtOrbi::EoTime mimics ::Time
Helper methods:
require 'et-orbi'
EtOrbi.get_tzone('Europe/Vilnius')
# => #<TZInfo::DataTimezone: Europe/Vilnius>
EtOrbi.local_tzone
# => #<TZInfo::TimezoneProxy: Asia/Tokyo>
EtOrbi.platform_info
# => "(etz:nil,tnz:\"JST\",tzid:nil,rv:\"2.2.6\",rp:\"x86_64-darwin14\",eov:\"1.0.1\",
# rorv:nil,astz:nil,debian:nil,centos:nil,osx:\"Asia/Tokyo\")"
#
# etz: ENV['TZ']
# tnz: Time.now.zone
# tzid: defined?(TZInfo::Data)
# rv: RUBY_VERSION
# rp: RUBY_PLATFORM
# eov: EtOrbi::VERSION
# rorv: Rails::VERSION::STRING
# astz: ActiveSupport provided Time.zone
#rweek and #rday (clarification et-orbi 1.4.0)
EoTime#rweek and #rday are mostly used in fugit for its modulo extension.
By default (since et-orbi 1.4.0), the "reference week" for et-orbi
starts on Monday 2018-12-31, its #rweek 0 and #rday 0
class EtOrbi::EoTime;
def rr; [ strftime('%A'), rweek, rday ]; end
end
EtOrbi.rweek_ref # => '2018-12-31'
# rw rd
EtOrbi.parse('2018-12-29').rr # => [ "Saturday", -1, -2 ]
EtOrbi.parse('2018-12-30').rr # => [ "Sunday", -1, -1 ]
EtOrbi.parse('2018-12-31').rr # => [ "Monday", 0, 0 ]
Users living in the US, in Canada, or in the Philippines where the week start on Sunday can tune their et-orbi:
class EtOrbi::EoTime;
def rr; [ strftime('%A'), rweek, rday ]; end
end
EtOrbi.rweek_ref = :sunday
EtOrbi.rweek_ref # => '2018-12-30'
# rw rd
EtOrbi.parse('2018-12-29').rr # => [ "Saturday", -1, -1 ]
EtOrbi.parse('2018-12-30').rr # => [ "Sunday", 0, 0 ]
EtOrbi.parse('2018-12-31').rr # => [ "Monday", 0, 1 ]
You can set the rweek_ref to :sunday, :saturday, :monday, or :iso, :us, or :default.
:sunday and :us are equivalent. :monday, :iso, and :default are equivalent.
If you feel like it, you can choose your own reference:
class EtOrbi::EoTime;
def rr; [ strftime('%A'), rweek, rday ]; end
end
EtOrbi.rweek_ref = '2025-09-28'
# rw rd
EtOrbi.parse('2018-12-29').rr # => [ "Saturday", -353, -2465 ]
EtOrbi.parse('2018-12-30').rr # => [ "Sunday", -352, -2464 ]
EtOrbi.parse('2018-12-31').rr # => [ "Monday", -352, -2463 ]
Before et-orbi 1.4.0, the computation was a bit different, yielding:
class EtOrbi::EoTime;
def rr; [ strftime('%A'), rweek, rday ]; end
end
# rw rd
EtOrbi.parse('2018-12-29').rr # => [ "Saturday", 0, -2 ]
EtOrbi.parse('2018-12-30').rr # => [ "Sunday", 0, -1 ]
EtOrbi.parse('2018-12-31').rr # => [ "Monday", 0, 0 ]
EtOrbi.parse('2019-01-01').rr # => [ "Tuesday", 1, 1 ]
This change was motivated by fugit gh-114.
Chronic integration
By default, et-orbi relies on Chronic to parse strings like "tomorrow" or "friday 1pm", if Chronic is present.
EtOrbi.parse('tomorrow')
# => #<EtOrbi::EoTime:0x007fbc6aa8a560
# @seconds=1575687600.0,
# @zone=#<TZInfo::TimezoneProxy: Asia/Tokyo>,
# @time=nil>
EtOrbi.parse('tomorrow').to_s
# => "2019-12-07 12:00:00 +0900"
This is a poor design choice I replicated from rufus-scheduler.
Of course this leads to issues.
It's probably better to have Chronic do its work outside of et-orbi, like in:
EtOrbi.parse(Chronic.parse('tomorrow').to_s).to_s
# => "2019-12-07 12:00:00 +0900"
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:
EtOrbi.parse('tomorrow')
# => #<EtOrbi::EoTime:0x007ffb5b2a2390
# @seconds=1575687600.0,
# @zone=#<TZInfo::TimezoneProxy: Asia/Tokyo>,
# @time=nil>
EtOrbi.parse('tomorrow', enable_chronic: false)
# ArgumentError: No time information in "tomorrow"
# from /home/jmettraux/w/et-orbi/lib/et-orbi/make.rb:31:in `rescue in parse'
or at the et-orbi level:
irb(main):007:0> EtOrbi.chronic_enabled = false
# => false
irb(main):008:0> EtOrbi.chronic_enabled?
# => false
EtOrbi.parse('tomorrow')
# ArgumentError: No time information in "tomorrow"
# from /home/jmettraux/w/et-orbi/lib/et-orbi/make.rb:31:in `rescue in parse'
Testing
To run tests, use proba:
bundle exec proba
Rails?
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.
Rails sets its timezone under config/application.rb.
Related projects
Sister projects
- rufus-scheduler - a cron/at/in/every/interval in-process scheduler, in fact, it's the father project to this fugit project
- fugit - Time tools for flor and the floraison project. Cron parsing and occurrence computing. Timestamps and more.
LICENSE
MIT, see LICENSE.txt
Owner metadata
- Name: floraison
- Login: floraison
- Email:
- Kind: organization
- Description: a workflow engine for Ruby
- Website:
- Location:
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/22110549?v=4
- Repositories: 12
- Last ynced at: 2024-04-21T02:16:17.489Z
- Profile URL: https://github.com/floraison
GitHub Events
Total
- Issues event: 5
- Watch event: 1
- Delete event: 1
- Issue comment event: 5
- Push event: 18
- Pull request event: 5
- Fork event: 2
- Create event: 3
Last Year
- Issues event: 4
- Watch event: 1
- Delete event: 1
- Issue comment event: 1
- Push event: 15
- Pull request event: 5
- Fork event: 2
- Create event: 3
Committers metadata
Last synced: 8 days ago
Total Commits: 498
Total Committers: 10
Avg Commits per committer: 49.8
Development Distribution Score (DDS): 0.032
Commits in past year: 29
Committers in past year: 3
Avg Commits per committer in past year: 9.667
Development Distribution Score (DDS) in past year: 0.172
| Name | Commits | |
|---|---|---|
| John Mettraux | j****x@g****m | 482 |
| dependabot[bot] | 4****] | 4 |
| Keenan Brock | k****n@t****t | 3 |
| Vais Salikhov | v****v@g****m | 2 |
| Stan Hu | s****u@g****m | 2 |
| Stanisław Pitucha | s****a@e****m | 1 |
| Phil Ross | p****s@g****m | 1 |
| Peter Goldstein | p****n@g****m | 1 |
| Igor Victor | g****a@y****u | 1 |
| Akira Matsuda | r****e@d****p | 1 |
Committer domains:
- dio.jp: 1
- yandex.ru: 1
- envato.com: 1
- thebrocks.net: 1
Issue and Pull Request metadata
Last synced: 17 days ago
Total issues: 26
Total pull requests: 18
Average time to close issues: about 1 month
Average time to close pull requests: about 21 hours
Total issue authors: 13
Total pull request authors: 12
Average comments per issue: 3.15
Average comments per pull request: 1.89
Merged pull request: 11
Bot issues: 0
Bot pull requests: 2
Past year issues: 3
Past year pull requests: 4
Past year average time to close issues: 8 days
Past year average time to close pull requests: about 11 hours
Past year issue authors: 2
Past year pull request authors: 3
Past year average comments per issue: 1.33
Past year average comments per pull request: 0.5
Past year merged pull request: 1
Past year bot issues: 0
Past year bot pull requests: 1
Top Issue Authors
- jmettraux (14)
- jsmartt (1)
- chrisarcand (1)
- mdave16 (1)
- igoshevski (1)
- ramfjord (1)
- stanhu (1)
- rangerscience (1)
- jstrouse (1)
- assembler (1)
- bhartis007 (1)
- itsjamie (1)
- MTRNord (1)
Top Pull Request Authors
- stanhu (4)
- tennisvelu (2)
- dependabot[bot] (2)
- vais (2)
- philr (1)
- petergoldstein (1)
- kbrock (1)
- gogainda (1)
- amatsuda (1)
- adis-io (1)
- viraptor (1)
- d-m-u (1)
Top Issue Labels
- todo (1)
Top Pull Request Labels
- dependencies (2)
- github_actions (1)
Package metadata
- Total packages: 3
-
Total downloads:
- rubygems: 362,965,860 total
- Total docker downloads: 1,446,772,184
- Total dependent packages: 3 (may contain duplicates)
- Total dependent repositories: 5,575 (may contain duplicates)
- Total versions: 101
- Total maintainers: 1
gem.coop: et-orbi
Time zones for fugit and rufus-scheduler. Urbi et Orbi.
- Homepage: https://github.com/floraison/et-orbi
- Documentation: http://www.rubydoc.info/gems/et-orbi/
- Licenses: MIT
- Latest release: 1.4.0 (published 3 months ago)
- Last Synced: 2025-12-06T07:11:38.361Z (6 days ago)
- Versions: 34
- Dependent Packages: 0
- Dependent Repositories: 0
- Downloads: 181,806,639 Total
- Docker Downloads: 723,386,092
-
Rankings:
- Dependent repos count: 0.0%
- Dependent packages count: 0.0%
- Average: 0.066%
- Docker downloads count: 0.126%
- Downloads: 0.139%
- Maintainers (1)
rubygems.org: et-orbi
Time zones for fugit and rufus-scheduler. Urbi et Orbi.
- Homepage: https://github.com/floraison/et-orbi
- Documentation: http://www.rubydoc.info/gems/et-orbi/
- Licenses: MIT
- Latest release: 1.4.0 (published 3 months ago)
- Last Synced: 2025-12-01T15:02:07.989Z (11 days ago)
- Versions: 34
- Dependent Packages: 3
- Dependent Repositories: 5,575
- Downloads: 181,159,221 Total
- Docker Downloads: 723,386,092
-
Rankings:
- Docker downloads count: 0.156%
- Downloads: 0.156%
- Dependent repos count: 0.425%
- Dependent packages count: 4.021%
- Average: 4.154%
- Forks count: 8.314%
- Stargazers count: 11.854%
- Maintainers (1)
proxy.golang.org: github.com/floraison/et-orbi
- Homepage:
- Documentation: https://pkg.go.dev/github.com/floraison/et-orbi#section-documentation
- Licenses: mit
- Latest release: v1.4.0 (published 3 months ago)
- Last Synced: 2025-12-01T15:02:08.790Z (11 days ago)
- Versions: 33
- Dependent Packages: 0
- Dependent Repositories: 0
-
Rankings:
- Dependent packages count: 5.497%
- Forks count: 5.627%
- Dependent repos count: 5.866%
- Average: 5.95%
- Stargazers count: 6.81%
Dependencies
- chronic ~> 0.10 development
- rspec ~> 3.8 development
- tzinfo >= 0
- actions/checkout v3 composite
- ruby/setup-ruby v1 composite
Score: 26.914873476010563