A summary of data about the Ruby ecosystem.

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.

README.md

et-orbi

tests
Gem Version

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


GitHub Events

Total
Last Year

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 Email 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:


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

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/floraison/et-orbi

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

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

et-orbi.gemspec rubygems
  • chronic ~> 0.10 development
  • rspec ~> 3.8 development
  • tzinfo >= 0
.github/workflows/test.yaml actions
  • actions/checkout v3 composite
  • ruby/setup-ruby v1 composite

Score: 26.914873476010563