ruby-units 1.3.1 → 1.3.2.a
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/CHANGELOG.txt +8 -0
- data/Gemfile +4 -0
- data/README.md +3 -3
- data/RakeFile +36 -9
- data/VERSION +1 -1
- data/autotest/discover.rb +1 -0
- data/lib/ruby_units/array.rb +1 -1
- data/lib/ruby_units/date.rb +5 -5
- data/lib/ruby_units/math.rb +6 -6
- data/lib/ruby_units/string.rb +105 -97
- data/lib/ruby_units/string/extra.rb +132 -0
- data/lib/ruby_units/time.rb +6 -6
- data/lib/ruby_units/unit.rb +55 -57
- data/lib/ruby_units/unit_definitions.rb +9 -5
- data/ruby-units.gemspec +21 -8
- data/spec/ruby-units/string/extra_spec.rb +45 -0
- data/spec/ruby-units/string_spec.rb +2 -43
- data/spec/ruby-units/unit_spec.rb +88 -11
- data/spec/spec_helper.rb +2 -1
- data/test/test_ruby-units.rb +16 -51
- metadata +121 -55
data/CHANGELOG.txt
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
Change Log for Ruby-units
|
2
2
|
=========================
|
3
|
+
2011-10-17 1.3.2 * deprecate some string helper functions
|
4
|
+
* tighten up some time helper functions so they don't make as many assumptions
|
5
|
+
* time helpers no longer attempt to convert strings to time/date objects
|
6
|
+
011-10-09 * Farads are not a base unit
|
7
|
+
* CFM added to default units
|
8
|
+
* multi specs run against ruby-1.9.3
|
9
|
+
* internally change Unit#to to Unit#convert_to, which is the preferred form
|
10
|
+
|
3
11
|
2011-04-23 1.3.0.a * Some internal restructuring
|
4
12
|
* Implement specs for core behaviors
|
5
13
|
* fixed several bugs found by specs
|
data/Gemfile
CHANGED
@@ -5,4 +5,8 @@ group :development do
|
|
5
5
|
gem 'rcov', :platforms => :mri_18
|
6
6
|
gem 'jeweler'
|
7
7
|
gem 'rspec', '~>2.5'
|
8
|
+
gem 'autotest', :platforms => [:mri_18, :mri_19]
|
9
|
+
gem 'autotest-growl', :platforms => [:mri_18, :mri_19]
|
10
|
+
gem 'autotest-fsevent', :platforms => [:mri_18, :mri_19]
|
8
11
|
end
|
12
|
+
|
data/README.md
CHANGED
@@ -73,7 +73,7 @@ Units can be converted to other units in a couple of ways.
|
|
73
73
|
unit1 === unit2 # true if units and quantity are the same, even if 'equivalent' by <=>
|
74
74
|
unit.to('ft') # convert
|
75
75
|
unit1 + unit2 >> "ft" # converts result of math to 'ft'
|
76
|
-
(unit1 + unit2).
|
76
|
+
(unit1 + unit2).convert_to('ft') # converts result to 'ft'
|
77
77
|
|
78
78
|
Any object that defines a 'to_unit' method will be automatically coerced to a unit during calculations.
|
79
79
|
|
@@ -81,7 +81,7 @@ Any object that defines a 'to_unit' method will be automatically coerced to a un
|
|
81
81
|
Units will display themselves nicely based on the preferred abbreviation for the units and prefixes.
|
82
82
|
Since Unit implements a Unit#to_s, all that is needed in most cases is:
|
83
83
|
|
84
|
-
"#{Unit
|
84
|
+
"#{Unit('1 mm')}" #=> "1 mm"
|
85
85
|
|
86
86
|
The to_s also accepts some options.
|
87
87
|
|
@@ -101,7 +101,7 @@ Several helpers have also been defined.
|
|
101
101
|
Note: If you include the 'Chronic' gem, you can specify times in natural
|
102
102
|
language.
|
103
103
|
|
104
|
-
'min'.since('9/18/06 3:00pm')
|
104
|
+
Unit('min').since(DateTime.parse('9/18/06 3:00pm'))
|
105
105
|
'min'.before('9/18/08 3:00pm')
|
106
106
|
'days'.until('1/1/07')
|
107
107
|
'5 min'.from(Time.now)
|
data/RakeFile
CHANGED
@@ -13,6 +13,27 @@ begin
|
|
13
13
|
gem.email = ["kevin.olbrich+ruby_units@gmail.com"]
|
14
14
|
gem.homepage = "https://github.com/olbrich/ruby-units"
|
15
15
|
gem.files.exclude(".*")
|
16
|
+
gem.post_install_message = <<-EOS
|
17
|
+
====================
|
18
|
+
Deprecation Warning
|
19
|
+
====================
|
20
|
+
|
21
|
+
Several convenience methods that ruby-units added to the string class have
|
22
|
+
been deprecated in this release. These methods include String#to, String#from, String#ago, String#before and others.
|
23
|
+
If your code relies on these functions, they can be added back by adding this line to your code.
|
24
|
+
|
25
|
+
require 'ruby-units/string/extras'
|
26
|
+
# note that these methods do not play well with Rails, which is one of the reasons they are being removed.
|
27
|
+
|
28
|
+
The extra functions mostly work the same, but will no longer properly handle cases when they are called with strings..
|
29
|
+
|
30
|
+
'min'.from("4-1-2011") # => Exception
|
31
|
+
|
32
|
+
Pass in a Date, Time, or DateTime object to get the expected result.
|
33
|
+
|
34
|
+
They will probably go away completely in an upcoming release, so it would be a good idea to refactor your code
|
35
|
+
to avoid using them. They will also throw deprecation warnings when they are used.
|
36
|
+
EOS
|
16
37
|
end
|
17
38
|
Jeweler::GemcutterTasks.new
|
18
39
|
rescue LoadError
|
@@ -33,7 +54,11 @@ begin
|
|
33
54
|
require 'rspec/core/rake_task'
|
34
55
|
|
35
56
|
desc "Run specs"
|
36
|
-
RSpec::Core::RakeTask.new
|
57
|
+
RSpec::Core::RakeTask.new do |spec|
|
58
|
+
puts
|
59
|
+
puts %x{rvm current}
|
60
|
+
puts
|
61
|
+
end
|
37
62
|
|
38
63
|
desc "Run all specs with rcov"
|
39
64
|
RSpec::Core::RakeTask.new("spec:rcov") do |t|
|
@@ -57,10 +82,11 @@ task :multitest do
|
|
57
82
|
rubies = %w{
|
58
83
|
ruby-1.8.7@ruby-units
|
59
84
|
ruby-1.8.7@ruby-units-with-chronic
|
60
|
-
ruby-1.9.2
|
61
|
-
ruby-1.9.2
|
62
|
-
|
63
|
-
|
85
|
+
ruby-1.9.2@ruby-units
|
86
|
+
ruby-1.9.2@ruby-units-with-chronic
|
87
|
+
ruby-1.9.3@ruby-units
|
88
|
+
rbx@ruby-units
|
89
|
+
jruby-1.6.4@ruby-units
|
64
90
|
}
|
65
91
|
exec "rvm #{rubies.join(',')} tests"
|
66
92
|
end
|
@@ -70,10 +96,11 @@ task :multispec do
|
|
70
96
|
rubies = %w{
|
71
97
|
ruby-1.8.7@ruby-units
|
72
98
|
ruby-1.8.7@ruby-units-with-chronic
|
73
|
-
ruby-1.9.2
|
74
|
-
ruby-1.9.2
|
75
|
-
|
76
|
-
|
99
|
+
ruby-1.9.2@ruby-units
|
100
|
+
ruby-1.9.2@ruby-units-with-chronic
|
101
|
+
ruby-1.9.3@ruby-units
|
102
|
+
rbx@ruby-units
|
103
|
+
jruby-1.6.4@ruby-units
|
77
104
|
}
|
78
105
|
exec "rvm #{rubies.join(',')} specs"
|
79
106
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.3.
|
1
|
+
1.3.2.a
|
@@ -0,0 +1 @@
|
|
1
|
+
Autotest.add_discovery { "rspec2" }
|
data/lib/ruby_units/array.rb
CHANGED
data/lib/ruby_units/date.rb
CHANGED
@@ -8,8 +8,8 @@ class Date
|
|
8
8
|
def +(unit)
|
9
9
|
case unit
|
10
10
|
when Unit
|
11
|
-
unit = unit.
|
12
|
-
unit_date_add(unit.
|
11
|
+
unit = unit.convert_to('d').round if ['y', 'decade', 'century'].include? unit.units
|
12
|
+
unit_date_add(unit.convert_to('day').scalar)
|
13
13
|
else
|
14
14
|
unit_date_add(unit)
|
15
15
|
end
|
@@ -20,15 +20,15 @@ class Date
|
|
20
20
|
def -(unit)
|
21
21
|
case unit
|
22
22
|
when Unit
|
23
|
-
unit = unit.
|
24
|
-
unit_date_sub(unit.
|
23
|
+
unit = unit.convert_to('d').round if ['y', 'decade', 'century'].include? unit.units
|
24
|
+
unit_date_sub(unit.convert_to('day').scalar)
|
25
25
|
else
|
26
26
|
unit_date_sub(unit)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
def to_unit(other = nil)
|
31
|
-
other ? Unit.new(self).
|
31
|
+
other ? Unit.new(self).convert_to(other) : Unit.new(self)
|
32
32
|
end
|
33
33
|
alias :unit :to_unit
|
34
34
|
|
data/lib/ruby_units/math.rb
CHANGED
@@ -32,42 +32,42 @@ module Math
|
|
32
32
|
|
33
33
|
alias :unit_sin :sin
|
34
34
|
def sin(n)
|
35
|
-
Unit === n ? unit_sin(n.
|
35
|
+
Unit === n ? unit_sin(n.convert_to('radian').scalar) : unit_sin(n)
|
36
36
|
end
|
37
37
|
module_function :unit_sin
|
38
38
|
module_function :sin
|
39
39
|
|
40
40
|
alias :unit_cos :cos
|
41
41
|
def cos(n)
|
42
|
-
Unit === n ? unit_cos(n.
|
42
|
+
Unit === n ? unit_cos(n.convert_to('radian').scalar) : unit_cos(n)
|
43
43
|
end
|
44
44
|
module_function :unit_cos
|
45
45
|
module_function :cos
|
46
46
|
|
47
47
|
alias :unit_sinh :sinh
|
48
48
|
def sinh(n)
|
49
|
-
Unit === n ? unit_sinh(n.
|
49
|
+
Unit === n ? unit_sinh(n.convert_to('radian').scalar) : unit_sinh(n)
|
50
50
|
end
|
51
51
|
module_function :unit_sinh
|
52
52
|
module_function :sinh
|
53
53
|
|
54
54
|
alias :unit_cosh :cosh
|
55
55
|
def cosh(n)
|
56
|
-
Unit === n ? unit_cosh(n.
|
56
|
+
Unit === n ? unit_cosh(n.convert_to('radian').scalar) : unit_cosh(n)
|
57
57
|
end
|
58
58
|
module_function :unit_cosh
|
59
59
|
module_function :cosh
|
60
60
|
|
61
61
|
alias :unit_tan :tan
|
62
62
|
def tan(n)
|
63
|
-
Unit === n ? unit_tan(n.
|
63
|
+
Unit === n ? unit_tan(n.convert_to('radian').scalar) : unit_tan(n)
|
64
64
|
end
|
65
65
|
module_function :tan
|
66
66
|
module_function :unit_tan
|
67
67
|
|
68
68
|
alias :unit_tanh :tanh
|
69
69
|
def tanh(n)
|
70
|
-
Unit === n ? unit_tanh(n.
|
70
|
+
Unit === n ? unit_tanh(n.convert_to('radian').scalar) : unit_tanh(n)
|
71
71
|
end
|
72
72
|
module_function :unit_tanh
|
73
73
|
module_function :tanh
|
data/lib/ruby_units/string.rb
CHANGED
@@ -2,7 +2,7 @@ require 'time'
|
|
2
2
|
# make a string into a unit
|
3
3
|
class String
|
4
4
|
def to_unit(other = nil)
|
5
|
-
other ? Unit.new(self).
|
5
|
+
other ? Unit.new(self).convert_to(other) : Unit.new(self)
|
6
6
|
end
|
7
7
|
alias :unit :to_unit
|
8
8
|
alias :u :to_unit
|
@@ -24,103 +24,111 @@ class String
|
|
24
24
|
end
|
25
25
|
|
26
26
|
#needed for compatibility with Rails, which defines a String.from method
|
27
|
-
if self.public_instance_methods.include? 'from'
|
28
|
-
|
29
|
-
end
|
27
|
+
# if self.public_instance_methods.include? 'from'
|
28
|
+
# alias :old_from :from
|
29
|
+
# end
|
30
30
|
|
31
|
-
# "5 min".from("now")
|
32
|
-
def from(time_point = ::Time.now)
|
33
|
-
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
alias :after :from
|
38
|
-
|
39
|
-
def from_now
|
40
|
-
self.from('now')
|
41
|
-
end
|
42
|
-
|
43
|
-
# "5 min".ago
|
44
|
-
def ago
|
45
|
-
self.unit.ago
|
46
|
-
end
|
47
|
-
|
48
|
-
def before(time_point = ::Time.now)
|
49
|
-
self.unit.before(time_point)
|
50
|
-
end
|
51
|
-
|
52
|
-
def before_now
|
53
|
-
self.before('now')
|
54
|
-
end
|
55
|
-
|
56
|
-
def since(time_point = ::Time.now)
|
57
|
-
self.unit.since(time_point)
|
58
|
-
end
|
59
|
-
|
60
|
-
def until(time_point = ::Time.now)
|
61
|
-
self.unit.until(time_point)
|
62
|
-
end
|
63
|
-
|
64
|
-
def to(other)
|
65
|
-
self.unit.to(other)
|
66
|
-
end
|
67
|
-
|
68
|
-
def time(options = {})
|
69
|
-
self.to_time(options) rescue self.to_datetime(options)
|
70
|
-
end
|
71
|
-
|
72
|
-
def to_time(options = {})
|
73
|
-
begin
|
74
|
-
#raises exception when Chronic not defined or when it returns a nil (i.e., can't parse the input)
|
75
|
-
r = Chronic.parse(self,options)
|
76
|
-
raise(ArgumentError, 'Invalid Time String') unless r
|
77
|
-
return r
|
78
|
-
rescue
|
79
|
-
case
|
80
|
-
when self == "now"
|
81
|
-
Time.now
|
82
|
-
when Time.respond_to?(:parse)
|
83
|
-
Time.parse(self)
|
84
|
-
else
|
85
|
-
Time.local(*ParseDate.parsedate(self))
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def to_datetime(options = {})
|
91
|
-
begin
|
92
|
-
# raises an exception if Chronic.parse = nil or if Chronic not defined
|
93
|
-
r = Chronic.parse(self,options).send(:to_datetime)
|
94
|
-
rescue Exception => e
|
95
|
-
r = case
|
96
|
-
when self.to_s == "now"
|
97
|
-
DateTime.now
|
98
|
-
else
|
99
|
-
DateTime.parse(self)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
raise RuntimeError, "Invalid Time String (#{self.to_s})" if r == DateTime.new
|
103
|
-
return r
|
104
|
-
end
|
105
|
-
|
106
|
-
def to_date(options={})
|
107
|
-
begin
|
108
|
-
r = Chronic.parse(self,options).to_date
|
109
|
-
rescue
|
110
|
-
r = case
|
111
|
-
when self == "today"
|
112
|
-
Date.today
|
113
|
-
when RUBY_VERSION < "1.9"
|
114
|
-
Date.civil(*ParseDate.parsedate(self)[0..5].compact)
|
115
|
-
else
|
116
|
-
Date.parse(self)
|
117
|
-
end
|
118
|
-
end
|
119
|
-
raise RuntimeError, 'Invalid Date String' if r == Date.new
|
120
|
-
return r
|
121
|
-
end
|
31
|
+
# # "5 min".from("now")
|
32
|
+
# def from(time_point = ::Time.now)
|
33
|
+
# return old_from(time_point) if self.respond_to?(:old_from) && time_point.instance_of?(Integer)
|
34
|
+
# self.unit.from(time_point)
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# alias :after :from
|
122
38
|
|
123
|
-
def
|
124
|
-
|
39
|
+
# def from_now
|
40
|
+
# self.from('now')
|
41
|
+
# end
|
42
|
+
#
|
43
|
+
# # "5 min".ago
|
44
|
+
# def ago
|
45
|
+
# self.unit.ago
|
46
|
+
# end
|
47
|
+
#
|
48
|
+
# def before(time_point = ::Time.now)
|
49
|
+
# self.unit.before(time_point)
|
50
|
+
# end
|
51
|
+
#
|
52
|
+
# def before_now
|
53
|
+
# self.before('now')
|
54
|
+
# end
|
55
|
+
#
|
56
|
+
# def since(time_point = ::Time.now)
|
57
|
+
# self.unit.since(time_point)
|
58
|
+
# end
|
59
|
+
#
|
60
|
+
# def until(time_point = ::Time.now)
|
61
|
+
# self.unit.until(time_point)
|
62
|
+
# end
|
63
|
+
#
|
64
|
+
def convert_to(other)
|
65
|
+
self.unit.convert_to(other)
|
125
66
|
end
|
67
|
+
#
|
68
|
+
# unless String.instance_methods.include?(:to)
|
69
|
+
# def to(other)
|
70
|
+
# warn "string.to is deprecated, use string.convert_to if you must, but the best would be Unit('unit').convert_to('target unit')"
|
71
|
+
# convert_to(other)
|
72
|
+
# end
|
73
|
+
# end
|
74
|
+
#
|
75
|
+
# def time(options = {})
|
76
|
+
# self.to_time(options) rescue self.to_datetime(options)
|
77
|
+
# end
|
78
|
+
#
|
79
|
+
# def to_time(options = {})
|
80
|
+
# begin
|
81
|
+
# #raises exception when Chronic not defined or when it returns a nil (i.e., can't parse the input)
|
82
|
+
# r = Chronic.parse(self,options)
|
83
|
+
# raise(ArgumentError, 'Invalid Time String') unless r
|
84
|
+
# return r
|
85
|
+
# rescue Exception => e
|
86
|
+
# puts e.inspect
|
87
|
+
# case
|
88
|
+
# when self == "now"
|
89
|
+
# Time.now
|
90
|
+
# when Time.respond_to?(:parse)
|
91
|
+
# Time.parse(self)
|
92
|
+
# else
|
93
|
+
# Time.local(*ParseDate.parsedate(self))
|
94
|
+
# end
|
95
|
+
# end
|
96
|
+
# end
|
97
|
+
#
|
98
|
+
# def to_datetime(options = {})
|
99
|
+
# begin
|
100
|
+
# # raises an exception if Chronic.parse = nil or if Chronic not defined
|
101
|
+
# r = Chronic.parse(self,options).send(:to_datetime)
|
102
|
+
# rescue NameError => e
|
103
|
+
# r = case
|
104
|
+
# when self.to_s == "now"
|
105
|
+
# DateTime.now
|
106
|
+
# else
|
107
|
+
# DateTime.parse(self)
|
108
|
+
# end
|
109
|
+
# end
|
110
|
+
# raise RuntimeError, "Invalid Time String (#{self.to_s})" if r == DateTime.new
|
111
|
+
# return r
|
112
|
+
# end
|
113
|
+
#
|
114
|
+
# def to_date(options={})
|
115
|
+
# begin
|
116
|
+
# r = Chronic.parse(self,options).to_date
|
117
|
+
# rescue
|
118
|
+
# r = case
|
119
|
+
# when self == "today"
|
120
|
+
# Date.today
|
121
|
+
# when RUBY_VERSION < "1.9"
|
122
|
+
# Date.civil(*ParseDate.parsedate(self)[0..5].compact)
|
123
|
+
# else
|
124
|
+
# Date.parse(self)
|
125
|
+
# end
|
126
|
+
# end
|
127
|
+
# raise RuntimeError, 'Invalid Date String' if r == Date.new
|
128
|
+
# return r
|
129
|
+
# end
|
130
|
+
#
|
131
|
+
# def datetime(options = {})
|
132
|
+
# self.to_datetime(options) rescue self.to_time(options)
|
133
|
+
# end
|
126
134
|
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
#
|
2
|
+
# String Extras
|
3
|
+
#
|
4
|
+
# These are some extra string syntax sugar methods. In some cases they conflict with methods defined in other
|
5
|
+
# gems (notably with Rails). I could make them more compatilble, but honestly they should not be here in the first place.
|
6
|
+
#
|
7
|
+
# in most cases it is better to do something like
|
8
|
+
#
|
9
|
+
# Unit("1 m").convert_to("ft")
|
10
|
+
#
|
11
|
+
# instead of
|
12
|
+
#
|
13
|
+
# "1 m".convert_to("ft")
|
14
|
+
#
|
15
|
+
# to use these methods:
|
16
|
+
# require 'ruby-units/string/extra'
|
17
|
+
|
18
|
+
require 'time'
|
19
|
+
class String
|
20
|
+
|
21
|
+
#needed for compatibility with Rails, which defines a String.from method
|
22
|
+
if self.public_instance_methods.include? 'from'
|
23
|
+
alias :old_from :from
|
24
|
+
end
|
25
|
+
|
26
|
+
# "5 min".from("now")
|
27
|
+
def from(time_point = ::Time.now)
|
28
|
+
return old_from(time_point) if self.respond_to?(:old_from) && time_point.instance_of?(Integer)
|
29
|
+
warn Kernel.caller.first + " called ruby-units/string#from, which is deprecated. Use Unit(string).from(string) instead"
|
30
|
+
self.unit.from(time_point)
|
31
|
+
end
|
32
|
+
|
33
|
+
alias :after :from
|
34
|
+
|
35
|
+
def from_now
|
36
|
+
warn Kernel.caller.first + " called ruby-units/string#from_now, which is deprecated. Use Unit(string).from(Time.now) instead"
|
37
|
+
self.from(Time.now)
|
38
|
+
end
|
39
|
+
|
40
|
+
# "5 min".ago
|
41
|
+
def ago
|
42
|
+
warn Kernel.caller.first + " called ruby-units/string#ago, which is deprecated. Use Unit(string).ago instead"
|
43
|
+
self.unit.ago
|
44
|
+
end
|
45
|
+
|
46
|
+
def before(time_point = ::Time.now)
|
47
|
+
warn Kernel.caller.first + " called ruby-units/string#before, which is deprecated. Use Unit(string).before(Time.now) instead"
|
48
|
+
self.unit.before(time_point)
|
49
|
+
end
|
50
|
+
|
51
|
+
def before_now
|
52
|
+
warn Kernel.caller.first + " called ruby-units/string#before_now, which is deprecated. Use Unit(string).before(Time.now) instead"
|
53
|
+
self.before(Time.now)
|
54
|
+
end
|
55
|
+
|
56
|
+
def since(time_point = ::Time.now)
|
57
|
+
warn Kernel.caller.first + " called ruby-units/string#since, which is deprecated. Use Unit(string).since(Time.now) instead"
|
58
|
+
self.unit.since(time_point)
|
59
|
+
end
|
60
|
+
|
61
|
+
def until(time_point = ::Time.now)
|
62
|
+
warn Kernel.caller.first + " called ruby-units/string#until, which is deprecated. Use Unit(string).until(Time.now) instead"
|
63
|
+
self.unit.until(time_point)
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
unless String.instance_methods.include?(:to)
|
68
|
+
def to(other)
|
69
|
+
warn "string.to is deprecated, use string.convert_to if you must, but the best would be Unit('unit').convert_to('target unit')"
|
70
|
+
convert_to(other)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def time(options = {})
|
75
|
+
self.to_time(options) rescue self.to_datetime(options)
|
76
|
+
end
|
77
|
+
|
78
|
+
def to_time(options = {})
|
79
|
+
begin
|
80
|
+
#raises exception when Chronic not defined or when it returns a nil (i.e., can't parse the input)
|
81
|
+
r = Chronic.parse(self,options)
|
82
|
+
raise(ArgumentError, 'Invalid Time String') unless r
|
83
|
+
return r
|
84
|
+
rescue
|
85
|
+
case
|
86
|
+
when self == "now"
|
87
|
+
Time.now
|
88
|
+
when Time.respond_to?(:parse)
|
89
|
+
Time.parse(self)
|
90
|
+
else
|
91
|
+
Time.local(*ParseDate.parsedate(self))
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def to_datetime(options = {})
|
97
|
+
begin
|
98
|
+
# raises an exception if Chronic.parse = nil or if Chronic not defined
|
99
|
+
r = Chronic.parse(self,options).send(:to_datetime)
|
100
|
+
rescue NameError => e
|
101
|
+
r = case
|
102
|
+
when self.to_s == "now"
|
103
|
+
DateTime.now
|
104
|
+
else
|
105
|
+
DateTime.parse(self)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
raise RuntimeError, "Invalid Time String (#{self.to_s})" if r == DateTime.new
|
109
|
+
return r
|
110
|
+
end
|
111
|
+
|
112
|
+
def to_date(options={})
|
113
|
+
begin
|
114
|
+
r = Chronic.parse(self,options).to_date
|
115
|
+
rescue
|
116
|
+
r = case
|
117
|
+
when self == "today"
|
118
|
+
Date.today
|
119
|
+
when RUBY_VERSION < "1.9"
|
120
|
+
Date.civil(*ParseDate.parsedate(self)[0..5].compact)
|
121
|
+
else
|
122
|
+
Date.parse(self)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
raise RuntimeError, 'Invalid Date String' if r == Date.new
|
126
|
+
return r
|
127
|
+
end
|
128
|
+
|
129
|
+
def datetime(options = {})
|
130
|
+
self.to_datetime(options) rescue self.to_time(options)
|
131
|
+
end
|
132
|
+
end
|