time-helper 1.3 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/README +4 -0
  2. data/lib/time-helper.rb +35 -7
  3. metadata +4 -15
data/README CHANGED
@@ -2,6 +2,7 @@ This gem adds a few methods to Time, both instance and class.
2
2
  It's not great, but makes my life easier on a few cucumber based projects.
3
3
  There's a method Time.strtotime which takes a date(time) string and turns it into a time object.
4
4
  Also method add and substract to the instance. (Important, these methods do not account for leap years and months, etc, one month is 30 days and 1 year is 365 days.)
5
+ =~ to see if two Time objects are "close enough"
5
6
 
6
7
  Usage examples:
7
8
 
@@ -41,6 +42,9 @@ Time.parse does not work well with non-American formats, if like me, you're work
41
42
  mat like: DD/MM/YYYY Time.parse will not do. In fact, if you rewrite strtotime so it just calls parse a few of the tests
42
43
  included will fail.
43
44
 
45
+ New in 1.3.1
46
+ Added =~ method which allows you to see if two time objects are close enough, by default it compares up till the hour, for instance, a =~ b will be true if a and b are both objects with the same year, month, day and hour.
47
+ Removed all the aborts! Replaced be real errors inside the class! Sorry for the mess.
44
48
 
45
49
  New in 1.3:
46
50
  Added support for time strings in the format you'd usualy pass to Time.parse
@@ -1,4 +1,5 @@
1
- #@version 1.3.0
1
+ #encoding: utf-8
2
+ #@version 1.3.1
2
3
  #@author Arthur
3
4
  class Time
4
5
  require 'time'
@@ -92,7 +93,7 @@ class Time
92
93
  separators = string.match( /\d{2,4}(.)?\d{2}(.)?\d{2,4}/ )
93
94
  return nil unless separators[1]
94
95
 
95
- abort 'separators must be equal' unless separators[2] == separators[1]
96
+ raise GenericInputError.new 'separators must be equal' unless separators[2] == separators[1]
96
97
  return separators[2]
97
98
  end
98
99
  #@param string [String] datetime string
@@ -108,7 +109,7 @@ class Time
108
109
  return nil if string.match /\d{14}/
109
110
  separators = string.match(/(.)\d{2}:\d{2}:\d{2}$/)
110
111
  return separators[1] if separators[1]
111
- abort 'could not find date time separator'
112
+ raise GenericInputError.new 'could not find date time separator'
112
113
  end
113
114
  #see Time#get_order
114
115
  def get_dt_order string
@@ -132,7 +133,7 @@ class Time
132
133
  elsif year.match( dy ) and day.match( yd )
133
134
  return :ymd
134
135
  else
135
- abort 'can\'t find order'
136
+ raise GenericInputError.new 'can\'t find order'
136
137
  end
137
138
  else
138
139
  return no_separator_order string
@@ -150,7 +151,7 @@ class Time
150
151
  elsif string[0..3].to_i >= 1970 and string[4..5].to_i and string[6..7].to_i <= 31
151
152
  return :ymd
152
153
  end
153
- abort 'can\'t find order'
154
+ raise GenericInputError.new 'can\'t find order'
154
155
  end
155
156
  end
156
157
 
@@ -196,6 +197,33 @@ class Time
196
197
  return seconds
197
198
  end
198
199
 
199
- end
200
- class InvalidTimeStringFormat < StandardError
200
+ public
201
+ #compares if two Time objects are close enough to each other
202
+ #@param other_time [Time] time to be compared to
203
+ #@param smallest_unit [Symbol] smallest unit of time to check if it's the same
204
+ # @example
205
+ # a = Time.now
206
+ # b = Time.now.add(:day = 1)
207
+ # a =~ b
208
+ # => false
209
+ # a.=~ b,:month
210
+ # => true
211
+ #@note to compare up to the hour you just need var =~ other_var,
212
+ # but to pass the second argument you must use var.=~(other_var, :min)
213
+ #@note minute is :min seconds is :sec
214
+ def =~(other_time, smallest_unit = :hour)
215
+ raise InvalidArgument.new('Argument must be an instance of Time') unless other_time.class == Time
216
+ equal = true
217
+ [:year, :month, :day, :hour, :min, :sec].each do |method|
218
+ self_unit, other_unit = self.method(method).call(), other_time.method(method).call()
219
+ equal = false unless self_unit == other_unit
220
+ break if method == smallest_unit
221
+ end
222
+ return equal
223
+ end
224
+
225
+ ##### Errors #####
226
+ class GenericInputError < StandardError; end
227
+ class InvalidArgument < GenericInputError; end
228
+ class InvalidTimeStringFormat < GenericInputError; end
201
229
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: time-helper
3
3
  version: !ruby/object:Gem::Version
4
- version: "1.3"
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arthur Silva
@@ -9,22 +9,11 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2012-05-30 00:00:00 +01:00
12
+ date: 2012-08-20 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
- description: " Adds a few methods to the Time class, more significant:\n\n strtotime which returns a Time object based on a string.\n\n also methods add and substract that allow you to do some easy date math (doesn't take leap months/years into account)\n also tomorrow and yesterday methods witch are like Time.now +- 1 day\n\n\
17
- **********************************************\n\
18
- *How is this diferent than just \"Time.parse\"?*\n\
19
- **********************************************\n\n\
20
- Time.parse does not work well with non-American formats, if like me, you're working with strings that have dates in a format like: DD/MM/YYYY Time.parse will not do. In fact, if you rewrite strtotime so it just calls parse a few of the tests included will fail.\n\n\n\
21
- New in 1.3:\n\
22
- Added support for time strings in the format you'd usualy pass to Time.parse\n\
23
- Added utc_parse method for the lazy, it parses the date and converts it to utc\n\n\
24
- New in 1.2\n\
25
- Tomorrow and Yesterday methods\n\n\
26
- New in 1.1 \n\
27
- I skiped this version.... because I suck at versioning \n\n"
16
+ description: " Adds a few methods to the Time class, more significant:\n\n strtotime which returns a Time object based on a string.\n\n also methods add and substract that allow you to do some easy date math (doesn't take leap months/years into account)\n also tomorrow and yesterday methods witch are like Time.now +- 1 day\n\n =~ to see if two Time objects are \"close enough\"\n"
28
17
  email: awls99@gmail.com
29
18
  executables: []
30
19
 
@@ -62,6 +51,6 @@ rubyforge_project:
62
51
  rubygems_version: 1.3.5
63
52
  signing_key:
64
53
  specification_version: 3
65
- summary: A few helper functions for the Time class, useful on ruby 1.8
54
+ summary: A few helper functions for the Time class.
66
55
  test_files: []
67
56