Module: HttpResource::ValueObject

Defined in:
lib/http_resource/value_object.rb

Overview

Mixin for response value objects, designed to pair with Ruby's Data.define. It gives a class a tolerant .from(payload) that:

- returns nil for a nil payload (so an empty 2xx -> nil, never a ghost),
- unwraps a top-level { "data" => {...} } envelope if present,
- normalises string OR symbol keys,

then hands the inner hash to build (or the Data.define member names, when no build is defined) so missing keys arrive as nil instead of raising.

Contact = Data.define(:email, :name) do
extend HttpResource::ValueObject
end
Contact.from("data" => { "email" => "a@b.se" })  # => #<data Contact email="a@b.se", name=nil>
Contact.from(nil)                                 # => nil

Resource methods should still guard data && Contact.from(data) so the caller never receives a ghost object from an empty body.

Instance Method Summary collapse

Instance Method Details

#from(payload) ⇒ Object



21
22
23
24
25
26
# File 'lib/http_resource/value_object.rb', line 21

def from(payload)
  return nil if payload.nil?

  data = unwrap(payload)
  respond_to?(:build) ? build(data) : new(**slice_members(data))
end