class GemUppity::Upper
Upper
Class; performs the upgrade
Attributes
gemfile[RW]
lockfile[RW]
Public Class Methods
new(gemfile = nil)
click to toggle source
# File lib/gem_uppity/upper.rb, line 19 def initialize(gemfile = nil) @gemfile = gemfile || File.join(Dir.pwd, 'Gemfile') @lockfile = "#{@gemfile}.lock" raise IOError, 'Cannot find a valid Gemfile in the specified name or current directory' unless File.file?(@gemfile) raise IOError, 'Cannot find a valid Gemfile.lock in the specified name or current directory' unless File.file?(@lockfile) end
Public Instance Methods
upgrade()
click to toggle source
# File lib/gem_uppity/upper.rb, line 27 def upgrade current_directory = Dir.pwd pathname = Pathname.new(@gemfile) Dir.chdir(pathname.dirname) definition = Bundler::Definition.build(@gemfile, @lockfile, false) print_header_for_definition(definition) dependencies = grouped_dependencies(definition.dependencies) print_grouped_dependencies(dependencies) Dir.chdir(current_directory) end
Private Instance Methods
get_autorequire_string(requires)
click to toggle source
# File lib/gem_uppity/upper.rb, line 104 def get_autorequire_string(requires) autorequire_string = '' if requires autorequire_string = requires.count.positive? ? ", require: '#{requires.join(', ')}'" : ', require: false' end autorequire_string end
get_original_version_string(dependency)
click to toggle source
# File lib/gem_uppity/upper.rb, line 99 def get_original_version_string(dependency) versions = dependency.requirement.to_s.split(/,/) versions.map { |version| "'#{version.to_s.strip}'" }.join(', ') end
grouped_dependencies(dependencies)
click to toggle source
# File lib/gem_uppity/upper.rb, line 49 def grouped_dependencies(dependencies) {}.tap do |group| dependencies.each do |dependency| group[dependency.groups] ? group[dependency.groups] << dependency : group[dependency.groups] = [dependency] end end end
latest_version_of(gem_name)
click to toggle source
# File lib/gem_uppity/upper.rb, line 93 def latest_version_of(gem_name) output = `gem search --no-verbose -r ^#{gem_name}$`.chomp matches = output.match(/^#{gem_name} \(([.\d]+).*\)$/) matches && matches.length == 2 ? matches[1] : nil end
print_basic_dependency(dependency, spacing = '')
click to toggle source
# File lib/gem_uppity/upper.rb, line 84 def print_basic_dependency(dependency, spacing = '') original_version_string = get_original_version_string(dependency) version_string = original_version_string version = latest_version_of(dependency.name) version_string = "'~> #{version}'" if version require_string = get_autorequire_string(dependency.autorequire) puts "#{spacing}gem '#{dependency.name}', #{version_string}#{require_string} # #{original_version_string}" end
print_dependency_info(dependency, spacing = '')
click to toggle source
# File lib/gem_uppity/upper.rb, line 70 def print_dependency_info(dependency, spacing = '') if dependency.source.is_a?(Bundler::Source::Git) print_github_dependency(dependency, spacing) else print_basic_dependency(dependency, spacing) end end
print_github_dependency(dependency, spacing = '')
click to toggle source
# File lib/gem_uppity/upper.rb, line 78 def print_github_dependency(dependency, spacing = '') puts "#{spacing}gem '#{dependency.name}'," puts "#{spacing} git: '#{dependency.source.uri}'," puts "#{spacing} branch: '#{dependency.source.branch}'" end
print_grouped_dependencies(dependencies, spacing = '')
click to toggle source
# File lib/gem_uppity/upper.rb, line 57 def print_grouped_dependencies(dependencies, spacing = '') dependencies.keys.each do |group| unless group == [:default] puts "\ngroup :#{group.join(', :')} do" spacing = ' ' end dependencies[group].each do |dependency| print_dependency_info(dependency, spacing) end puts 'end' unless group == [:default] end end
print_header_for_definition(definition)
click to toggle source
# File lib/gem_uppity/upper.rb, line 41 def print_header_for_definition(definition) puts warning_comment puts "\n" puts "source 'https://rubygems.org'\n\n" ruby_version = definition.ruby_version&.versions&.first puts "ruby '#{ruby_version}'\n\n" if ruby_version end
warning_comment()
click to toggle source
# File lib/gem_uppity/upper.rb, line 112 def warning_comment <<~WARNING_COMMENT # !=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!= # Gemfile generated by Gem Uppity # ------------------------------- # Use at your own risk! This will attempt to use the latest # version of gems in your Gemfile regardless of their current # versions, formatting a new Gemfile with all versions specified # where possible. Currently, gems specified with git repositories # are left as-is. # !=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!=!= WARNING_COMMENT end