user_time_zones 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01f8f2108c682b94569e141475a14e2caa1b8a2a
4
- data.tar.gz: 94e4f6edaec4484699e3fff8669836d04ba986d0
3
+ metadata.gz: 63c040d850767d25e365889bd61d08a8d294ce2e
4
+ data.tar.gz: 827e347f78558d703189a9ccea451e4614697aa4
5
5
  SHA512:
6
- metadata.gz: 469266a364b0b1d944028abadc9bf3d232e1a8c625147a511491848307b3b2b08d5ad1460bd839ccbfcac3574d8914a4edf2d380fd95472ff5d35226072affa5
7
- data.tar.gz: bb016157dc0327316976e29c8bc5adfdc4ad0d9c0072f3c11dae6e9ae97ad56ddda4c40af269559d455f3a5740e818264c865490dce04ecf1d677bca3df9463e
6
+ metadata.gz: 859e1635bf09a51578e24e536ced576fb4bef2191a8fbfcb625d1b421ee00c30975f154bbd0e4588892438206459fd1421c9b9b9b93ac944a0fde0ff0d296c56
7
+ data.tar.gz: df2f3f787e7f59c62c87402fb7eb59d3a166f8b380edb9022c008bf991eee6f8ab3a7e6220a4d6220f4c38648838e0423174383da550e9c37e89d5296379d089
data/.travis.yml CHANGED
@@ -1,5 +1,10 @@
1
+ cache: bundler
2
+
1
3
  sudo: false
4
+
2
5
  language: ruby
6
+
3
7
  rvm:
4
8
  - 2.3.3
9
+
5
10
  before_install: gem install bundler -v 1.14.6
data/README.md CHANGED
@@ -1,11 +1,22 @@
1
1
  # UserTimeZones
2
2
 
3
- UserTimeZones provides an easyway to work with multiple user time zones.
3
+ UserTimeZones provides an easy way to work with multiple user time zones.
4
4
 
5
- UserTimeZones is intended to be small, simple, and well-tested. A large percentage of applications will require
6
- support for per-user time zones which this gem can assist with. The solution is simple; you could implement it
5
+ UserTimeZones is small, simple, and tested. A large percentage of applications will require
6
+ support for per-user time zones; this gem can help. The solution is simple, you could implement it
7
7
  yourself, but this library will let you implement the solution the same way, every time, without having
8
- to expend excess effort.
8
+ to expend much effort.
9
+
10
+ [![Gem Version](https://badge.fury.io/rb/user_time_zones.svg)](https://badge.fury.io/rb/user_time_zones) ![Build status](https://travis-ci.org/tomichj/user_time_zones.svg?branch=master) ![Code Climate](https://codeclimate.com/github/tomichj/user_time_zones/badges/gpa.svg)
11
+
12
+
13
+ ## Overview
14
+
15
+ Your `User` model gets a `time_zone` attribute to record the `ActiveSupport::TimeZone` for each user, and
16
+ methods to set/get the time zone as an offset (in hours) from `UTC`. Every controller action is executed in
17
+ the context of the user's time zone. And, finally, some javascript will help you initially calculate the
18
+ user's time zone when they sign up.
19
+
9
20
 
10
21
  ## Requirements
11
22
 
@@ -15,7 +26,7 @@ to expend excess effort.
15
26
 
16
27
  ## Install
17
28
 
18
- To get started, add the UserTimeZones gem to your `Gemfile` and run `bundle install` to install it:
29
+ To get started, add the gem to your `Gemfile` and run `bundle install` to install it:
19
30
 
20
31
  ```ruby
21
32
  gem 'user_time_zones'
@@ -36,7 +47,7 @@ The install generator will:
36
47
  * Insert `include UserTimeZones::User` into your `User` model.
37
48
  * Insert `include UserTimeZones::Controller` into your `ApplicationController`.
38
49
 
39
- You may optionally include the javascript to guess a new user's timezone in your `application.js`:
50
+ Include the javascript to calculate a new user's timezone in your `application.js`:
40
51
  ```javascript
41
52
  //= require user_time_zones
42
53
  ```
@@ -92,15 +103,18 @@ You can allow the user to edit their time zone later on, in user#edit or elsewhe
92
103
 
93
104
  ### Applying the user's time zone
94
105
 
95
- For each action a user takes, UserTimeZones will set the time zone to a user's `:time_zone` .
96
- This is done in `ApplcationController` with an `around_action` that calls `Time.use_zone`.
106
+ The `UserTimeZones::Controller` module provides an `around_action` that wraps each action a user takes, setting
107
+ the time zone to the user's `time_zone` attribute for the duration of the controller action.
108
+
109
+ `UserTimeZones::Controller` was inserted into your `ApplicationController` by the UserTimeZone's install generator.
110
+ Any controller that needs time zone support should have `include UserTimeZones::Controller`.
97
111
 
98
112
 
99
113
  ### The User model and time zones
100
114
 
101
115
  UserTimeZones gives the user a new attribute, `time_zone`, and new methods `time_zone_offset` and `time_zone_offset=`.
102
116
  The `time_zone` user attribute is the name of a `ActiveSupport::TimeZone`. The offset methods are the offset of
103
- the time zone from `UTC`, in hours.
117
+ that time zone from `UTC`, in hours. Setting the `time_zone_offset` to a new value will change the user's `time_zone`.
104
118
 
105
119
  Example:
106
120
  ```ruby
@@ -112,8 +126,34 @@ Example:
112
126
  => "Alaska"
113
127
  >> user.time_zone_offset
114
128
  => -9
129
+ >> user.time_zone_offset = -7
130
+ => -7
131
+ >> user.time_zone
132
+ => "Arizona"
115
133
  ```
116
134
 
135
+ Your user model must `include UserTimeZones::User` into your user model. This is done for you by UserTimeZone's
136
+ install generator.
137
+
138
+ ### Selecting a time zone
139
+
140
+ Typically a user is allowed to manually select their time zone in a `user#edit` action. Nothing special here,
141
+ just use the Rails form helper time_zone_select. For example:
142
+ ```erbruby
143
+ <%= form_for @user do |f| %>
144
+ <!-- ... -->
145
+ <%= f.label :time_zone, 'Time Zone' %>
146
+ <%= f.time_zone_select :time_zone, ActiveSupport::TimeZone.all %>
147
+ <!-- ... -->
148
+ <% end %>
149
+ ```
150
+
151
+ You can limit your user to U.S. time zones:
152
+ ```erbruby
153
+ <%= f.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones %>
154
+ ```
155
+
156
+
117
157
 
118
158
  ### A summary of do’s and don'ts with time zones
119
159
 
@@ -9,12 +9,19 @@ module UserTimeZones
9
9
  include UserTimeZone::Generators::Helpers
10
10
 
11
11
  source_root File.expand_path('../templates', __FILE__)
12
+
12
13
  class_option :model,
13
14
  optional: true,
14
15
  type: :string,
15
16
  banner: 'model',
16
17
  desc: "Specify the model class name if you will use anything other than 'User'"
17
18
 
19
+ class_option :javascript,
20
+ type: :boolean,
21
+ aliases: '-j',
22
+ default: false,
23
+ desc: 'Install javascript "require" into application.js'
24
+
18
25
  def initialize(*)
19
26
  super
20
27
  assign_names!(model_class_name)
@@ -45,7 +52,12 @@ module UserTimeZones
45
52
  )
46
53
  end
47
54
 
48
-
55
+ def inject_javascript
56
+ javascript = File.join('app', 'assets', 'javascripts', 'application.js')
57
+ if options.javascript && File.exist?(javascript)
58
+ append_to_file 'app/assets/javascripts/application.js', '//= require user_time_zones'
59
+ end
60
+ end
49
61
 
50
62
  private
51
63
 
@@ -1,3 +1,3 @@
1
1
  module UserTimeZones
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: user_time_zones
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Tomich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-14 00:00:00.000000000 Z
11
+ date: 2017-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails