Rack::TimeZoneMiddleware
Adding ability to detect timezone at UI side and get it within Rack/Rails via cookies with/o custom handler.
This gem created for usecase of loading predefined TimeZone into Rails environment.
You can set cookie with TimeZone name at UI side(from Angular, React, Ember, Backbone or vanilla JS).
After that all XHR requests to your Rails/Rack backend will be fetched with this Middleware.
Installation
Add this line to your application's Gemfile:
gem 'rack-time-zone-middleware'
And then execute:
$ bundle
Or install it yourself as:
$ gem install rack-time-zone-middleware
Usage
Sinatra/Padrino application
require 'rack/time-zone-middleware'
# Default TimeZone handler.
use Rack::TimeZoneMiddleware
# Configured TimeZone handler.
use Rack::TimeZoneMiddleware default_tz: 'Europe/Moscow', default_as_tz: 'Moscow', default_key: 'dummy.time_zone'
# Your own TimeZone handler. All options & instance methods is available through middleware parameter.
use Rack::TimeZoneMiddleware do |middleware, env|
request = ::Rack::Request.new(env)
time_zone = request&.['dummy.time_zone'] || middleware.[:default_tz]
env['dummy.time_zone'] = middleware.find_as_time_zone(time_zone)
middleware.app.call(env)
end
Rails application
# Default TimeZone handler.
config.middleware.use Rack::TimeZoneMiddleware
# Configured TimeZone handler.
config.middleware.use Rack::TimeZoneMiddleware default_tz: 'Europe/Moscow', default_as_tz: 'Moscow', default_key: 'dummy.time_zone'
# Your own TimeZone handler. All options & instance methods is available through middleware parameter.
config.middleware.use Rack::TimeZoneMiddleware do |middleware, env|
request = ::Rack::Request.new(env)
time_zone = request&.['dummy.time_zone'] || middleware.[:default_tz]
env['dummy.time_zone'] = middleware.find_as_time_zone(time_zone)
middleware.app.call(env)
end
Options
| name | description |
|---|---|
| default_tz | Default TimeZone for fallback(default: 'Europe/Moscow') |
| default_as_tz | Default ActiveSupport::TimeZone fallback key(default: 'Moscow') |
| default_key | Default cookie and environment keys(default: 'dummy.time_zone') |
Dependencies:
Contributing
- Fork it ( https://github.com/merqlove/rack-time-zone-middleware/fork )
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request
Bug reports and pull requests are welcome on GitHub at https://github.com/merqlove/rack-time-zone-middleware.
Testing
$ rake test
Development
To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.
Copyright (c) 2016 Alexander Merkulov
MIT License