Sha256: 1d9e4566fa313c75c696d8c2cd51b62c09e56288f3c50b4f198c4dd7214a7e9e
Contents?: true
Size: 1.11 KB
Versions: 4
Compression:
Stored size: 1.11 KB
Contents
# frozen_string_literal: true require "refinements/shared/values/diff" module Refinements # Provides additional enhancements to the Struct primitive. module Structs refine Struct.singleton_class do def with_positions(*values) = keyword_init? ? new(**members.zip(values).to_h) : new(*values) end refine Struct do import_methods Shared::Values::Diff def merge(...) = dup.merge!(...) def merge! object = nil to_h.merge!(**object.to_h).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 def transmute(...) = dup.transmute!(...) def transmute! object, **key_map mapping = key_map.invert merge! object.to_h.slice(*mapping.keys).transform_keys!(mapping) end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
refinements-11.1.3 | lib/refinements/structs.rb |
refinements-11.1.2 | lib/refinements/structs.rb |
refinements-11.1.1 | lib/refinements/structs.rb |
refinements-11.1.0 | lib/refinements/structs.rb |