Module: Richcss::VersionKit::Version::Helper

Defined in:
lib/richcss/vendor/version_kit/lib/version_kit/version/helper.rb

Overview

Identifies the possible next versions from a given one.

Class Method Summary collapse

Class Method Details

.bump(version, index) ⇒ Version

Bumps the component at the given index

Parameters:

Returns:



11
12
13
14
15
16
17
18
19
20
21
# File 'lib/richcss/vendor/version_kit/lib/version_kit/version/helper.rb', line 11

def self.bump(version, index)
  index = index.to_i
  unless (0..2).include?(index)
    raise ArgumentError, "Unsupported index `#{index}`"
  end

  version = coherce_version(version)
  number_components = version.number_component[0..index]
  number_components[index] = number_components[index].succ
  Version.new([number_components])
end

.coherce_version(version) ⇒ Version

Parameters:

Returns:



108
109
110
111
112
113
114
# File 'lib/richcss/vendor/version_kit/lib/version_kit/version/helper.rb', line 108

def self.coherce_version(version)
  if version.is_a?(Version)
    version
  else
    Version.new(version)
  end
end

.next_major(version) ⇒ Version

Parameters:

Returns:



26
27
28
# File 'lib/richcss/vendor/version_kit/lib/version_kit/version/helper.rb', line 26

def self.next_major(version)
  bump(version, 0)
end

.next_minor(version) ⇒ Version

Parameters:

Returns:



33
34
35
# File 'lib/richcss/vendor/version_kit/lib/version_kit/version/helper.rb', line 33

def self.next_minor(version)
  bump(version, 1)
end

.next_patch(version) ⇒ Version

Parameters:

Returns:



40
41
42
# File 'lib/richcss/vendor/version_kit/lib/version_kit/version/helper.rb', line 40

def self.next_patch(version)
  bump(version, 2)
end

.next_pre_release(version) ⇒ Version, Nil

Parameters:

Returns:



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/richcss/vendor/version_kit/lib/version_kit/version/helper.rb', line 48

def self.next_pre_release(version)
  version = coherce_version(version)
  return nil unless version.pre_release_component
  pre_release_component = []
  version.pre_release_component.each do |element|
    element = element.succ if element.is_a?(Fixnum)
    pre_release_component << element
  end
  if version.pre_release_component != pre_release_component
    Version.new([version.number_component, pre_release_component])
  end
end

.next_versions(version) ⇒ Array<Version>

Returns All the possible versions the given one might evolve in.

Parameters:

Returns:

  • (Array<Version>)

    All the possible versions the given one might evolve in.



65
66
67
68
69
70
71
72
73
# File 'lib/richcss/vendor/version_kit/lib/version_kit/version/helper.rb', line 65

def self.next_versions(version)
  version = coherce_version(version)
  [
    next_major(version),
    next_minor(version),
    next_patch(version),
    next_pre_release(version)
  ].compact
end

.optimistic_requirement(version) ⇒ String

Returns The optimistic requirement (‘~>`) which, according to SemVer, preserves backwards compatibility.

Returns:

  • (String)

    The optimistic requirement (‘~>`) which, according to SemVer, preserves backwards compatibility.



96
97
98
99
100
101
102
103
# File 'lib/richcss/vendor/version_kit/lib/version_kit/version/helper.rb', line 96

def self.optimistic_requirement(version)
  version = coherce_version(version)
  if version.major_version == 0
    "~> #{version.number_component[0..2].join('.')}"
  else
    "~> #{version.number_component[0..1].join('.')}"
  end
end

.release_version(version) ⇒ Version

Returns The version stripped of any pre-release or build metadata.

Returns:

  • (Version)

    The version stripped of any pre-release or build metadata.



88
89
90
91
# File 'lib/richcss/vendor/version_kit/lib/version_kit/version/helper.rb', line 88

def self.release_version(version)
  version = coherce_version(version)
  Version.new([version.number_component])
end

.valid_next_version?(version, candidate) ⇒ Bool

Parameters:

Returns:

  • (Bool)


79
80
81
82
83
# File 'lib/richcss/vendor/version_kit/lib/version_kit/version/helper.rb', line 79

def self.valid_next_version?(version, candidate)
  version = coherce_version(version)
  candidate = coherce_version(candidate)
  next_versions(version).include?(candidate)
end