class Rrm::Repository

Constants

CLONEDIR

Attributes

branch_name[RW]
dockerfile[RW]
gemfile[RW]
gemfile_lock[RW]
gitlab_ci[RW]
level[RW]
major[RW]
minor[RW]
name[RW]
patch[RW]
rubocop[RW]
travis[RW]
url[RW]

Public Class Methods

new(url, level, update_gems) click to toggle source
# File lib/rrm/repository.rb, line 13
def initialize(url, level, update_gems)
  @url = url
  @name = url.split('/').last.gsub('.git', '')
  @dockerfile   = Rrm::Dockerfile.new(git)
  @gemfile      = Rrm::Gemfile.new(git)
  @gemfile_lock = Rrm::GemfileLock.new(git, update_gems)
  @gitlab_ci    = Rrm::GitlabCi.new(git)
  @rubocop      = Rrm::Rubocop.new(git)
  @travis       = Rrm::Travis.new(git)
  @major, @minor, @patch = current_version.split('.')
  @level = level
end

Public Instance Methods

current_version() click to toggle source
# File lib/rrm/repository.rb, line 30
def current_version
  @current_version ||= fetch_current_version
end
git() click to toggle source
# File lib/rrm/repository.rb, line 26
def git
  @git ||= clone_or_update_git
end
new_version() click to toggle source
# File lib/rrm/repository.rb, line 34
def new_version
  @new_version ||= decide_new_ruby_version
end
push!() click to toggle source
# File lib/rrm/repository.rb, line 51
def push!
  git.push('origin', @branch_name)
end
update!() click to toggle source
# File lib/rrm/repository.rb, line 38
def update!
  Rrm.logger.debug "Updating #{name} from #{current_version} to #{new_version}"
  create_branch
  dockerfile.update!(new_version)
  gemfile.update!(new_version)
  gemfile_lock.update!(new_version)
  gitlab_ci.update!(new_version)
  rubocop.update!(new_version.split('.')[0..1].join('.'))
  travis.update!(new_version)
rescue
  Rrm.logger.warn("Failed to update! #{$!.message} - #{$!.backtrace}")
end

Private Instance Methods

all() click to toggle source
# File lib/rrm/repository.rb, line 62
def all
  Rrm.all_ruby_versions.dup
end
clone_or_update_git() click to toggle source
# File lib/rrm/repository.rb, line 123
def clone_or_update_git
  git = Git.open("#{CLONEDIR}#{name}")
  git.pull('origin', 'master')
  Rrm.logger.debug("Using previous directory #{CLONEDIR}#{name}")
  git
rescue ArgumentError
  Rrm.logger.debug("Could not Git.open - reverting to Git.clone instead")
  Git.clone(url, name, path: CLONEDIR) 
rescue
  Rrm.logger.error("Could not open or clone #{url} because #{$!.message} - #{$!.backtrace}")
  nil
end
create_branch() click to toggle source
# File lib/rrm/repository.rb, line 57
def create_branch
  @branch_name = "#{Time.new.strftime('%Y%m%d%H%M%S')}_upgrade_to_ruby_#{new_version.delete('.')}"
  git.branch(@branch_name).checkout
end
decide_new_ruby_version() click to toggle source
# File lib/rrm/repository.rb, line 66
def decide_new_ruby_version
  case level
  when :major_next
    major_next
  when :major_latest
    major_latest
  when :minor_next
    minor_next
  when :minor_latest
    minor_latest
  when :patch_next
    patch_next
  when :patch_latest
    patch_latest
  end
end
fetch_current_version() click to toggle source
# File lib/rrm/repository.rb, line 136
def fetch_current_version
  line = git.object('master:Gemfile').grep('ruby ').flatten.last
  return nil unless line.flatten.last.include?('ruby ')
  line.flatten.last.match(/(\d.\d.\d)/).to_s
rescue
  Rrm.logger.warn("fetch_current_version not found for #{name} - #{$!.message} - #{$!.backtrace}")
  nil
end
major_latest() click to toggle source
# File lib/rrm/repository.rb, line 90
def major_latest
  next_major = (major.to_i+1).to_s
  all.select{|v| v > next_major}.last
rescue
  nil
end
major_next() click to toggle source
# File lib/rrm/repository.rb, line 83
def major_next
  next_major = (major.to_i+1).to_s
  all.select{|v| v.start_with?("#{next_major}.")}.last
rescue
  nil
end
minor_latest() click to toggle source
# File lib/rrm/repository.rb, line 104
def minor_latest
  all.select{|v| v.start_with?("#{major}.")}.last
rescue
  nil
end
minor_next() click to toggle source
# File lib/rrm/repository.rb, line 97
def minor_next
  next_minor = (minor.to_i+1).to_s
  all.select{|v| v.start_with?("#{major}.#{next_minor}.")}.last
rescue
  nil
end
patch_latest() click to toggle source
# File lib/rrm/repository.rb, line 117
def patch_latest
  all.select{|v| v.start_with?("#{major}.#{minor}.")}.last
rescue
  nil
end
patch_next() click to toggle source
# File lib/rrm/repository.rb, line 110
def patch_next
  next_patch = (patch.to_i+1).to_s
  all.select{|v| v == ("#{major}.#{minor}.#{next_patch}")}.last
rescue
  nil
end