I agree. There isn't much value to passing `:authenticate_user` as an argument to the shared examples. I have 2 ideas.

1) Set it as a `let` at the top of the shared examples as in the same vein as `matcher` and `controller`.

Or

2) Continue accepting `callback` as an argument to `add_callback`, but pass it explicitly in each test rather than as part of the shared_examples argument.

Example:

```ruby
     it 'includes the filter kind and name that was expected' do
        add_callback(kind, callback_type, method_name)
        message = "Expected that HookController would not have :#{method_name} as a #{kind}_#{callback_type}"

        expect {
          expect(controller).not_to send("use_#{kind}_#{callback_type}", method_name)
        }.to fail_with_message(message)
      end
```

would become

```ruby
     it 'includes the filter kind and name that was expected' do
        add_callback(kind, callback_type, :authenticate_user)
        message = "Expected that HookController would not have :authenticate_user as a #{kind}_#{callback_type}"

        expect {
          expect(controller).not_to send("use_#{kind}_#{callback_type}", :authenticate_user)
        }.to fail_with_message(message)
      end
```

I feel like 2 would provide better clarity into what's happening. It would be a better result than what we had originally and what we ended up with after moving it out as an argument to the shared examples. It would provide good context when looking at the individual test within the shared examples. What do you think?