class Gemrat::Gemfile

Attributes

needs_bundle[RW]
needs_bundle?[RW]
path[RW]

Public Class Methods

new(path) click to toggle source
# File lib/gemrat/gemfile.rb, line 8
def initialize(path)
  self.path         = path
  self.needs_bundle = false
end

Public Instance Methods

add(gem) click to toggle source
# File lib/gemrat/gemfile.rb, line 13
def add(gem)
  file = File.open(path, "a+")

  check(gem, file)

  if gem.add?
    file.write "\n#{gem}"
    puts "#{gem} added to your Gemfile.".green

    needs_bundle!
  elsif gem.update?
    contents = File.read(path)
    File.open(path,'w') do |f|
      f.print contents.gsub(/^.*#{gem.name}.*$/, "#{gem}")

      f.close
    end
    puts "Updated '#{gem.name}' to version '#{gem.version}'.".green
    needs_bundle!
  end
ensure
  file.close
end

Private Instance Methods

check(gem, file) click to toggle source
# File lib/gemrat/gemfile.rb, line 44
def check(gem, file)
  @grep_file = file.grep(/gem.*#{gem.name}.*/)
  @current_gem_version = get_current_gem_version
  raise DuplicateGemFound if duplicate_gem? gem

  return unless @current_gem_version =~ /\S/

  if @current_gem_version < gem.version
    prompt_gem_replacement(gem)
  end
end
duplicate_gem?(gem) click to toggle source
# File lib/gemrat/gemfile.rb, line 66
def duplicate_gem? gem
  !@grep_file.empty? && (@current_gem_version == gem.version || @current_gem_version.empty?)
end
get_current_gem_version() click to toggle source
# File lib/gemrat/gemfile.rb, line 70
def get_current_gem_version
  @grep_file.to_s.match(/\d[\d|.]+/).to_s
end
input() click to toggle source
# File lib/gemrat/gemfile.rb, line 74
def input
  STDIN.gets
end
needs_bundle!() click to toggle source
# File lib/gemrat/gemfile.rb, line 40
def needs_bundle!
  self.needs_bundle = true
end
prompt_gem_replacement(gem) click to toggle source
# File lib/gemrat/gemfile.rb, line 56
def prompt_gem_replacement(gem)
  print (Messages::NEWER_GEM_FOUND % [gem.name, gem.version, @current_gem_version]).chomp + " "
  case input
  when /n|no/
    gem.skip!
  else
    gem.update!
  end
end