rack-time-zone-middleware 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|