rack-time-zone-middleware 0.1.2 → 0.1.3
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 +4 -4
- data/README.md +30 -7
- data/lib/rack/time-zone-middleware.rb +5 -3
- data/lib/rack/time-zone-middleware/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6030c8f5342aa87d294dfef6a8144a3d17997d44
|
4
|
+
data.tar.gz: 7a9e56ab384b56eda9bb02508ff05c8a107eca85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 895a59efa778fda557e4a23cf84436dd674099109ffdbe6ea96bb3ec67f32b32f935e13d95772ee47eb72e00f6449dfce0905ff2e957656151a572586e4fa039
|
7
|
+
data.tar.gz: d18904e4c9b8b2e623626e8822bd236bba3413ad13f06d9451420b03aef30bd71a7a44f00a9fa77db97a556d6f286f145daece52a876cd2d2239fe5722795cc6
|
data/README.md
CHANGED
@@ -7,9 +7,10 @@
|
|
7
7
|
|
8
8
|
Adding ability to detect timezone at UI side and get it within Rack/Rails via cookies with/o custom handler.
|
9
9
|
|
10
|
-
This gem created for usecase of loading
|
10
|
+
This gem created for usecase of loading detected TimeZone into Rails environment.
|
11
11
|
You can set cookie with TimeZone name at UI side(from Angular, React, Ember, Backbone or vanilla JS).
|
12
|
-
After that all XHR requests to your Rails/Rack backend
|
12
|
+
After that all XHR requests to your Rails/Rack backend can be identified by this Middleware.
|
13
|
+
In case when TimeZone name(s) is unsupported or key not found in cookies, middleware will fallback to defaults.
|
13
14
|
|
14
15
|
## Installation
|
15
16
|
|
@@ -38,7 +39,10 @@ require 'rack/time-zone-middleware'
|
|
38
39
|
use Rack::TimeZoneMiddleware
|
39
40
|
|
40
41
|
# Configured TimeZone handler.
|
41
|
-
use Rack::TimeZoneMiddleware default_tz: 'Europe/Moscow',
|
42
|
+
use Rack::TimeZoneMiddleware, default_tz: 'Europe/Moscow',
|
43
|
+
default_as_tz: 'Moscow',
|
44
|
+
time_zone_key: 'dummy.time_zone'
|
45
|
+
cookie_key: 'dummy.time_zone'
|
42
46
|
|
43
47
|
# Your own TimeZone handler. All options & instance methods is available through middleware parameter.
|
44
48
|
use Rack::TimeZoneMiddleware do |middleware, env|
|
@@ -58,7 +62,10 @@ end
|
|
58
62
|
config.middleware.use Rack::TimeZoneMiddleware
|
59
63
|
|
60
64
|
# Configured TimeZone handler.
|
61
|
-
config.middleware.use Rack::TimeZoneMiddleware default_tz: 'Europe/Moscow',
|
65
|
+
config.middleware.use Rack::TimeZoneMiddleware, default_tz: 'Europe/Moscow',
|
66
|
+
default_as_tz: 'Moscow',
|
67
|
+
time_zone_key: 'dummy.time_zone'
|
68
|
+
cookie_key: 'dummy.time_zone'
|
62
69
|
|
63
70
|
# Your own TimeZone handler. All options & instance methods is available through middleware parameter.
|
64
71
|
config.middleware.use Rack::TimeZoneMiddleware do |middleware, env|
|
@@ -75,9 +82,25 @@ end
|
|
75
82
|
|
76
83
|
| name | description |
|
77
84
|
|---|---|
|
78
|
-
| default_tz |
|
79
|
-
| default_as_tz |
|
80
|
-
|
|
85
|
+
| default_tz | TimeZone name fallback value (default: 'Europe/Moscow') |
|
86
|
+
| default_as_tz | `ActiveSupport::TimeZone` key name fallback value (default: 'Moscow') |
|
87
|
+
| cookie_key | Cookie key name (default: 'dummy.time_zone') |
|
88
|
+
| time_zone_key | Environment key name (default: 'dummy.time_zone') |
|
89
|
+
|
90
|
+
## AngularJS TimeZone updater factory example via [JsTz](http://pellepim.bitbucket.org/jstz/)
|
91
|
+
|
92
|
+
```javascript
|
93
|
+
web.services.factory('JsTz', ['ipCookie', function(ipCookie) {
|
94
|
+
return {
|
95
|
+
updateCookie: function() {
|
96
|
+
tz = jstz.determine();
|
97
|
+
name = tz.name();
|
98
|
+
ipCookie('dummy.time_zone', name, { path: '/', expires: 21 });
|
99
|
+
return name;
|
100
|
+
}
|
101
|
+
};
|
102
|
+
}]);
|
103
|
+
```
|
81
104
|
|
82
105
|
## Dependencies:
|
83
106
|
|
@@ -6,6 +6,7 @@ module Rack
|
|
6
6
|
DEFAULT_TIME_ZONE = 'Europe/Moscow'
|
7
7
|
DEFAULT_AS_TIME_ZONE = 'Moscow'
|
8
8
|
DEFAULT_KEY = 'dummy.time_zone'
|
9
|
+
DEFAULT_COOKIE_KEY = DEFAULT_KEY
|
9
10
|
|
10
11
|
attr_reader :app, :runner, :options
|
11
12
|
|
@@ -15,7 +16,8 @@ module Rack
|
|
15
16
|
@options = {}
|
16
17
|
options[:default_tz] = opts.fetch(:default_tz, DEFAULT_TIME_ZONE)
|
17
18
|
options[:default_as_tz] = opts.fetch(:default_as_tz, DEFAULT_AS_TIME_ZONE)
|
18
|
-
options[:
|
19
|
+
options[:time_zone_key] = opts.fetch(:time_zone_key, DEFAULT_KEY)
|
20
|
+
options[:cookie_key] = opts.fetch(:cookie_key, DEFAULT_COOKIE_KEY)
|
19
21
|
|
20
22
|
if block_given?
|
21
23
|
@runner = block
|
@@ -38,8 +40,8 @@ module Rack
|
|
38
40
|
def _call(mw, env)
|
39
41
|
request = ::Rack::Request.new(env)
|
40
42
|
|
41
|
-
time_zone = request.cookies[mw.options[:
|
42
|
-
env[mw.options[:
|
43
|
+
time_zone = request.cookies[mw.options[:cookie_key]] || mw.options[:default_tz]
|
44
|
+
env[mw.options[:time_zone_key]] = mw.find_as_time_zone(time_zone)
|
43
45
|
|
44
46
|
mw.app.call(env)
|
45
47
|
end
|