Module: VersionParser

Defined in:
lib/semver_dialects/semantic_version/version_parser.rb

Class Method Summary collapse

Class Method Details

.parse(versionstring) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/semver_dialects/semantic_version/version_parser.rb', line 5

def self.parse(versionstring)
  if (versionstring == "=*")
    # special case = All Versions
    return VersionInterval.new(IntervalType::LEFT_OPEN | IntervalType::RIGHT_OPEN, BelowAll.new(), AboveAll.new())
  end

  version_items = versionstring.split(" ")
  interval = VersionInterval.new(IntervalType::LEFT_OPEN | IntervalType::RIGHT_OPEN, BelowAll.new(), AboveAll.new())
  version_items.each do
    |version_item|
    matches = version_item.match /(?<op>[><=]+) *(?<version>[a-zA-Z0-9\-_\.\*]+)/
    version_string = matches[:version]
    case matches[:op]
    when ">="
      new_interval = VersionInterval.new(IntervalType::LEFT_CLOSED | IntervalType::RIGHT_OPEN, VersionCut.new(version_string), AboveAll.new())
      interval = interval.intersect(new_interval)
    when "<="
      new_interval = VersionInterval.new(IntervalType::LEFT_OPEN | IntervalType::RIGHT_CLOSED, BelowAll.new(), VersionCut.new(version_string))
      interval = interval.intersect(new_interval)
    when "<"
      new_interval = VersionInterval.new(IntervalType::LEFT_OPEN | IntervalType::RIGHT_OPEN, BelowAll.new(), VersionCut.new(version_string))
      interval = interval.intersect(new_interval)
    when ">"
      new_interval = VersionInterval.new(IntervalType::LEFT_OPEN | IntervalType::RIGHT_OPEN, VersionCut.new(version_string), AboveAll.new())
      interval = interval.intersect(new_interval)
    when "=", "=="
      new_interval = VersionInterval.new(IntervalType::LEFT_CLOSED | IntervalType::RIGHT_CLOSED, VersionCut.new(version_string), VersionCut.new(version_string))
      interval = interval.intersect(new_interval)
    end
  end
  interval
end