class Gemsmith::Gem::Requirement

Defines a gem requirement. This is a partial, cleaner implementation of the RubyGems `Gem::Requirement` object. :reek: MissingSafeMethod

Attributes

operator[R]
raw_version[R]
version[R]
version_segments[R]

Public Class Methods

for(object) click to toggle source
# File lib/gemsmith/gem/requirement.rb, line 19
def self.for object
  case object
    when String
      operator, version = object.split
      new operator: operator, raw_version: version
    else
      fail Errors::RequirementConversion,
           %(Invalid string conversion. Use: "<operator> <version>".)
  end
end
new(operator: ">=", raw_version: "0") click to toggle source
# File lib/gemsmith/gem/requirement.rb, line 32
def initialize operator: ">=", raw_version: "0"
  @operator = operator
  @raw_version = raw_version
  @version_segments = self.class.version_segments raw_version
  @version = Versionaire::Version version_segments
  validate!
end
operators() click to toggle source
# File lib/gemsmith/gem/requirement.rb, line 11
def self.operators
  [">", ">=", "=", "!=", "<", "<=", "~>"]
end
version_segments(version) click to toggle source
# File lib/gemsmith/gem/requirement.rb, line 15
def self.version_segments version
  String(version).split(Versionaire::Version.delimiter).map(&:to_i)
end

Public Instance Methods

to_s() click to toggle source
# File lib/gemsmith/gem/requirement.rb, line 40
def to_s
  "#{operator} #{version}"
end

Private Instance Methods

validate!() click to toggle source
# File lib/gemsmith/gem/requirement.rb, line 46
def validate!
  operators = self.class.operators
  return true if operators.include? operator

  fail Errors::RequirementOperator,
       %(Invalid gem requirement operator. Use: #{operators.join ", "}.)
end