1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
require 'date'
require 'time'
module RubyVersion
VERSION = '1.0.1'
class << self
def to_s
RUBY_VERSION
end
alias inspect to_s
# comparable
def <=>(other)
value = case other
when Integer
RUBY_VERSION.to_i
when Float
RUBY_VERSION.to_f
when String
RUBY_VERSION
when Date, Time
other.class.parse(RUBY_RELEASE_DATE)
else
other = other.to_s
RUBY_VERSION
end
value <=> other
end
include Comparable
# chaining for dsl-like language
def is?(other = nil)
if other
RubyVersion == other
else
RubyVersion
end
end
alias is is?
# aliases
alias below <
alias below? <
alias at_most <=
alias at_most? <=
alias above >
alias above? >
alias at_least >=
alias at_least? >=
alias exactly ==
alias exactly? ==
def not(other)
self != other
end
alias not? not
alias between between?
# compare dates
def newer_than(other)
if other.is_a? Date or other.is_a? Time
RubyVersion > other
else
RUBY_RELEASE_DATE > other.to_s
end
end
alias newer_than? newer_than
def older_than(other)
if other.is_a? Date or other.is_a? Time
RubyVersion < other
else
RUBY_RELEASE_DATE < other.to_s
end
end
alias older_than? older_than
def released_today
RubyVersion.date == Date.today
end
alias released_today? released_today
# accessors
def major
RUBY_VERSION.to_i
end
alias main major
def minor
RUBY_VERSION.split('.')[1].to_i
end
alias mini minor
def tiny
RUBY_VERSION.split('.')[2].to_i
end
alias teeny tiny
def patchlevel
RUBY_PATCHLEVEL
end
def platform
RUBY_PLATFORM
end
def release_date
Date.parse RUBY_RELEASE_DATE
end
alias date release_date
def description
RUBY_DESCRIPTION
end
def revision
defined?(RUBY_REVISION) && RUBY_REVISION
end
end
end
# J-_-L
|