Sha256: a40ac717df6adc0d6960d72da166815544cd43e95d1213a2f907593d7ca1ac09

Contents?: true

Size: 1.58 KB

Versions: 10

Compression:

Stored size: 1.58 KB

Contents

# frozen_string_literal: true

module Gemdiff
  class GemUpdater
    attr_accessor :name

    def initialize(name)
      @name = name
    end

    def update
      bundle_update
    end

    def diff
      git_diff
    end

    def show
      git_show
    end

    def commit
      git_commit
    end

    def reset
      git_reset
    end

    def clean?
      git_diff.empty?
    end

    private

    def git_show
      `git show`
    end

    def git_diff
      `git diff`
    end

    def git_commit
      return false if git_added_line.empty?
      git_add_and_commit_lockfile
      true
    end

    def version(changed_line)
      changed_line.split("\n").first.split(" ").last.gsub(/[()]/, "")
    end

    # example returns:
    # +    rails (4.2.3)
    # or
    # +    sass-rails (4.0.3)
    # +  sass-rails
    # or
    # +      activejob (= 4.2.3)
    # +    activejob (4.2.3)
    # +      activejob (= 4.2.3)
    def git_added_line
      @added_line ||= `git diff | grep ' #{name} (' | grep '+  '`
    end

    # example returns:
    # -    json (1.8.1)
    def git_removed_line
      `git diff | grep ' #{name} (' | grep '\\-  '`
    end

    def commit_message
      new_version = version(git_added_line)
      outdated = OutdatedGem.new(name, new_version, version(git_removed_line))
      "Update #{name} to #{new_version}\n\n#{outdated.compare_url}"
    end

    def git_add_and_commit_lockfile
      `git add Gemfile.lock && git commit -m '#{commit_message}'`
    end

    def git_reset
      `git checkout Gemfile.lock`
    end

    def bundle_update
      `bundle update #{name}`
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
gemdiff-2.4.2 lib/gemdiff/gem_updater.rb
gemdiff-2.4.1 lib/gemdiff/gem_updater.rb
gemdiff-2.4.0 lib/gemdiff/gem_updater.rb
gemdiff-2.3.0 lib/gemdiff/gem_updater.rb
gemdiff-2.2.1 lib/gemdiff/gem_updater.rb
gemdiff-2.2.0 lib/gemdiff/gem_updater.rb
gemdiff-2.1.0 lib/gemdiff/gem_updater.rb
gemdiff-2.0.2 lib/gemdiff/gem_updater.rb
gemdiff-2.0.1 lib/gemdiff/gem_updater.rb
gemdiff-2.0.0 lib/gemdiff/gem_updater.rb