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
print_dependency_info(dependency, spacing = '') click to toggle source
print_github_dependency(dependency, spacing = '') click to toggle source
print_grouped_dependencies(dependencies, spacing = '') click to toggle source
print_header_for_definition(definition) click to toggle source
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