Skip to content

Instantly share code, notes, and snippets.

@andriy-baran
Created December 31, 2025 07:39
Show Gist options
  • Select an option

  • Save andriy-baran/36991c0ea72ce9b557a04afb51b653e8 to your computer and use it in GitHub Desktop.

Select an option

Save andriy-baran/36991c0ea72ce9b557a04afb51b653e8 to your computer and use it in GitHub Desktop.
SteelWheel delegation diagram
sequenceDiagram
    participant Element
    participant Composition as Composition Module<br/>(method_missing)
    participant OwnersChain as Owners Chain<br/>(Enumerator)
    participant Subform
    participant Form
    participant Handler as Handler/HostObject

    Note over Element,Handler: Phase 1: Ownership Establishment
    Form->>Subform: new(owner: form)
    Subform->>Subform: @owner = form
    Subform->>Element: new(owner: subform)
    Element->>Element: @owner = subform
    
    Note over Element,Handler: Phase 2: Method Call with owner_ Prefix
    Element->>Element: owner_name_render?
    Element->>Composition: method_missing("owner_name_render?")
    
    Note over Element,Handler: Phase 3: Method Name Processing
    Composition->>Composition: name.start_with?("owner_") ✓
    Composition->>Composition: owner_method = "name_render?"
    Composition->>OwnersChain: owners_chain.detect { |o| o.respond_to?(owner_method) }
    
    Note over Element,Handler: Phase 4: Chain Traversal
    OwnersChain->>OwnersChain: Enumerator.new do |y|
    OwnersChain->>Subform: obj = self.owner (subform)
    OwnersChain->>Subform: respond_to?(:owner) → true
    OwnersChain->>Subform: respond_to?("name_render?") → false
    OwnersChain->>Form: obj = subform.owner (form)
    OwnersChain->>Form: respond_to?(:owner) → true
    OwnersChain->>Form: respond_to?("name_render?") → true ✓
    OwnersChain-->>Composition: Found handler: form
    
    Note over Element,Handler: Phase 5: Method Execution
    Composition->>Form: public_send("name_render?", *args)
    Form-->>Composition: result
    Composition-->>Element: result

    Note over Element,Handler: Alternative: Multi-Level Chain
    Element->>Element: owner_shared_helper
    Composition->>OwnersChain: owners_chain.detect
    OwnersChain->>Subform: Check subform → false
    OwnersChain->>Form: Check form → false
    OwnersChain->>Handler: Check handler → true ✓
    OwnersChain-->>Composition: Found: handler
    Composition->>Handler: public_send("shared_helper")
    Handler-->>Element: result
Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment