Module: Vident::Stimulus::Combinable

Included in:
Base
Defined in:
lib/vident/stimulus/combinable.rb

Overview

Shared ‘with(**overrides)` combinator for the frozen value classes. Mirrors Ruby’s ‘Data.define#with` convention (which Literal::Data doesn’t ship) so callers can decorate a value object without mutating it.

Instance Method Summary collapse

Instance Method Details

#deconstructObject



21
22
23
# File 'lib/vident/stimulus/combinable.rb', line 21

def deconstruct
  deconstruct_keys(nil).values
end

#deconstruct_keys(keys) ⇒ Object

Canonical Ruby Data-object hooks. The value classes override ‘to_h` to serialise to their data-attribute shape; without this module, `deconstruct_keys` would inherit that override and pattern-matching (`case a; in event:`) would silently fail.



14
15
16
17
18
19
# File 'lib/vident/stimulus/combinable.rb', line 14

def deconstruct_keys(keys)
  h = self.class.literal_properties.properties_index.each_with_object({}) do |(name, _), acc|
    acc[name.to_sym] = public_send(name)
  end
  keys ? h.slice(*keys) : h
end

#with(**overrides) ⇒ Object



25
26
27
# File 'lib/vident/stimulus/combinable.rb', line 25

def with(**overrides)
  self.class.new(**deconstruct_keys(nil).merge(overrides))
end