class Rake::Funnel::Support::VersionInfo

Public Class Methods

new(hash = nil) click to toggle source
Calls superclass method
# File lib/rake/funnel/support/version_info.rb, line 11
def initialize(hash = nil)
  super(hash)
end
parse(context) click to toggle source
# File lib/rake/funnel/support/version_info.rb, line 20
def parse(context)
  VersionInfo.new(assembly_version: assembly_version(context),
                  assembly_file_version: assembly_file_version(context),
                  assembly_informational_version: assembly_informational_version(context))
end
read_version_from(file) click to toggle source
# File lib/rake/funnel/support/version_info.rb, line 26
def read_version_from(file)
  File.open(file, &:readline).strip
end

Private Class Methods

assembly_file_version(context) click to toggle source
# File lib/rake/funnel/support/version_info.rb, line 50
def assembly_file_version(context)
  version = assembly_version(context)
  build_number = numeric(context.fetch(:metadata, {})[:build])
  return version.sub(/\.0$/, ".#{build_number}") if build_number

  version
end
assembly_informational_version(context) click to toggle source
# File lib/rake/funnel/support/version_info.rb, line 64
def assembly_informational_version(context) # rubocop:disable Metrics/MethodLength
  version = default_version(context)
  numeric_version = pad(version, 3)
  alpha_version = version.sub(/^[\d\.]*/, '')

  semver = [
    numeric_version,
    alpha_version,
    pre(context)
  ].join

  [
    semver,
    metadata(context)
  ].compact.join('+')
end
assembly_version(context) click to toggle source
# File lib/rake/funnel/support/version_info.rb, line 45
def assembly_version(context)
  version = default_version(context)
  pad(version, 4)
end
default_version(context) click to toggle source
# File lib/rake/funnel/support/version_info.rb, line 32
def default_version(context)
  context[:version].to_s || '0'
end
metadata(context) click to toggle source
# File lib/rake/funnel/support/version_info.rb, line 88
def metadata(context)
  metadata = context.fetch(:metadata, {}).reject { |k, _| k == :pre }

  metadata = metadata.map do |key, value|
    [key.to_s, value.to_s] if value
  end.compact

  return nil if metadata.empty?

  metadata.join('.')
end
numeric(str) click to toggle source
# File lib/rake/funnel/support/version_info.rb, line 58
def numeric(str)
  return str if str.to_s =~ /^\d+$/

  nil
end
pad(version, parts) click to toggle source
# File lib/rake/funnel/support/version_info.rb, line 36
def pad(version, parts)
  numerics = version.split('.').take(parts).map(&:to_i)

  template = Array.new(parts) { 0 }.map.with_index do |part, index|
    numerics[index] || part
  end
  template.join('.')
end
pre(context) click to toggle source
# File lib/rake/funnel/support/version_info.rb, line 81
def pre(context)
  pre = context.fetch(:metadata, {})[:pre]
  pre = "-#{pre}" if pre && pre.to_s !~ /^-/

  pre
end

Public Instance Methods

each(&block) click to toggle source
# File lib/rake/funnel/support/version_info.rb, line 15
def each(&block)
  each_pair(&block)
end