Class: Tebako::RubyVersionWithGemfile

Inherits:
RubyVersion show all
Defined in:
lib/tebako/ruby_version.rb

Overview

Ruby version with Gemfile definition

Constant Summary

Constants inherited from RubyVersion

Tebako::RubyVersion::DEFAULT_RUBY_VERSION, Tebako::RubyVersion::MIN_RUBY_VERSION_WINDOWS, Tebako::RubyVersion::RUBY_VERSIONS

Instance Attribute Summary

Attributes inherited from RubyVersion

#ruby_version

Instance Method Summary collapse

Methods inherited from RubyVersion

#api_version, #extend_ruby_version, #lib_version, #ruby31?, #ruby32?, #ruby32only?, #ruby33?, #ruby33only?, #ruby34?, #ruby3x7?, #ruby3x?, #run_checks, #version_check, #version_check_format, #version_check_msys

Constructor Details

#initialize(ruby_version, gemfile_path) ⇒ RubyVersionWithGemfile

Returns a new instance of RubyVersionWithGemfile.



139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/tebako/ruby_version.rb', line 139

def initialize(ruby_version, gemfile_path)
  # Assuming that it does not attempt to load any gems or resolve dependencies
  # this can be done with any bundler version
  ruby_v = Bundler::Definition.build(gemfile_path, nil, nil).ruby_version&.versions
  if ruby_v.nil?
    super(ruby_version)
  else
    process_gemfile_ruby_version(ruby_version, ruby_v)
  end
rescue Tebako::Error
  raise
rescue StandardError => e
  Tebako.packaging_error(115, e.message)
end

Instance Method Details

#process_gemfile_ruby_version(ruby_version, ruby_v) ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
# File 'lib/tebako/ruby_version.rb', line 154

def process_gemfile_ruby_version(ruby_version, ruby_v)
  puts "-- Found Gemfile with Ruby requirements #{ruby_v}"
  requirement = Gem::Requirement.new(ruby_v)

  if ruby_version.nil?
    process_gemfile_ruby_version_ud(requirement)
  else
    process_gemfile_ruby_version_d(ruby_version, requirement)
  end
  run_checks
end

#process_gemfile_ruby_version_d(ruby_version, requirement) ⇒ Object



166
167
168
169
170
171
172
173
# File 'lib/tebako/ruby_version.rb', line 166

def process_gemfile_ruby_version_d(ruby_version, requirement)
  current_version = Gem::Version.new(ruby_version)
  unless requirement.satisfied_by?(current_version)
    raise Tebako::Error.new("Ruby version #{ruby_version} does not satisfy requirement '#{requirement}'", 116)
  end

  @ruby_version = ruby_version
end

#process_gemfile_ruby_version_ud(requirement) ⇒ Object



175
176
177
178
179
180
181
182
183
184
185
186
# File 'lib/tebako/ruby_version.rb', line 175

def process_gemfile_ruby_version_ud(requirement)
  available_versions = RUBY_VERSIONS.keys.map { |v| Gem::Version.new(v) }
  matching_version = available_versions.find { |v| requirement.satisfied_by?(v) }
  puts "-- Found matching Ruby version #{matching_version}" if matching_version

  unless matching_version
    raise Tebako::Error.new("No available Ruby version satisfies requirement #{requirement}",
                            116)
  end

  @ruby_version = matching_version.to_s
end