Sha256: 3e96f0fd646cfc2cf40c242856f11e23ee0a82baa481a3c549aca9cdc0431df7

Contents?: true

Size: 1.7 KB

Versions: 3

Compression:

Stored size: 1.7 KB

Contents

module GemPolish
  class CLI::Versioner
    def initialize(thor)
      @thor = thor
      @version = extract_from_version_file
    end

    def extract_from_version_file
      file_contents.match(regexp)
      numbers = $1.split('.').map(&:to_i)
      Hash[%w{ major minor revision}.zip(numbers)]
    end

    def to_version(hsh = @version)
      hsh.values.join('.')
    end

    def substitute_version(v)
      version = v.kind_of?(String) ? v : to_version(v)
      @thor.gsub_file(file, regexp, insertion(version))
      @thor.say_status(:bumped_version, "#{to_version} => #{version}")
    end

    def update_version(bumper)
      set_back = false
      @version.each_with_object({}) do |(level, number), h|
        nl = if set_back
               0
             else
               if level == bumper
                 set_back = true
                 number + 1
               else
                 number
               end
             end
        h[level] = nl
      end
    end

    def commit_version_bump(message)
      if staged_files_present?
        raise StandardError.new, "Commit aborted: Staged files present"
      else
        `git add #{file}`
        `git commit -m "#{message}"`
        sha = `git rev-parse --short HEAD`.chomp
        @thor.say_status(:commited, %{#{sha} "#{message}"})
      end
    end

    private

    def gem_name
      File.basename(Dir.pwd)
    end

    def file_contents
      File.read(file)
    end

    def file
      "lib/#{gem_name}/version.rb"
    end

    def regexp
      /VERSION = "(.*?)"/
    end

    def insertion(version)
      %{VERSION = "#{version}"}
    end

    def staged_files_present?
      system('git status --porcelain | grep -o "^\w" >/dev/null')
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
gem_polish-0.0.5 lib/gem_polish/cli/versioner.rb
gem_polish-0.0.4 lib/gem_polish/cli/versioner.rb
gem_polish-0.0.3 lib/gem_polish/cli/versioner.rb