I think this would be better as a `Struct`.  Your home-grown struct doesn't implement `eql?` or `hash` properly to allow these objects to be used as hash keys and in other situations where value objects are commonly used.  Also, it's nice for consistency to use a struct since you used a struct for everything else.  I'm assuming you made your own class because of the `data` hash?  I'd deal with that like so:

``` ruby
DeprecationNotification = Struct.new(:deprecated, :replacement, :call_site, :message) do
  def self.from_hash(hash)
    new(hash[:deprecated], hash[:replacement], hash[:call_site], hash[:message])
  end
end
```

It's shorter, too :).