infinite_time 0.0.1 → 0.0.2

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: ed911579f92e11434eb1dc9571f440039f99acb9
4
- data.tar.gz: d4ab5b1acba42309f0d0203cbb3361bda6983b06
3
+ metadata.gz: 05cc42612c723a43d3c142bb92b8c3d0e07c26ff
4
+ data.tar.gz: 5006b220408d6ef2486e7aac421fc0218f57ce20
5
5
  SHA512:
6
- metadata.gz: e91c24535500d61408012dd8cd4e1347398b0652a9042d2ecf10f97a666534c2a50449a246caad0b1c095c7274396f9ae53d95ac425d55e29abf9db03aab0bbf
7
- data.tar.gz: 287f71c2e8bfc8a95b7168ee77ab6ee103b1812f193841261f9373681d6b7bfedd17dd66e649cbe7ee207074d9d41405ac78f117246ddcd9c4c7ee4625dae65c
6
+ metadata.gz: 029d067636b9c74ae1289746e1ce1edd25aa7bc0cc991b8d35cf2c4ba125b23e53e54c0636a8ffece1efb70adde1a1eac9be92a0441d6d282ad5089c5f232a26
7
+ data.tar.gz: ae722f44230bb2f5593d2a6b527cfbd67a72bebe3da15009a6529be5ffb9ff476317debb49ec7d660374bd063b9e7f3ab403c1b9d0a97dbf69db437b1e56821d
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # InfiniteTime
2
2
 
3
3
  [![Build Status](https://secure.travis-ci.org/amarshall/infinite_time.png?branch=master)](http://travis-ci.org/amarshall/infinite_time)
4
+ [![Code Climate rating](https://codeclimate.com/github/amarshall/infinite_time.png)](https://codeclimate.com/github/amarshall/infinite_time)
4
5
 
5
6
  Provides a representation of a (positively or negatively) infinite time. This allows easier comparison with times when, for instance, you have an end date for an object but it is not yet known. Using `nil` would cause TypeErrors everywhere and you must then guard against that, this avoids that issue.
6
7
 
@@ -21,6 +22,13 @@ negative = InfiniteTime.new :-
21
22
  positive == InfiniteTime.new #=> true
22
23
  ```
23
24
 
25
+ `Time` has also been extended to be comparable with an `InfiniteTime`, as well as provides the `infinite?` method:
26
+
27
+ ```ruby
28
+ Time.new.infinite? #=> false
29
+ InfiniteTime.new.infinite? #=> true
30
+ ```
31
+
24
32
  Feel free to read the specs for more details.
25
33
 
26
34
  ## Contributing
@@ -1,7 +1,10 @@
1
1
  require 'infinite_time/version'
2
2
  require 'infinite_time/core_ext'
3
+ require 'infinite_time/time_compatability'
3
4
 
4
5
  class InfiniteTime < Time
6
+ include TimeCompatability
7
+
5
8
  class << self
6
9
  undef at
7
10
  undef gm
@@ -47,6 +50,10 @@ class InfiniteTime < Time
47
50
  self.class.hash ^ @sign.hash
48
51
  end
49
52
 
53
+ def to_f
54
+ (positive?) ? Float::INFINITY : -Float::INFINITY
55
+ end
56
+
50
57
  def to_i; raise TypeError, 'InfiniteTime has no Integer representation'; end
51
58
  def to_r; raise TypeError, 'InfiniteTime has no Rational representation'; end
52
59
 
@@ -59,56 +66,5 @@ class InfiniteTime < Time
59
66
 
60
67
  def strftime _; to_s; end
61
68
 
62
- private
63
-
64
- def signed_float
65
- (positive?) ? Float::INFINITY : -Float::INFINITY
66
- end
67
-
68
69
  class InvalidSign < StandardError; end
69
-
70
- module TimeCompatability
71
- def self.define_method name, arity = 0, &block
72
- super name do |*args|
73
- unless arity === args.length
74
- raise ArgumentError, "wrong number of arguments (#{args.length} for #{arity})"
75
- end
76
- instance_exec(*args, &block)
77
- end
78
- end
79
-
80
- def self.nil_method name, arity = 0
81
- define_method(name, arity) { nil }
82
- end
83
- def self.nil_methods names
84
- names.each { |name| nil_method name }
85
- end
86
-
87
- def self.signed_method name, arity = 0
88
- define_method(name, arity) { signed_float }
89
- end
90
- def self.signed_methods names
91
- names.each { |name| signed_method name }
92
- end
93
-
94
- def self.self_method name, arity = 0
95
- define_method(name, arity) { self }
96
- end
97
- def self.self_methods names
98
- names.each { |name| self_method name }
99
- end
100
-
101
- signed_methods %i[year month day yday wday hour minute second subsec nsec usec]
102
- nil_methods %i[monday? tuesday? wednesday? thursday? friday? saturday? sunday?]
103
- nil_methods %i[dst? isdst gmt? gmt_offset gmtoff utc? utc_offset zone]
104
- self_method :round, 0..1
105
- self_method :succ
106
- alias_method :mday, :day
107
- alias_method :mon, :month
108
- alias_method :sec, :second
109
- alias_method :tv_nsec, :nsec
110
- alias_method :tv_usec, :usec
111
- end
112
- private_constant :TimeCompatability
113
- include TimeCompatability
114
70
  end
@@ -0,0 +1,45 @@
1
+ class InfiniteTime < Time
2
+ module TimeCompatability
3
+ def self.define_method name, arity = 0, &block
4
+ super name do |*args|
5
+ unless arity === args.length
6
+ raise ArgumentError, "wrong number of arguments (#{args.length} for #{arity})"
7
+ end
8
+ instance_exec(*args, &block)
9
+ end
10
+ end
11
+
12
+ def self.nil_method name, arity = 0
13
+ define_method(name, arity) { nil }
14
+ end
15
+ def self.nil_methods names
16
+ names.each { |name| nil_method name }
17
+ end
18
+
19
+ def self.signed_method name, arity = 0
20
+ define_method(name, arity) { to_f }
21
+ end
22
+ def self.signed_methods names
23
+ names.each { |name| signed_method name }
24
+ end
25
+
26
+ def self.self_method name, arity = 0
27
+ define_method(name, arity) { self }
28
+ end
29
+ def self.self_methods names
30
+ names.each { |name| self_method name }
31
+ end
32
+
33
+ signed_methods %i[year month day yday wday hour minute second subsec nsec usec]
34
+ nil_methods %i[monday? tuesday? wednesday? thursday? friday? saturday? sunday?]
35
+ nil_methods %i[dst? isdst gmt? gmt_offset gmtoff utc? utc_offset zone]
36
+ self_method :round, 0..1
37
+ self_method :succ
38
+ alias_method :mday, :day
39
+ alias_method :mon, :month
40
+ alias_method :sec, :second
41
+ alias_method :tv_nsec, :nsec
42
+ alias_method :tv_usec, :usec
43
+ end
44
+ private_constant :TimeCompatability
45
+ end
@@ -1,3 +1,3 @@
1
1
  class InfiniteTime < Time
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
@@ -5,6 +5,10 @@ describe InfiniteTime do
5
5
  InfiniteTime.new.is_a?(Time).should == true
6
6
  end
7
7
 
8
+ it "is infinite" do
9
+ InfiniteTime.new.infinite?.should == true
10
+ end
11
+
8
12
  it "is positively infinite by default" do
9
13
  itime = InfiniteTime.new
10
14
  itime.positive?.should == true
@@ -110,7 +114,7 @@ describe InfiniteTime do
110
114
  negative.month.should == -Float::INFINITY
111
115
  negative.mon.should == -Float::INFINITY
112
116
  negative.day.should == -Float::INFINITY
113
- negative.yday.should == -Float::INFINITY
117
+ negative.yday.should == -Float::INFINITY
114
118
  negative.mday.should == -Float::INFINITY
115
119
  negative.wday.should == -Float::INFINITY
116
120
  negative.hour.should == -Float::INFINITY
@@ -124,6 +128,14 @@ describe InfiniteTime do
124
128
  negative.tv_usec.should == -Float::INFINITY
125
129
  end
126
130
 
131
+ it "returns the appropriate infinity for to_f" do
132
+ positive = InfiniteTime.new :+
133
+ negative = InfiniteTime.new :-
134
+
135
+ positive.to_f.should == Float::INFINITY
136
+ negative.to_f.should == -Float::INFINITY
137
+ end
138
+
127
139
  it "returns a TypeError for impossible numeric conversions" do
128
140
  itime = InfiniteTime.new
129
141
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: infinite_time
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Marshall
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-15 00:00:00.000000000 Z
11
+ date: 2013-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -68,6 +68,7 @@ files:
68
68
  - infinite_time.gemspec
69
69
  - lib/infinite_time.rb
70
70
  - lib/infinite_time/core_ext.rb
71
+ - lib/infinite_time/time_compatability.rb
71
72
  - lib/infinite_time/time_extension.rb
72
73
  - lib/infinite_time/version.rb
73
74
  - spec/infinite_time/core_ext_spec.rb