Method: Bundler::RubyDsl#normalize_ruby_file

Defined in:
lib/bundler/ruby_dsl.rb

#normalize_ruby_file(filename) ⇒ Object

Support the various file formats found in .ruby-version files.

3.2.2
ruby-3.2.2

Also supports .tool-versions files for asdf. Lines not starting with “ruby” are ignored.

ruby 2.5.1 # comment is ignored
ruby   2.5.1# close comment and extra spaces doesn't confuse

Intentionally does not support ‘3.2.1@gemset` since rvm recommends using .ruby-gemset instead

Loads the file relative to the dirname of the Gemfile itself.



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/bundler/ruby_dsl.rb', line 43

def normalize_ruby_file(filename)
  file_content = Bundler.read_file(gemfile.dirname.join(filename))
  # match "ruby-3.2.2", ruby = "3.2.2", ruby = '3.2.2' or "ruby   3.2.2" capturing version string up to the first space or comment
  version_match = /^               # Start of line
                  ruby             # Literal "ruby"
                  [\s-]*           # Optional whitespace or hyphens (for "ruby-3.2.2" format)
                  (?:=\s*)?        # Optional equals sign with whitespace (for ruby = "3.2.2" format)
                  (?:
                    "([^"]+)"      # Double quoted version
                    |
                    '([^']+)'      # Single quoted version
                    |
                    ([^\s#"']+)    # Unquoted version
                  )
                  /x.match(file_content)
  if version_match
    version_match[1] || version_match[2] || version_match[3]
  else
    file_content.strip
  end
rescue Errno::ENOENT
  raise GemfileError, "Could not find version file #{filename}"
end