ranges 0.1.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.
data/README ADDED
@@ -0,0 +1,8 @@
1
+ Just a simple class I wrote for time ranges. Allows asking questions like:
2
+
3
+ range_1.overlaps_with?(range_2)
4
+ range_1.disjoint_to?(range_2)
5
+ range_1.wraps?(range_2)
6
+ range_1.within?(range_2)
7
+
8
+ check out the tests for more information.
@@ -0,0 +1,6 @@
1
+
2
+ module DateExtensions
3
+ def within?(range)
4
+ range.start_date <= self && range.end_date >= self
5
+ end
6
+ end
@@ -0,0 +1,12 @@
1
+ require_relative 'time_range.rb'
2
+ require_relative 'date_extensions.rb'
3
+ require_relative 'time_extensions.rb'
4
+
5
+ class Date
6
+ include DateExtensions
7
+ end
8
+
9
+ class Time
10
+ include TimeExtensions
11
+ end
12
+
@@ -0,0 +1,5 @@
1
+ module TimeExtensions
2
+ def within?(range)
3
+ range.start_time <= self && range.end_time >= self
4
+ end
5
+ end
@@ -0,0 +1,72 @@
1
+ require 'date'
2
+
3
+ class TimeRange
4
+ TIME_REQUIRED = "Parameters must be time objects"
5
+ START_BEFORE_END = "Start time must come before end time"
6
+ attr_reader :start_time, :end_time
7
+
8
+ def initialize(start_time, end_time)
9
+ unless start_time.is_a?(Time) && end_time.is_a?(Time)
10
+ raise ArgumentError.new(TIME_REQUIRED)
11
+ end
12
+ raise ArgumentError.new(START_BEFORE_END) unless start_time < end_time
13
+ @start_time = start_time
14
+ @end_time = end_time
15
+ end
16
+
17
+ def start_date
18
+ start_time.to_date
19
+ end
20
+
21
+ def end_date
22
+ end_time.to_date
23
+ end
24
+
25
+ def overlaps_with?(range)
26
+ range.start_time < end_time && range.end_time > start_time
27
+ end
28
+
29
+ def within?(range)
30
+ range.start_time < start_time && range.end_time > end_time
31
+ end
32
+
33
+ def wraps?(range)
34
+ range.within?(self)
35
+ end
36
+
37
+ def disjoint_to?(range)
38
+ !self.overlaps_with?(range)
39
+ end
40
+
41
+ def starts_before?(range)
42
+ start_time < range.start_time
43
+ end
44
+
45
+ def starts_after?(range)
46
+ start_time > range.start_time
47
+ end
48
+
49
+ def ends_before?(range)
50
+ end_time < range.end_time
51
+ end
52
+
53
+ def ends_after?(range)
54
+ end_time > range.end_time
55
+ end
56
+
57
+ def length_in_seconds
58
+ end_time.to_i - start_time.to_i
59
+ end
60
+
61
+ def length_in_minutes
62
+ length_in_seconds / 60.0
63
+ end
64
+
65
+ def length_in_hours
66
+ length_in_seconds / 3600.0
67
+ end
68
+
69
+ def longer_than?(range)
70
+ length_in_seconds > range.length_in_seconds
71
+ end
72
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ranges
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Peter Zimbelman
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-09-05 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: Ranges is a gem which supplies a time/date range class and other functionality based around these ranges.
22
+ email: pzimbelman@gmail.com
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - lib/date_extensions.rb
31
+ - lib/ranges.rb
32
+ - lib/time_extensions.rb
33
+ - lib/time_range.rb
34
+ - README
35
+ has_rdoc: true
36
+ homepage: http://github.com/softwarewithfriends/ranges
37
+ licenses: []
38
+
39
+ post_install_message:
40
+ rdoc_options: []
41
+
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ segments:
50
+ - 0
51
+ version: "0"
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ segments:
58
+ - 1
59
+ - 3
60
+ - 6
61
+ version: 1.3.6
62
+ requirements: []
63
+
64
+ rubyforge_project:
65
+ rubygems_version: 1.3.7
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: "Ranges: A gem for time and date ranges."
69
+ test_files: []
70
+