Oh, I think I see what you're asking now. Unless I'm completely off you can do this as is implemented. `attributes` is meant to be a hash so you can call it as you're suggesting:

```ruby
create_keypair('mykey', :public_key => MY_KEY_HERE, :private_key => ETC_ETC)
```

Yeah, lines 24-27 are simply to maintain backwards compatibility. For example, some people who are using this might have the following code somewhere:

```ruby
.create_keypair('mykey', 'ssh-rsa AAAAB3...')
```

In order to prevent their integration from breaking we need to make sure that we have something in place to handle a string as a 2nd argument. The lines you're referencing coerce that string value into the existing hash with the name. In line 29 you can see how we're merging exactly as you mentioned for situations when the user passes a hash as the second argument.

I think I see a bug that might be tripping you up. We should only merge `attributes` if it's a hash, not if it's not nil. I'll push a fix in 1 second.