class Versioneer::Repo

Attributes

bump_segment[R]
environment[W]
prereleases[RW]
release_pattern[R]
starting_release[RW]

Public Class Methods

bump(version, bump_segment, prerelease_suffix=nil, bump_count=1) click to toggle source
# File lib/versioneer/repo.rb, line 82
def self.bump(version, bump_segment, prerelease_suffix=nil, bump_count=1)
  length = segment_to_i(bump_segment) + 1 unless bump_segment.nil?

  if version.prerelease? or bump_segment.nil?
    next_version = (version.release.segments + [prerelease_suffix]).compact.join('.')
  else
    next_version = version
    bump_count.times do
      segments = next_version.release.segments.slice(0, length)
      while segments.size < length + 1 # Version.bump strips last segment
        segments << 0
      end
      next_version = Gem::Version.new(segments.join('.')).bump
    end
    next_version = [next_version.to_s, prerelease_suffix].compact.join('.')
  end

  next_version
end
new(file_within_repo, options=nil) click to toggle source
# File lib/versioneer/repo.rb, line 3
def initialize(file_within_repo, options=nil)
  @file = file_within_repo
  @directory = File.dirname(@file)
  @environment = nil

  @bump_segment = :minor
  @prereleases = %w(alpha beta rc)
  @release_pattern = /\Av?([0-9\.]+\z)/
  @starting_release = Gem::Version.new('0.0')

  if options.is_a? Hash
    options.each do |k, v|
      send("#{k}=", v)
    end
  end
end
segment_to_i(segment) click to toggle source
# File lib/versioneer/repo.rb, line 102
def self.segment_to_i(segment)
  [:major, :minor, :patch].index(segment)
end

Public Instance Methods

bump_segment=(v) click to toggle source
# File lib/versioneer/repo.rb, line 25
def bump_segment=(v)
  @bump_segment = v.to_sym
end
commits_since_release() click to toggle source
# File lib/versioneer/repo.rb, line 74
def commits_since_release
  0
end
environment() click to toggle source
# File lib/versioneer/repo.rb, line 29
def environment
  @environment || ENV['VERSIONEER_ENV'] || ENV['RAILS_ENV'] || ENV['RACK_ENV'] || ENV['ENV'] || 'development'
end
filesystem_dirty?() click to toggle source
# File lib/versioneer/repo.rb, line 78
def filesystem_dirty?
  true
end
release() click to toggle source
# File lib/versioneer/repo.rb, line 63
def release
  starting_release
end
release_pattern=(v) click to toggle source
# File lib/versioneer/repo.rb, line 69
def release_pattern=(v)
  v = Regexp.new(v) if v.is_a? String
  @release_pattern = v
end
to_s() click to toggle source
# File lib/versioneer/repo.rb, line 35
def to_s
  version.to_s
end
version() click to toggle source
# File lib/versioneer/repo.rb, line 39
def version
  prerelease = nil
  c = commits_since_release

  if environment == 'production'
    if bump_segment == :minor and prereleases[2].nil? and c > 0
      # Use commits as addition to patch level, instead of release candidate.
      return self.class.bump(release.release, :patch, nil, c)
    else
      prerelease = prereleases[2].to_s + c.to_s if c > 0
    end
  elsif filesystem_dirty?
    prerelease = prereleases[0].to_s + (c+1).to_s
  elsif c > 0
    prerelease = prereleases[1].to_s + c.to_s
  end

  if prerelease
    self.class.bump(release, bump_segment, prerelease)
  else
    release
  end
end