module Refinements::Struct

Provides additional enhancements to the Struct primitive.

Public Instance Methods

merge(...) click to toggle source
# File lib/refinements/struct.rb, line 20
    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

    alias_method :with, :merge
  end
end
merge!(object = nil) click to toggle source
# File lib/refinements/struct.rb, line 22
def merge! object = nil
  to_h.merge!(**object.to_h).each { |key, value| self[key] = value }
  self
end
revalue(attributes = each_pair) { |self, value| ... } click to toggle source
# File lib/refinements/struct.rb, line 27
def revalue attributes = each_pair
  return self unless block_given?

  dup.tap { |copy| attributes.each { |key, value| copy[key] = yield self[key], value } }
end
revalue!(attributes = each_pair) { |self, value| ... } click to toggle source
# File lib/refinements/struct.rb, line 33
def revalue! attributes = each_pair
  return self unless block_given?

  attributes.each { |key, value| self[key] = yield self[key], value }
  self
end
transmute(...) click to toggle source
# File lib/refinements/struct.rb, line 40
  def transmute(...) = dup.transmute!(...)

  def transmute! object, **key_map
    mapping = key_map.invert
    merge! object.to_h.slice(*mapping.keys).transform_keys!(mapping)
  end

  alias_method :with, :merge
end
transmute!(object, **key_map) click to toggle source
# File lib/refinements/struct.rb, line 42
def transmute! object, **key_map
  mapping = key_map.invert
  merge! object.to_h.slice(*mapping.keys).transform_keys!(mapping)
end
with_positions(*values) click to toggle source
# File lib/refinements/struct.rb, line 9
def with_positions(*values)
  warn "`#{self.class}##{__method__}` is deprecated and will be removed in Version 13.0.0.",
       category: :deprecated

  keyword_init? ? new(**members.zip(values).to_h) : new(*values)
end