class Dependabot::Bundler::FileUpdater::RubyRequirementSetter
Constants
- RUBY_VERSIONS
Attributes
gemspec[R]
Public Class Methods
new(gemspec:)
click to toggle source
# File lib/dependabot/bundler/file_updater/ruby_requirement_setter.rb, line 19 def initialize(gemspec:) @gemspec = gemspec end
Public Instance Methods
rewrite(content)
click to toggle source
# File lib/dependabot/bundler/file_updater/ruby_requirement_setter.rb, line 23 def rewrite(content) return content unless gemspec_declares_ruby_requirement? buffer = Parser::Source::Buffer.new("(gemfile_content)") buffer.source = content ast = Parser::CurrentRuby.new.parse(buffer) if declares_ruby_version?(ast) GemfileRewriter.new( ruby_version: ruby_version ).rewrite(buffer, ast) else "ruby '#{ruby_version}'\n" + content end end
Private Instance Methods
declares_ruby_requirement?(node)
click to toggle source
# File lib/dependabot/bundler/file_updater/ruby_requirement_setter.rb, line 93 def declares_ruby_requirement?(node) return false unless node.is_a?(Parser::AST::Node) node.children[1] == :required_ruby_version= end
declares_ruby_version?(node)
click to toggle source
# File lib/dependabot/bundler/file_updater/ruby_requirement_setter.rb, line 45 def declares_ruby_version?(node) return false unless node.is_a?(Parser::AST::Node) return true if node.type == :send && node.children[1] == :ruby node.children.any? { |cn| declares_ruby_version?(cn) } end
find_ruby_requirement_node(node)
click to toggle source
rubocop:enable Security/Eval
# File lib/dependabot/bundler/file_updater/ruby_requirement_setter.rb, line 83 def find_ruby_requirement_node(node) return unless node.is_a?(Parser::AST::Node) return node if declares_ruby_requirement?(node) node.children.find do |cn| requirement_node = find_ruby_requirement_node(cn) break requirement_node if requirement_node end end
gemspec_declares_ruby_requirement?()
click to toggle source
# File lib/dependabot/bundler/file_updater/ruby_requirement_setter.rb, line 41 def gemspec_declares_ruby_requirement? !ruby_requirement.nil? end
ruby_requirement()
click to toggle source
rubocop:disable Security/Eval
# File lib/dependabot/bundler/file_updater/ruby_requirement_setter.rb, line 70 def ruby_requirement ast = Parser::CurrentRuby.parse(gemspec.content) requirement_node = find_ruby_requirement_node(ast) return unless requirement_node begin eval(requirement_node.children[2].loc.expression.source) rescue StandardError nil # If we can't evaluate the expression just return nil end end
ruby_version()
click to toggle source
# File lib/dependabot/bundler/file_updater/ruby_requirement_setter.rb, line 52 def ruby_version requirement = if ruby_requirement.is_a?(Gem::Requirement) ruby_requirement else Dependabot::Bundler::Requirement.new(ruby_requirement) end ruby_version = RUBY_VERSIONS. map { |v| Gem::Version.new(v) }.sort. find { |v| requirement.satisfied_by?(v) } raise RubyVersionNotFound unless ruby_version ruby_version end