class HeadChef::CookbookDiff

Attributes

diff_hash[R]

Public Class Methods

new() click to toggle source
# File lib/head_chef/cookbook_diff.rb, line 5
def initialize
  @diff_hash = { add: [],
                 update: [],
                 remove: [],
                 revert: [],
                 conflict: [] }
end

Public Instance Methods

add(cookbook) click to toggle source

@TODO: cleanup @TODO: switch statements

# File lib/head_chef/cookbook_diff.rb, line 15
def add(cookbook)
  # Removal is the only operation that does not require a diff, as no
  # cookbook will be uploaded
  if cookbook.chef_version && !cookbook.berkshelf_version
    @diff_hash[:remove] << cookbook and return
  end

  unless cookbook.diff
    @diff_hash[:conflict] << cookbook and return
  end

  if cookbook.berkshelf_version && !cookbook.chef_version
    @diff_hash[:add] << cookbook and return
  end

  berkshelf_version = Semantic::Version.new(cookbook.berkshelf_version)
  chef_version = Semantic::Version.new(cookbook.chef_version)

  if berkshelf_version > chef_version
    @diff_hash[:update] << cookbook and return
  elsif berkshelf_version < chef_version
    @diff_hash[:revert] << cookbook and return
  end
end
conflicts() click to toggle source
# File lib/head_chef/cookbook_diff.rb, line 40
def conflicts
  @diff_hash[:conflict]
end
conflicts?() click to toggle source
# File lib/head_chef/cookbook_diff.rb, line 44
def conflicts?
  !@diff_hash[:conflict].empty?
end
empty?() click to toggle source
# File lib/head_chef/cookbook_diff.rb, line 48
def empty?
  [:add, :update, :remove, :revert, :conflict].each do |method|
    return false if !@diff_hash[method].empty?
  end

  true
end
pretty_print() click to toggle source
# File lib/head_chef/cookbook_diff.rb, line 56
def pretty_print
  if self.empty?
    HeadChef.ui.say("Berksfile and Chef environment are identical", :green)
    return
  end

  colors = { add: :green,
             update: :green,
             remove: :red,
             revert: :red,
             conflict: :red }

  [:add, :update, :remove, :revert, :conflict].each do |method|
    color = colors[method]

    unless @diff_hash[method].empty?
      HeadChef.ui.say("#{method.to_s.upcase}:", color)
      diff_hash[method].each do |cookbook|
        HeadChef.ui.say("  #{cookbook.to_s}", color)
      end
    end
  end
end