can this be broken into multi line? its pretty hard to read.

```ruby
  self[key] = if block && self_initial_value
    block.call(key, self_initial_value, new_value)
  else 
    new_value
  end
```