Class: SemverDialects::Rpm::VersionParser

Inherits:
Object
  • Object
show all
Defined in:
lib/semver_dialects/rpm.rb

Overview

rubocop:todo Style/Documentation

Constant Summary collapse

DASH =
/-/
ALPHABET =
/([a-zA-Z]+)/
TILDE =
/~/
DIGIT =
/([0-9]+)/
COLON =
/:/
NON_ALPHANUMERIC_DASH_TILDE_AND_WHITESPACE =
/[^a-zA-Z0-9~\s]+/
WHITE_SPACE =
/\s/

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(input) ⇒ VersionParser



97
98
99
100
# File 'lib/semver_dialects/rpm.rb', line 97

def initialize(input)
  @input = input
  @scanner = StringScanner.new(input)
end

Class Method Details

.parse(input) ⇒ Object



93
94
95
# File 'lib/semver_dialects/rpm.rb', line 93

def self.parse(input)
  new(input).parse
end

Instance Method Details

#parseObject

parse splits the input string into epoch, version and release tag Eg: <epoch>:<version>-<release_tag> The version and release tag are split at the first ‘-` character if present With the segment before the first `-` being version while the other being release tag Subsequent `-` are disregarded



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/semver_dialects/rpm.rb', line 106

def parse
  epoch = nil
  if (s = scanner.scan(/\d+:/))
    epoch = s[..-2].to_i
  end

  # parse tokens until we reach the release tag, if any
  tokens = parse_tokens(false)

  # parse release tag
  release_tag = nil
  release_tag = ReleaseTag.new(parse_tokens(true)) if scanner.rest?

  raise IncompleteScanError, scanner.rest if scanner.rest?

  Version.new(tokens, epoch: epoch, release_tag: release_tag)
end