lib/versionaire/version.rb in versionaire-12.0.1 vs lib/versionaire/version.rb in versionaire-12.1.0
- old
+ new
@@ -5,10 +5,11 @@
module Versionaire
# An immutable, semantic version value object.
Version = Struct.new :major, :minor, :patch, keyword_init: true do
include Comparable
+ using Refinements::Arrays
using Refinements::Structs
def initialize major: 0, minor: 0, patch: 0
super
validate
@@ -17,24 +18,37 @@
def []= key, value
super(key, value).tap { validate }
end
- def +(other) = revalue(other.to_h) { |previous, current| previous + current }
+ def +(other) = (revalue(other.to_h) { |previous, current| previous + current }).freeze
- def -(other) = revalue(other.to_h) { |previous, current| previous - current }
+ def -(other) = (revalue(other.to_h) { |previous, current| previous - current }).freeze
def ==(other) = hash == other.hash
alias_method :eql?, :==
def <=>(other) = to_s <=> other.to_s
- def down(key, value = 1) = revalue(key => value) { |previous, current| previous - current }
+ def down key, value = 1
+ (revalue(key => value) { |previous, current| previous - current }).freeze
+ end
- def up(key, value = 1) = revalue(key => value) { |previous, current| previous + current }
+ def up key, value = 1
+ (revalue(key => value) { |previous, current| previous + current }).freeze
+ end
+ def bump key
+ case key
+ when :major then bump_major
+ when :minor then bump_minor
+ when :patch then bump_patch
+ else fail Error, %(Invalid key: #{key.inspect}. Use: #{members.to_sentence "or"}.)
+ end
+ end
+
def inspect = to_s.inspect
def to_proc = method(:[]).to_proc
def to_s = to_a.join DELIMITER
@@ -48,7 +62,13 @@
!number.is_a? Integer
end
fail Error, "Major, minor, and patch must be a positive number." if to_a.any?(&:negative?)
end
+
+ def bump_major = merge(major: major + 1, minor: 0, patch: 0).freeze
+
+ def bump_minor = merge(major:, minor: minor + 1, patch: 0).freeze
+
+ def bump_patch = merge(major:, minor:, patch: patch + 1).freeze
end
end