Class: Dependabot::Docker::Tag
- Inherits:
-
Object
- Object
- Dependabot::Docker::Tag
- Extended by:
- T::Sig
- Defined in:
- lib/dependabot/docker/tag.rb
Constant Summary collapse
- WORDS_WITH_BUILD =
/(?:(?:-[a-z]+)+-[0-9]+)+/
- VERSION_REGEX =
/v?(?<version>[0-9]+(?:[_.][0-9]+)*(?:\.[a-z0-9]+|#{WORDS_WITH_BUILD}|-(?:kb)?[0-9]+)*)/i
- VERSION_WITH_SFX =
/^#{VERSION_REGEX}(?<suffix>-[a-z][a-z0-9.\-]*)?$/i
- VERSION_WITH_PFX =
/^(?<prefix>[a-z][a-z0-9.\-_]*-)?#{VERSION_REGEX}$/i
- VERSION_WITH_PFX_AND_SFX =
/^(?<prefix>[a-z\-_]+-)?#{VERSION_REGEX}(?<suffix>-[a-z\-]+)?$/i
- NAME_WITH_VERSION =
/ #{VERSION_WITH_PFX}| #{VERSION_WITH_SFX}| #{VERSION_WITH_PFX_AND_SFX} /x
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
- #canonical? ⇒ Boolean
- #comparable? ⇒ Boolean
- #comparable_to?(other) ⇒ Boolean
- #digest? ⇒ Boolean
- #format ⇒ Object
-
#initialize(name) ⇒ Tag
constructor
A new instance of Tag.
- #looks_like_prerelease? ⇒ Boolean
- #numeric_version ⇒ Object
- #precision ⇒ Object
- #prefix ⇒ Object
- #same_but_less_precise?(other) ⇒ Boolean
- #same_precision?(other) ⇒ Boolean
- #segments ⇒ Object
- #suffix ⇒ Object
- #to_s ⇒ Object
- #version ⇒ Object
Constructor Details
#initialize(name) ⇒ Tag
Returns a new instance of Tag.
26 27 28 |
# File 'lib/dependabot/docker/tag.rb', line 26 def initialize(name) @name = name end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
23 24 25 |
# File 'lib/dependabot/docker/tag.rb', line 23 def name @name end |
Instance Method Details
#canonical? ⇒ Boolean
79 80 81 82 83 84 85 86 87 |
# File 'lib/dependabot/docker/tag.rb', line 79 def canonical? return false unless numeric_version return true if name == numeric_version # .NET tags are suffixed with -sdk return true if numeric_version && name == numeric_version.to_s + "-sdk" numeric_version && name == "jdk-" + T.must(numeric_version) end |
#comparable? ⇒ Boolean
62 63 64 |
# File 'lib/dependabot/docker/tag.rb', line 62 def comparable? name.match?(NAME_WITH_VERSION) end |
#comparable_to?(other) ⇒ Boolean
46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/dependabot/docker/tag.rb', line 46 def comparable_to?(other) return false unless comparable? other_prefix = other.prefix other_suffix = other.suffix other_format = other.format equal_prefix = prefix == other_prefix equal_format = format == other_format return equal_prefix && equal_format if other_format == :sha_suffixed equal_suffix = suffix == other_suffix equal_prefix && equal_format && equal_suffix end |
#digest? ⇒ Boolean
36 37 38 |
# File 'lib/dependabot/docker/tag.rb', line 36 def digest? name.match?(FileParser::DIGEST) end |
#format ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/dependabot/docker/tag.rb', line 105 def format return :sha_suffixed if name.match?(/(^|\-g?)[0-9a-f]{7,}$/) return :year_month if version&.match?(/^[12]\d{3}(?:[.\-]|$)/) return :year_month_day if version&.match?(/^[12](?:\d{5}|\d{7})(?:[.\-]|$)/) return :build_num if version&.match?(/^\d+$/) # As an example, "21-ea-32", "22-ea-7", and "22-ea-jdk-nanoserver-1809" # are mapped to "<version>-ea-<build_num>", "<version>-ea-<build_num>", # and "<version>-ea-jdk-nanoserver-<build_num>" respectively. # # That means only "22-ea-7" will be considered as a viable update # candidate for "21-ea-32", since it's the only one that respects that # format. if version&.match?(WORDS_WITH_BUILD) return :"<version>#{T.must(version).match(WORDS_WITH_BUILD).to_s.gsub(/-[0-9]+/, '-<build_num>')}" end :normal end |
#looks_like_prerelease? ⇒ Boolean
41 42 43 |
# File 'lib/dependabot/docker/tag.rb', line 41 def looks_like_prerelease? numeric_version&.match?(/[a-zA-Z]/) end |
#numeric_version ⇒ Object
126 127 128 129 130 |
# File 'lib/dependabot/docker/tag.rb', line 126 def numeric_version return unless comparable? version&.gsub(/kb/i, "")&.gsub(/-[a-z]+/, "")&.downcase end |
#precision ⇒ Object
133 134 135 |
# File 'lib/dependabot/docker/tag.rb', line 133 def precision segments.length end |
#prefix ⇒ Object
90 91 92 |
# File 'lib/dependabot/docker/tag.rb', line 90 def prefix name.match(NAME_WITH_VERSION)&.named_captures&.fetch("prefix") end |
#same_but_less_precise?(other) ⇒ Boolean
72 73 74 75 76 |
# File 'lib/dependabot/docker/tag.rb', line 72 def same_but_less_precise?(other) other.segments.zip(segments).all? do |segment, other_segment| segment == other_segment || other_segment.nil? end end |
#same_precision?(other) ⇒ Boolean
67 68 69 |
# File 'lib/dependabot/docker/tag.rb', line 67 def same_precision?(other) other.precision == precision end |
#segments ⇒ Object
138 139 140 |
# File 'lib/dependabot/docker/tag.rb', line 138 def segments T.must(numeric_version).split(/[.-]/) end |
#suffix ⇒ Object
95 96 97 |
# File 'lib/dependabot/docker/tag.rb', line 95 def suffix name.match(NAME_WITH_VERSION)&.named_captures&.fetch("suffix") end |
#to_s ⇒ Object
31 32 33 |
# File 'lib/dependabot/docker/tag.rb', line 31 def to_s name end |
#version ⇒ Object
100 101 102 |
# File 'lib/dependabot/docker/tag.rb', line 100 def version name.match(NAME_WITH_VERSION)&.named_captures&.fetch("version") end |