class Aufgaben::Bump::Base

Constants

DEFAULT_COMMIT_MESSAGE_TEMPLATE

Attributes

commit_message_template[RW]
current_version[RW]
files[RW]
next_version[RW]
ns[R]
target_name[R]

Public Class Methods

new(name, ns, target_name, depends:) { |self| ... } click to toggle source
Calls superclass method Aufgaben::Base::new
# File lib/aufgaben/bump/base.rb, line 27
def initialize(name, ns, target_name, depends:)
  super(name, depends: depends)

  @ns = ns || default_namespace
  @target_name = target_name
  @files ||= []
  @commit_message_template = DEFAULT_COMMIT_MESSAGE_TEMPLATE

  yield self if block_given?

  namespace(ns) { define }
end

Public Instance Methods

default_namespace() click to toggle source
# File lib/aufgaben/bump/base.rb, line 40
def default_namespace
  :bump
end

Private Instance Methods

commit_message() click to toggle source
# File lib/aufgaben/bump/base.rb, line 92
def commit_message
  ERB.new(commit_message_template).result_with_hash(
    ns: ns,
    name: name,
    target_name: target_name,
    current_version: current_version,
    next_version: next_version,
    release_label: release_label,
    release_url: release_url,
  )
end
define() click to toggle source
# File lib/aufgaben/bump/base.rb, line 53
def define
  desc "Bump #{target_name} version"
  task name, [:next_version] => depends do |_task, args|
    self.next_version = args.fetch(:next_version) or raise "`next_version is required`"
    current_version or raise "`current_version` is required"

    puts "Bumping #{target_name} from #{current_version} to #{next_version} ..."
    puts ""

    current_version_pattern = Regexp.new('\b' + Regexp.escape(current_version) + '\b')

    changed_files = target_files.each_with_object([]) do |file, new_files|
      next unless File.exist? file

      if dry_run?
        puts "#{file} will be changed."
      else
        print "Writing #{file} ..."
        content = File.read(file)
        content.gsub!(current_version_pattern, next_version)
        File.write(file, content)
        puts " OK"
        puts ""
      end

      new_files << file
    end

    if changed_files.empty?
      puts "No changed files."
    elsif !dry_run?
      puts "Committing changed files ..."
      puts ""
      git "add", *changed_files
      git "commit", "-m", commit_message
    end
  end
end
target_files() click to toggle source
# File lib/aufgaben/bump/base.rb, line 49
def target_files
  Set.new(files)
end