Top Level Namespace

Defined Under Namespace

Modules: ShouldIUpdate

Instance Method Summary collapse

Instance Method Details

#bundle_outdatedObject



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/shouldiupdate.rb', line 1

def bundle_outdated

  `bundle outdated`.lines.reduce([]) do |out, line|
    res = line.match /\* (.*) \(newest (.*), installed (.*), requested = (.*)\) in group/
    res ||= line.match /\* (.*) \(newest (.*), installed (.*), requested = (.*)\)/
    res ||= line.match /\* (.*) \(newest (.*), installed (.*)\) in group/
    res ||= line.match /\* (.*) \(newest (.*), installed (.*)\)/

    if res
      name,newest,installed, requested = res[1], res[2], res[3], res[4]
      gem = { name: name, newest: newest, installed: installed }
      gem[:requested] = requested if requested
      out << gem
    end

    out
  end
end

#filter_outdated_gemsObject



20
21
22
23
24
# File 'lib/shouldiupdate.rb', line 20

def filter_outdated_gems
  bundle_outdated.select do |gem|
    yield Gem::Version.new(gem[:newest]), Gem::Version.new(gem[:installed])
  end
end

#green(str) ⇒ Object



46
47
48
# File 'lib/shouldiupdate.rb', line 46

def green str
  "\e[32m#{str}\e[0m"
end

#red(str) ⇒ Object



42
43
44
# File 'lib/shouldiupdate.rb', line 42

def red str
  "\e[31m#{str}\e[0m"
end

#should_i_updateObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/shouldiupdate.rb', line 26

def should_i_update
  gems = filter_outdated_gems { |newest, installed| installed.bump <= newest }

  if gems.empty?
    puts green "Your Gemfile looks good :)"
  else
    puts red "Your Gemfile could do with some updating :("
    gems.each do |gem|
      puts "    #{gem[:name]} (newest #{gem[:newest]}, installed #{gem[:installed]})"
    end
  end
  puts ""

  !gems.empty?
end