Sha256: 9818de02c849120ab1c9f0084fdffb9ac1964c668e5d6b1b7665785f028b4ff0
Contents?: true
Size: 1 KB
Versions: 5
Compression:
Stored size: 1 KB
Contents
# frozen_string_literal: true module Refinements # Provides additional enhancements to the Struct primitive. module Structs refine Struct.singleton_class do def keyworded? = inspect.include?("keyword_init: true") def with_keywords(**arguments) = keyworded? ? new(**arguments) : new.merge!(**arguments) def with_positions(*values) = keyworded? ? new(**members.zip(values).to_h) : new(*values) end refine Struct do def merge(**attributes) = dup.merge!(**attributes) def merge! **attributes to_h.merge(**attributes).each { |key, value| self[key] = value } self end def revalue attributes = each_pair return self unless block_given? dup.tap { |copy| attributes.each { |key, value| copy[key] = yield self[key], value } } end def revalue! attributes = each_pair return self unless block_given? attributes.each { |key, value| self[key] = yield self[key], value } self end end end end
Version data entries
5 entries across 5 versions & 1 rubygems