Consider renaming "type" to "group"

When I look at the options:
options = {
  # generic options
  :auth  => { # auth options, if any },
  :read  => { # read options, if any },
  :write => { # write options, if any}
}

it seems like each inner hash is a group of options.