Your tests so far cover all the cases, but I think you can DRY this up using shared_examples and it_behaves like. 

Something like: 
```ruby
context "without a range key" do
  subject { Address.create id: 123, city: 'Seattle' }
  let(:different ) { Address.create id: 456, city: 'Seattle' }
  let( :same ) { Address.new id: 123, city: 'Boston' }

  #Cases common to both with & without range
  it_behaves_like "it has equality testing and hashing"
end

context "with a range key" do
  subject { Tweet.create … }
  let(:different) { … }

  it_behaves_like "it has equality testing and hashing"

  #Case unique to Range key objects
  it "isn't equal with the same hash key but different ranges" do
    …
  end
end
```
I know that involves touching more of the tests than you probably intended, but it'd be great if you can factor this up while you're in the area. (Let me know if you can't)