Class: MetadataJsonLint::VersionRequirement
- Inherits:
-
Object
- Object
- MetadataJsonLint::VersionRequirement
- Defined in:
- lib/metadata-json-lint/version_requirement.rb
Overview
Parses a string module version requirement with semantic_puppet and provides methods to analyse it for lint warnings
Instance Method Summary collapse
-
#initialize(requirement) ⇒ VersionRequirement
constructor
A new instance of VersionRequirement.
- #max ⇒ Object
- #min ⇒ Object
-
#mixed_syntax? ⇒ Boolean
Whether the range uses a comparison operator (e.g. >=) with a wildcard syntax, such as ">= 1.x" or "< 2.0.x".
- #open_ended? ⇒ Boolean
- #puppet_eol? ⇒ Boolean
- #ver_range ⇒ Object
Constructor Details
#initialize(requirement) ⇒ VersionRequirement
Returns a new instance of VersionRequirement.
5 6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/metadata-json-lint/version_requirement.rb', line 5 def initialize(requirement) @requirement = requirement if defined?(SemanticPuppet::VersionRange) @range = SemanticPuppet::VersionRange.parse(requirement) if @range == SemanticPuppet::VersionRange::EMPTY_RANGE raise ArgumentError, "Range matches no versions: \"#{requirement}\"" end elsif requirement.match(/\A[a-z0-9*.\-^~><=|\t ]*\Z/i).nil? raise ArgumentError, "Unparsable version range: \"#{requirement}\"" end end |
Instance Method Details
#max ⇒ Object
65 66 67 |
# File 'lib/metadata-json-lint/version_requirement.rb', line 65 def max range.end end |
#min ⇒ Object
61 62 63 |
# File 'lib/metadata-json-lint/version_requirement.rb', line 61 def min range.begin end |
#mixed_syntax? ⇒ Boolean
Whether the range uses a comparison operator (e.g. >=) with a wildcard syntax, such as ">= 1.x" or "< 2.0.x"
21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/metadata-json-lint/version_requirement.rb', line 21 def mixed_syntax? !/ [><=^~]{1,2} # comparison operators \s* \d\. # MAJOR (?: (?:x|\*) # MINOR is wildcard | \d\.(?:x|\*) # MINOR is digit and PATCH is wildcard ) /x.match(requirement).nil? end |
#open_ended? ⇒ Boolean
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/metadata-json-lint/version_requirement.rb', line 34 def open_ended? if range range.end == SemanticPuppet::Version::MAX else # Empty requirement strings are open-ended. return true if requirement.strip.empty? # Strip superfluous whitespace. range_set = requirement.gsub(/([><=~^])(?:\s+|\s*v)/, '\1') # Split on logical OR ranges = range_set.split(/\s*\|\|\s*/) # Returns true if any range includes a '>' but not a corresponding '<' # which should be the only way to declare an open-ended range. ranges.select { |r| r.include?('>') }.any? { |r| !r.include?('<') } end end |
#puppet_eol? ⇒ Boolean
53 54 55 |
# File 'lib/metadata-json-lint/version_requirement.rb', line 53 def puppet_eol? true if range.begin < SemanticPuppet::Version.parse(MIN_PUPPET_VER) end |
#ver_range ⇒ Object
57 58 59 |
# File 'lib/metadata-json-lint/version_requirement.rb', line 57 def ver_range range end |