rack-time-zone-middleware 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6030c8f5342aa87d294dfef6a8144a3d17997d44
4
- data.tar.gz: 7a9e56ab384b56eda9bb02508ff05c8a107eca85
3
+ metadata.gz: 5597742125cbf05656c5a565c9a47221aa44352a
4
+ data.tar.gz: 16266cec9861ba54fb12b64105b8887f103948b6
5
5
  SHA512:
6
- metadata.gz: 895a59efa778fda557e4a23cf84436dd674099109ffdbe6ea96bb3ec67f32b32f935e13d95772ee47eb72e00f6449dfce0905ff2e957656151a572586e4fa039
7
- data.tar.gz: d18904e4c9b8b2e623626e8822bd236bba3413ad13f06d9451420b03aef30bd71a7a44f00a9fa77db97a556d6f286f145daece52a876cd2d2239fe5722795cc6
6
+ metadata.gz: f1cd433ef9be1d7a7b40d62fef42c55448f30f83607587a218ffe47f560f31ccb981b13e0298fe8e4fa9ba7c30cd65c828942eaaad7010d1c8912b987104a11e
7
+ data.tar.gz: 43e925446255ae98141d3e0eacfcf18592bcf0054b77797ec8dba83799cbd59641e8e28703b1355e5f175876128aae90aa92ec9bedae83cb2c47e846d1266048
data/.gitignore CHANGED
@@ -9,3 +9,7 @@
9
9
  /tmp/
10
10
  /.idea
11
11
  .ruby-version
12
+ .irb_history
13
+ .byebug_history
14
+ /coverage/
15
+ /test/coverage/
data/Gemfile CHANGED
@@ -5,3 +5,8 @@ gemspec
5
5
  gem 'rack', '~> 1.6'
6
6
  gem 'activesupport', '~> 4.0'
7
7
  gem 'coveralls', require: false
8
+
9
+ gem 'pry', platforms: :mri
10
+ gem 'pry-byebug', platforms: :mri
11
+ gem 'minitest-byebug', platforms: :mri
12
+ gem 'byebug', platforms: :mri
data/README.md CHANGED
@@ -28,6 +28,18 @@ Or install it yourself as:
28
28
 
29
29
  $ gem install rack-time-zone-middleware
30
30
 
31
+ ## Logic in detail
32
+
33
+ 1. UI
34
+ 1. Use something like [JsTz](http://pellepim.bitbucket.org/jstz/) to determine users time-zone.
35
+ 2. Write time-zone name to cookie.
36
+ 3. [AngularJS Example](#angularjs)
37
+ 2. Ruby
38
+ 1. Use one of loading ways explained below ([Usage](#usage)).
39
+ 2. Provide cookie `key_name` with options, wich includes detected time-zone.
40
+ 3. Provide enironment `key_name` with options, where you store its value.
41
+ 4. Use `env['key_name']` to access saved value from your application or controller.
42
+
31
43
  ## Usage
32
44
 
33
45
  ### Sinatra/Padrino application
@@ -78,16 +90,22 @@ config.middleware.use Rack::TimeZoneMiddleware do |middleware, env|
78
90
  end
79
91
  ```
80
92
 
93
+ In theory you can setup dynamic TimeZones detector(when its hash is managed from your Application, from Admin panel or something),
94
+ but in most of realizations what i saw, it is overhead.
95
+
81
96
  ### Options
82
97
 
83
98
  | name | description |
84
99
  |---|---|
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') |
100
+ | default_tz | `optional`, TimeZone name fallback value (default: 'Europe/Moscow') |
101
+ | default_as_tz | `optional`, `ActiveSupport::TimeZone` key name fallback value (default: 'Moscow') |
102
+ | cookie_key | `optional`, Cookie key name (default: 'dummy.time_zone') |
103
+ | time_zone_key | `optional`, Environment key name (default: 'dummy.time_zone') |
104
+ | time_zone_map | `optional`, TimeZone `Hash` or `lambda`, like `{'Moscow' => 'Europe/Moscow'}`. If not provided `ActiveSupport` TZInfo map will be tried. |
105
+
106
+ ## AngularJS
89
107
 
90
- ## AngularJS TimeZone updater factory example via [JsTz](http://pellepim.bitbucket.org/jstz/)
108
+ TimeZone updater factory example via [JsTz](http://pellepim.bitbucket.org/jstz/)
91
109
 
92
110
  ```javascript
93
111
  web.services.factory('JsTz', ['ipCookie', function(ipCookie) {
@@ -105,7 +123,7 @@ web.services.factory('JsTz', ['ipCookie', function(ipCookie) {
105
123
  ## Dependencies:
106
124
 
107
125
  - [Rack](https://github.com/rack/rack)
108
- - [ActiveSupport](https://github.com/rails/rails)
126
+ - [ActiveSupport(optional)](https://github.com/rails/rails)
109
127
 
110
128
  ## Contributing
111
129
 
@@ -1,5 +1,4 @@
1
1
  require 'rack/time-zone-middleware/version'
2
- require 'active_support/values/time_zone'
3
2
 
4
3
  module Rack
5
4
  class TimeZoneMiddleware
@@ -8,6 +7,8 @@ module Rack
8
7
  DEFAULT_KEY = 'dummy.time_zone'
9
8
  DEFAULT_COOKIE_KEY = DEFAULT_KEY
10
9
 
10
+ MAP_WARNING = "Please install `activesupport` gem and `require 'active_support/values/time_zone'` or provide custom TimeZone map, as a `Hash` like `{'Moscow' => 'Europe/Moscow'}`"
11
+
11
12
  attr_reader :app, :runner, :options
12
13
 
13
14
  def initialize(app, opts = {}, &block)
@@ -19,6 +20,8 @@ module Rack
19
20
  options[:time_zone_key] = opts.fetch(:time_zone_key, DEFAULT_KEY)
20
21
  options[:cookie_key] = opts.fetch(:cookie_key, DEFAULT_COOKIE_KEY)
21
22
 
23
+ @time_zone_map = opts.fetch(:time_zone_map, nil) || default_time_zone_map
24
+
22
25
  if block_given?
23
26
  @runner = block
24
27
  else
@@ -31,12 +34,27 @@ module Rack
31
34
  end
32
35
 
33
36
  def find_as_time_zone(name)
34
- zone_name, _ = ::ActiveSupport::TimeZone::MAPPING.detect { |_, v| v.eql? name }
37
+ zone_name, _ = time_zone_map.detect { |_, v| v.eql? name }
35
38
  zone_name || options[:default_as_tz]
39
+ rescue
40
+ options[:default_as_tz]
36
41
  end
37
42
 
38
43
  private
39
44
 
45
+ def time_zone_map
46
+ @time_zone_map.is_a?(Proc) ? @time_zone_map.call : @time_zone_map
47
+ end
48
+
49
+ def default_time_zone_map(no_test=true)
50
+ if no_test && defined?(::ActiveSupport::TimeZone::MAPPING)
51
+ -> { ::ActiveSupport::TimeZone::MAPPING }
52
+ else
53
+ $stderr.puts MAP_WARNING
54
+ -> { {} }
55
+ end
56
+ end
57
+
40
58
  def _call(mw, env)
41
59
  request = ::Rack::Request.new(env)
42
60
 
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  class TimeZoneMiddleware
3
- VERSION = '0.1.3'
3
+ VERSION = '0.1.4'
4
4
  end
5
5
  end
@@ -21,10 +21,10 @@ Gem::Specification.new do |spec|
21
21
  spec.require_paths = ['lib']
22
22
  spec.licenses = ['MIT']
23
23
 
24
- spec.add_runtime_dependency 'activesupport', '>= 4.0.0'
25
24
  spec.add_runtime_dependency 'rack', '>= 1.2.0'
26
25
 
27
- spec.add_development_dependency 'bundler', '~> 1.0'
26
+ spec.add_development_dependency 'activesupport', '>= 4.0.0'
27
+ spec.add_development_dependency 'bundler', '~> 1.0'
28
28
  spec.add_development_dependency 'rake'
29
- spec.add_development_dependency 'minitest', '~> 5.6'
29
+ spec.add_development_dependency 'minitest', '~> 5.6'
30
30
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-time-zone-middleware
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Merkulov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-15 00:00:00.000000000 Z
11
+ date: 2016-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
14
+ name: rack
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.0.0
19
+ version: 1.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 4.0.0
26
+ version: 1.2.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: rack
28
+ name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.2.0
34
- type: :runtime
33
+ version: 4.0.0
34
+ type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 1.2.0
40
+ version: 4.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement