v1: Nested hashes - { - type: "flex", - altText: "Flex message", - contents: { - type: "bubble", # Deep nesting maze - header: {type: "box", layout: "vertical", contents: [{ type: "text", text: "Header" }]}, - body: {type: "box", layout: "vertical", contents: [{ type: "text", text: "Body" }]} - } - } + # v2: Structured classes + FlexMessage.new( + alt_text: "Flex message", + contents: FlexBubble.new( # Clean hierarchy + header: FlexBox.new(layout: "vertical", contents: [FlexText.new(text: "Header")]), + body: FlexBox.new(layout: "vertical", contents: [FlexText.new(text: "Body")]) + ) + ) 34