1
|
1 |
|
module Resume |
2
|
|
|
# Ensures that the version of Ruby being used is recent enough |
3
|
|
|
# to generate the resume. |
4
|
|
|
# |
5
|
|
|
# @author Paul Fioravanti |
6
|
1 |
|
module RubyVersionChecker |
7
|
|
|
# Required Ruby version for resume to work |
8
|
1 |
|
REQUIRED_RUBY_VERSION = ENV.fetch("CUSTOM_RUBY_VERSION", "2.6.3").freeze |
9
|
1 |
|
private_constant :REQUIRED_RUBY_VERSION |
10
|
|
|
# Ruby version command |
11
|
1 |
|
RUBY_VERSION_COMMAND = "ruby -v".freeze |
12
|
1 |
|
private_constant :RUBY_VERSION_COMMAND |
13
|
|
|
# Ruby version output regex. |
14
|
|
|
# For example, this will extract `2.6.3` from a string like: |
15
|
|
|
# ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18] |
16
|
1 |
|
RUBY_VERSION_REGEX = /\Aruby ([\d\.][^p]+)/.freeze |
17
|
1 |
|
private_constant :RUBY_VERSION_REGEX |
18
|
|
|
|
19
|
1 |
|
module_function |
20
|
|
|
|
21
|
|
|
# Checks the Ruby version being used to generate the resume. |
22
|
|
|
# |
23
|
|
|
# @return [nil] |
24
|
|
|
# if rubygems is successfully required and the Ruby version is either |
25
|
|
|
# installed or not installed. |
26
|
|
|
# @note On the one-sheet resume, this check will only work for |
27
|
|
|
# >= Ruby 2.1 Earlier versions will throw a syntax error. |
28
|
1 |
|
def check_ruby_version |
29
|
|
|
# require "rubygems" only needed for ruby pre-1.9.0 |
30
|
|
|
# but it's safe for later versions (evaluates to false). |
31
|
4 |
|
require "rubygems" |
32
|
3 |
|
request_to_install_latest_ruby if old_ruby_version? |
33
|
|
|
rescue LoadError |
34
|
|
|
# NOTE: LoadError could occur if someone attempts to run |
35
|
|
|
# this with Ruby 1.8.7 and they don't have rubygems installed |
36
|
1 |
|
request_to_install_latest_ruby |
37
|
|
|
end |
38
|
|
|
|
39
|
1 |
|
def old_ruby_version? |
40
|
3 |
|
Gem::Version.new(RUBY_VERSION.dup) < |
41
|
|
|
Gem::Version.new(REQUIRED_RUBY_VERSION) |
42
|
|
|
end |
43
|
1 |
|
private_class_method :old_ruby_version? |
44
|
|
|
|
45
|
1 |
|
def request_to_install_latest_ruby |
46
|
3 |
|
puts "Please install Ruby version #{REQUIRED_RUBY_VERSION} "\ |
47
|
|
|
"or higher to generate resume." |
48
|
3 |
|
require "open3" |
49
|
2 |
|
puts "Your Ruby version is #{user_ruby_version}" |
50
|
|
|
rescue LoadError |
51
|
|
|
# NOTE: LoadError will likely occur if someone attempts to run |
52
|
|
|
# this with Ruby 1.8.7 and they don't have rubygems installed |
53
|
1 |
|
puts "Your Ruby version is likely far too old to generate the resume." |
54
|
|
|
ensure |
55
|
3 |
|
exit(1) |
56
|
|
|
end |
57
|
1 |
|
private_class_method :request_to_install_latest_ruby |
58
|
|
|
|
59
|
1 |
|
def user_ruby_version |
60
|
|
|
ruby_version = |
61
|
2 |
|
Open3.popen3(RUBY_VERSION_COMMAND) do |_stdin, stdout, _stderr, _wait| |
62
|
2 |
|
stdout.read |
63
|
|
|
end |
64
|
2 |
|
ruby_version.match(RUBY_VERSION_REGEX)[0] |
65
|
|
|
end |
66
|
1 |
|
private_class_method :user_ruby_version |
67
|
|
|
end |
68
|
|
|
end |
69
|
|
|
|