diff --git a/lib/remote_storage/riak.rb b/lib/remote_storage/riak.rb index 27ff1a3..94be481 100644 --- a/lib/remote_storage/riak.rb +++ b/lib/remote_storage/riak.rb @@ -95,6 +95,8 @@ module RemoteStorage object_exists = !object.raw_data.nil? existing_object_size = object_size(object) + server.halt 412 if object_exists && server.env["HTTP_IF_NONE_MATCH"] == "*" + timestamp = (Time.now.to_f * 1000).to_i object.meta["timestamp"] = timestamp diff --git a/spec/riak_spec.rb b/spec/riak_spec.rb index f7f3b8c..f70cc72 100644 --- a/spec/riak_spec.rb +++ b/spec/riak_spec.rb @@ -262,6 +262,27 @@ describe "App with Riak backend" do last_response.body.must_equal "lorem ipsum" end end + + describe "when If-None-Match header is set" do + before do + header "If-None-Match", "*" + end + + it "fails when the document already exists" do + put "/jimmy/documents/archive/foo", "some awesome content" + + last_response.status.must_equal 412 + + get "/jimmy/documents/archive/foo" + last_response.body.must_equal "lorem ipsum" + end + + it "succeeds when the document does not exist" do + put "/jimmy/documents/archive/bar", "my little content" + + last_response.status.must_equal 200 + end + end end describe "exsting content without serializer registered for the given content-type" do