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