Sha256: ac5ea4172df6ee6cf8a7e39bd5ef6320aa150aac0a308a24a5420754a52998b4

Contents?: true

Size: 1.11 KB

Versions: 15

Compression:

Stored size: 1.11 KB

Contents

require 'forwardable'

module Dandelion
  class Diff
    extend Forwardable
    include Enumerable

    def_delegator :@target, :empty?
    def_delegator :@target, :each

    attr_reader :from_commit, :to_commit

    def initialize(from_commit, to_commit)
      @from_commit = from_commit
      @to_commit = to_commit

      if from_commit.nil?
        @target = FullDiff.new(to_commit.diff(nil))
      else
        @target = PartialDiff.new(from_commit.diff(to_commit))
      end
    end
  end

private

  class PartialDiff
    def initialize(diff)
      @deltas = diff.deltas
    end

    def empty?
      @deltas.empty?
    end

    def each
      @deltas.each do |delta|
        if delta.deleted?
          yield Change.new(delta.old_file[:path], :delete)
        else
          yield Change.new(delta.new_file[:path], :write)
        end
      end
    end
  end

  class FullDiff
    def initialize(diff)
      @deltas = diff.patches.map(&:delta)
    end

    def empty?
      @deltas.empty?
    end

    def each
      @deltas.each do |delta|
        yield Change.new(delta.new_file[:path], :write)
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
dandelion-0.4.16 lib/dandelion/diff.rb
dandelion-0.4.15 lib/dandelion/diff.rb
dandelion-0.4.14 lib/dandelion/diff.rb
dandelion-0.4.10 lib/dandelion/diff.rb
dandelion-0.4.9 lib/dandelion/diff.rb
dandelion-0.4.8 lib/dandelion/diff.rb
dandelion-0.4.7 lib/dandelion/diff.rb
dandelion-0.4.6 lib/dandelion/diff.rb
dandelion-0.4.5 lib/dandelion/diff.rb
dandelion-0.4.4 lib/dandelion/diff.rb
dandelion-0.4.3 lib/dandelion/diff.rb
dandelion-0.4.2 lib/dandelion/diff.rb
dandelion-0.4.1 lib/dandelion/diff.rb
dandelion-0.4.0 lib/dandelion/diff.rb
dandelion-0.4.0.beta2 lib/dandelion/diff.rb