ozone 0.1.0 → 0.2.0

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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +45 -4
  3. data/lib/ozone/version.rb +1 -1
  4. data/lib/ozone.rb +50 -9
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 89f0892ad2d69ebd4e89ea7334e4e3cda9e60fd8
4
- data.tar.gz: 9387af4d22b447496660ee99b3298452f00b204d
3
+ metadata.gz: 6333a6bb89f133a43dcf273dd82f5d7a2de819e6
4
+ data.tar.gz: 8eeeb170d91b60cc8a6dd40fb580b2469d46f99f
5
5
  SHA512:
6
- metadata.gz: a422392e2f7dcadf2961a47ce9f5079f2805f66243b0f6ba1fe2d67ed2059215eee63d9f6be2a56de4c5879cc9bf0735b90ccd4dee466450b6602a94968e477b
7
- data.tar.gz: b30c116550d69b2dfb8caa6ab76f20a611ab75ba11f0fd920602c4ec881b8b7181302653abdff0f296d65e4ca604b46aa11db992cfc3f6f3462b827c24c8d623
6
+ metadata.gz: 2a45fc5be2db9076de08bfc80249dd2daa966cdb65baa6f9b802b36b14e1849a8cdefc07609c7c80855f050238d1c0e98474a5f7fcc2e10e5e1d09fedaea63e8
7
+ data.tar.gz: 547347a2b563f3191a643f9de83c734f4e6560e15a47ee9da2ecaa827d195998ed22c4b7a643d132c857fa038680eba07a1e806f4a826d5b9f72580ca7595088
data/README.md CHANGED
@@ -3,7 +3,10 @@ Convert time based on offset, with or without dst
3
3
  =======
4
4
  # Ozone
5
5
 
6
- Given an offset (in minutes) and a boolean whether to observe daylight savings, convert a ruby time to a string representation, adjusted by offset, and either abiding by or ignoring daylight savings.
6
+ Given a ruby time, an offset (in minutes), and a boolean whether to observe daylight savings, Ozone provides two things:
7
+
8
+ 1) Convert a ruby time to a string representation, adjusted by offset, and either abiding by or ignoring daylight savings.
9
+ 2) Compare with a ruby time to see whether before or after, either abiding by or ignoring daylight savings.
7
10
 
8
11
  ## Installation
9
12
 
@@ -23,16 +26,54 @@ Or install it yourself as:
23
26
 
24
27
  ## Usage
25
28
 
26
- Ozone has just one method -- call -- which takes a time, offset (from utc, in minutes), whether to use daylight savings, and a [time format](http://ruby-doc.org/core-2.2.0/Time.html#method-i-strftime). Default format is YYYY-MM-DD HH:MM.
29
+ An instance of Ozone::Time can be compared with a ruby time.
30
+
31
+ When observes_dst is true, Ozone::Time has the same value as ruby Time when making comparisons.
32
+
33
+ ```ruby
34
+ dst_time = Time.parse("2014-03-09 10:00:00 UTC")
35
+ ozone_time = Ozone::Time.new(
36
+ time: dst_time,
37
+ offset: -480,
38
+ observes_dst: true,
39
+ )
40
+
41
+ > ozone_time.before?(1.second.since(dst_time))
42
+ => true
43
+ > ozone_time.before?(1.second.until(dst_time))
44
+ => false
45
+ ```
46
+
47
+ However, when observes_dst is false:
27
48
 
28
49
  ```ruby
29
- > Ozone.call(time: t, offset: -480, observes_dst: true)
50
+ ozone_time = Time.new(
51
+ time: dst_time,
52
+ offset: -480,
53
+ observes_dst: false,
54
+ )
55
+
56
+ > ozone_time.before?(1.second.since(dst_time)
57
+ => true
58
+ > ozone_time.before?(1.second.until(dst_time)
59
+ => true
60
+ ```
61
+
62
+ This is because during daylight savings, times will be adjusted backwards 1 hour if daylight savings
63
+ is not being observed.
64
+
65
+ Ozone::Formatter has one method -- call -- which takes a time, offset (from utc, in minutes), whether to use daylight savings, and a [time format](http://ruby-doc.org/core-2.2.0/Time.html#method-i-strftime). Default format is YYYY-MM-DD HH:MM.
66
+
67
+ ```ruby
68
+ > Ozone::Formatter.call(time: t, offset: -480, observes_dst: true)
30
69
  => "2014/07/17 17:30"
31
70
 
32
- > Ozone.call(time: t, offset: -480, observes_dst: false)
71
+ > Ozone::Formatter.call(time: t, offset: -480, observes_dst: false)
33
72
  => "2014/07/17 16:30"
34
73
  ```
35
74
 
75
+ This functionality can also be accessed via the Ozone::Time#strftime method.
76
+
36
77
  ## Development
37
78
 
38
79
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
data/lib/ozone/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ozone
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/ozone.rb CHANGED
@@ -3,17 +3,58 @@ require "ozone/version"
3
3
  require 'active_support/time'
4
4
 
5
5
  module Ozone
6
- module_function
6
+ module Formatter
7
+ module_function
7
8
 
8
- def call(time:, offset:, observes_dst: true, format: '%Y-%m-%d %H:%M')
9
- timezone = ActiveSupport::TimeZone[offset/60]
10
- time_with_zone = time.in_time_zone(timezone)
11
- if time_with_zone.dst? && !observes_dst
12
- offset -= 120
9
+ def call(time:, offset:, observes_dst: true, format: '%Y-%m-%d %H:%M')
13
10
  timezone = ActiveSupport::TimeZone[offset/60]
14
- 2.hours.since(time.in_time_zone(timezone)).strftime(format)
15
- else
16
- time_with_zone.strftime(format)
11
+ time_with_zone = time.in_time_zone(timezone)
12
+ if time_with_zone.dst? && !observes_dst
13
+ # If we're during daylight savings time, but
14
+ # we are not observing daylight savings,
15
+ # there is a one-hour window where there is not
16
+ # an equivalent time between standard and daylight
17
+ # savings times. In order to deal with this,
18
+ # we subtract two hours from the offset and then
19
+ # take 2 hours from the given time. This frees
20
+ # us to string format the time without ruby
21
+ # making adjustments internally.
22
+ offset -= 120
23
+ timezone = ActiveSupport::TimeZone[offset/60]
24
+ 2.hours.since(time.in_time_zone(timezone)).strftime(format)
25
+ else
26
+ time_with_zone.strftime(format)
27
+ end
28
+ end
29
+ end
30
+
31
+ class Time
32
+ def initialize(time:, offset:, observes_dst: true)
33
+ @offset = offset
34
+ @timezone = ActiveSupport::TimeZone[offset/60]
35
+ @observes_dst = observes_dst
36
+ @time = time
37
+ end
38
+
39
+ def before?(time_with_zone)
40
+ adjusted_time < time_with_zone
41
+ end
42
+
43
+ def after?(time_with_zone)
44
+ !before?(time_with_zone)
45
+ end
46
+
47
+ def strftime(format: '%Y-%m-%d %H:%M')
48
+ Formatter.call(time: @time, offset: @offset, observes_dst: @observes_dst, format: format)
49
+ end
50
+
51
+ private
52
+
53
+ def adjusted_time
54
+ time_with_zone = @time.in_time_zone(@timezone)
55
+ time_with_zone.dst? && !@observes_dst ?
56
+ 1.hour.until(time_with_zone) :
57
+ time_with_zone
17
58
  end
18
59
  end
19
60
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ozone
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hubert Huang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-06-29 00:00:00.000000000 Z
11
+ date: 2015-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport