timing 0.1.3 → 0.2.0

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
  SHA256:
3
- metadata.gz: 513cf98c752998d82ff09b269bf4754776c2859f31f8c34a09bbfb63e2c34d82
4
- data.tar.gz: 3ef7a9b880f6b045909566f6b9a9f1c4c96ab760af4866197ef069f19ea49b23
3
+ metadata.gz: 8b759b410d5c8ac1cbdbbe5868ebbceab9a7a11a8b5e8edba0678a1336e5c0de
4
+ data.tar.gz: 58cf565f2bbcf85484940e33906ab03418d4fd04ad191cd85edc25f8dde6c149
5
5
  SHA512:
6
- metadata.gz: 6695542acd878fa25fa098b60c6288925e9882afb5fd1e3b9f926e61c72c17e7f2e794f4e19c70367f770e6c2be63b0feab55f0aefcb97ce69f1d4010db1e9a8
7
- data.tar.gz: d62cf015cf052d8d9495acb5097254dcf20b7ec41bab900da6ad80f0ae9588bf2c228a6c2d0f9d2e6516babc10e929433ec3d468d68b349a898df1b720692399
6
+ metadata.gz: 0fbc1aa7065242e4354ddf4275dea30b228e526a116dcc7e7ae8db73e8dc10b4181d5618d965b26837e86dabbeac65e396441e1db7bbbe73a2cf474a68f7b80b
7
+ data.tar.gz: 131b24b4d1b443d1c4ed35e0adcf4ab99c211dad29d4d9ac1b218f299280f4afa924dfb387e597901b39fe706dacfec8fdfc49eb88428e9f287bb1ca2893ebb9
data/README.md CHANGED
@@ -94,6 +94,7 @@ Timing::NaturalTimeLanguage.parse 'now'
94
94
  ```
95
95
 
96
96
  Named moments
97
+ ```
97
98
  - now
98
99
  - Now -0500
99
100
  - today
@@ -101,37 +102,47 @@ Named moments
101
102
  - Today -0600
102
103
  - yesterday -0400
103
104
  - tomorrow -0300
105
+ ```
104
106
 
105
107
  Last/Next day name
108
+ ```
106
109
  - last Monday +0200
107
110
  - last fri +0100
108
111
  - next tuesday +0000
109
112
  - next sat -0100
110
113
  - last thursday including today -0300
111
114
  - next mon including today +0200
115
+ ```
112
116
 
113
117
  Date (at 00:00:00)
118
+ ```
114
119
  - 6 April
115
120
  - 14 Jul 2010 +0400
116
121
  - 2015-09-03
117
122
  - 2015-06-20 -0800
118
-
123
+ ```
124
+
119
125
  Beginning/End of interval
126
+ ```
120
127
  - Beginning of month
121
128
  - end of year +0700
122
129
  - beginning of week
123
130
  - End of Day -0100
124
131
  - end of hour +0400
132
+ ```
125
133
 
126
134
  Time ago (now - interval)
135
+ ```
127
136
  - 1 minute ago
128
137
  - 3 hours ago -0500
129
138
  - 5 days ago -0100
130
139
  - 4 weeks ago +0100
131
140
  - 10 months ago +0330
132
141
  - 7 years ago -0700
142
+ ```
133
143
 
134
144
  Date at time
145
+ ```
135
146
  - today at 15:40
136
147
  - last sunday at 08:43:21 -0300
137
148
  - yesterday at beginning
@@ -142,8 +153,10 @@ Date at time
142
153
  - 2001-07-14 at 18:41
143
154
  - 2012-08-17 14:35:20
144
155
  - 1980-04-21T08:15:03-0500
156
+ ```
145
157
 
146
158
  Before/After moment
159
+ ```
147
160
  - 15 minutes from now
148
161
  - 3 days before yesterday
149
162
  - 1 month from today
@@ -152,6 +165,40 @@ Before/After moment
152
165
  - 1 month before beginning of month
153
166
  - 1 year before 9 Sep +0300
154
167
  - 2 years from 2001-05-21T12:30:40 -0500
168
+ ```
169
+
170
+
171
+ #### HourMinutesSeconds
172
+
173
+ Hour, minutes and seconds model.
174
+
175
+ ```ruby
176
+ HourMinutesSeconds.new 9, 23, 41 # => 09:23:41
177
+ HourMinutesSeconds.new 9, 23 # => 09:23:00
178
+ HourMinutesSeconds.new 9 # => 09:23:00
179
+
180
+ hhmmss = HourMinutesSeconds.parse '9:23:41'
181
+ hhmmss.hour # => 9
182
+ hhmmss.minutes # => 23
183
+ hhmmss.seconds # => 41
184
+ hhmmss.iso8601 # => 09:23:41
185
+ ```
186
+
187
+
188
+ #### ZoneOffset
189
+
190
+ Seconds wrapper helper for utc offset
191
+
192
+ ```ruby
193
+ Timing::ZoneOffset.new -10800 # => -0300 (-10800.0)
194
+ Timing::ZoneOffset.new 21600 # => +0600 (21600.0)
195
+
196
+ Timing::ZoneOffset.parse '-0300' # => -0300 (-10800.0)
197
+ Timing::ZoneOffset.parse '+0600' # => +0600 (21600.0)
198
+
199
+ zone_offset = Timing::ZoneOffset.parse '-0300'
200
+ zone_offset.iso8601 # => '-03:00'
201
+ ```
155
202
 
156
203
  ## Contributing
157
204
 
@@ -0,0 +1,78 @@
1
+ module Timing
2
+ class HourMinutesSeconds
3
+
4
+ HH_MM_SS_REGEX = /^(?<hour>\d{1,2})(:(?<minutes>\d{1,2}))?(:(?<seconds>\d{1,2}))?$/
5
+
6
+ attr_reader :hour, :minutes, :seconds
7
+
8
+ def initialize(hour, minutes=0, seconds=0)
9
+ raise ArgumentError, "Invalid hour #{hour}" if !hour.is_a?(Integer) || hour < 0 || hour > 23
10
+ raise ArgumentError, "Invalid minutes #{minutes}" if !minutes.is_a?(Integer) || minutes < 0 || minutes > 59
11
+ raise ArgumentError, "Invalid minutes #{seconds}" if !seconds.is_a?(Integer) || seconds < 0 || seconds > 59
12
+
13
+ @hour = hour
14
+ @minutes = minutes
15
+ @seconds = seconds
16
+ end
17
+
18
+ def iso8601
19
+ [hour, minutes, seconds].map { |d| d.to_s.rjust(2, '0') }.join(':')
20
+ end
21
+ alias_method :to_s, :iso8601
22
+ alias_method :inspect, :iso8601
23
+
24
+ def ==(other)
25
+ other.kind_of?(self.class) && hash == other.hash
26
+ end
27
+ alias_method :eql?, :==
28
+
29
+ def hash
30
+ [hour, minutes, seconds].hash
31
+ end
32
+
33
+ def >(other)
34
+ raise ArgumentError, "Invalid argument #{other}" unless other.is_a?(HourMinutesSeconds)
35
+
36
+ (hour > other.hour) ||
37
+ (hour == other.hour && minutes > other.minutes) ||
38
+ (hour == other.hour && minutes == other.minutes && seconds > other.seconds)
39
+ end
40
+
41
+ def <(other)
42
+ raise ArgumentError, "Invalid argument #{other}" unless other.is_a?(HourMinutesSeconds)
43
+
44
+ (hour < other.hour) ||
45
+ (hour == other.hour && minutes < other.minutes) ||
46
+ (hour == other.hour && minutes == other.minutes && seconds < other.seconds)
47
+ end
48
+
49
+ def >=(other)
50
+ self > other || self == other
51
+ end
52
+
53
+ def <=(other)
54
+ self < other || self == other
55
+ end
56
+
57
+ def <=>(other)
58
+ if self == other
59
+ 0
60
+ elsif self > other
61
+ 1
62
+ else
63
+ -1
64
+ end
65
+ end
66
+
67
+ def between?(from, to)
68
+ self >= from && self <= to
69
+ end
70
+
71
+ def self.parse(expression)
72
+ match = expression.to_s.match HH_MM_SS_REGEX
73
+ raise ArgumentError, "Invalid expression #{expression}" unless match
74
+ new(*match.names.map { |n| (match[n] || 0).to_i })
75
+ end
76
+
77
+ end
78
+ end
@@ -6,7 +6,7 @@ module Timing
6
6
  REGEXP = /[+-]\d\d:?\d\d$/
7
7
 
8
8
  def_delegators :time, :to_i, :to_f, :to_date, :to_datetime, :between?, :==, :<, :<=, :>, :>=, :<=>, :hash
9
- def_delegators :time_with_offset, :year, :month, :day, :hour, :min, :sec, :wday, :yday
9
+ def_delegators :time_with_offset, :year, :month, :day, :hour, :min, :sec, :wday, :yday, :sunday?, :monday?, :tuesday?, :wednesday?, :thursday?, :friday?, :saturday?
10
10
 
11
11
  attr_reader :zone_offset
12
12
 
@@ -1,3 +1,3 @@
1
1
  module Timing
2
- VERSION = '0.1.3'
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/timing.rb CHANGED
@@ -9,6 +9,7 @@ require 'timing/helpers'
9
9
  require 'timing/interval'
10
10
  require 'timing/zone_offset'
11
11
  require 'timing/time_in_zone'
12
+ require 'timing/hour_minutes_seconds'
12
13
  require 'timing/natural_time_language'
13
14
  require 'timing/natural_time_language_interpreters'
14
15
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Naiman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-15 00:00:00.000000000 Z
11
+ date: 2018-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: treetop
@@ -168,6 +168,7 @@ files:
168
168
  - Rakefile
169
169
  - lib/timing.rb
170
170
  - lib/timing/helpers.rb
171
+ - lib/timing/hour_minutes_seconds.rb
171
172
  - lib/timing/interval.rb
172
173
  - lib/timing/natural_time_language.rb
173
174
  - lib/timing/natural_time_language.treetop