This repository has been archived by the owner on Apr 14, 2021. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 2k
/
ruby_version.rb
96 lines (86 loc) · 2.53 KB
/
ruby_version.rb
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
module Bundler
class RubyVersion
attr_reader :version, :engine, :engine_version
def initialize(version, engine, engine_version)
# The parameters to this method must satisfy the
# following constraints, which are verified in
# the DSL:
#
# * If an engine is specified, an engine version
# must also be specified
# * If an engine version is specified, an engine
# must also be specified
# * If the engine is "ruby", the engine version
# must not be specified, or the engine version
# specified must match the version.
@version = version
@engine = engine || "ruby"
# keep track of the engine specified by the user
@input_engine = engine
@engine_version = engine_version || version
end
def to_s
output = "ruby #{version}"
output << " (#{engine} #{engine_version})" unless engine == "ruby"
output
end
def ==(other)
version == other.version &&
engine == other.engine &&
engine_version == other.engine_version
end
# Returns a tuple of thsee things:
# [diff, this, other]
# The priority of attributes are
# 1. engine
# 2. ruby_version
# 3. engine_version
def diff(other)
if engine != other.engine && @input_engine
[ :engine, engine, other.engine ]
elsif version != other.version
[ :version, version, other.version ]
elsif engine_version != other.engine_version && @input_engine
[ :engine_version, engine_version, other.engine_version ]
else
nil
end
end
end
# A subclass of RubyVersion that implements version,
# engine and engine_version based upon the current
# information in the system. It can be used anywhere
# a RubyVersion object is expected, and can be
# compared with a RubyVersion object.
class SystemRubyVersion < RubyVersion
def initialize(*)
# override the default initialize, because
# we will implement version, engine and
# engine_version dynamically
end
def version
RUBY_VERSION
end
def engine
if defined?(RUBY_ENGINE)
RUBY_ENGINE
else
# not defined in ruby 1.8.7
"ruby"
end
end
def engine_version
case engine
when "ruby"
RUBY_VERSION
when "rbx"
Rubinius::VERSION
when "jruby"
JRUBY_VERSION
else
raise BundlerError, "That RUBY_ENGINE is not recognized"
nil
end
end
end
end