{"action":"created","issue":{"url":"https://api.github.com/repos/DQNEO/Amazon-S3-Thin/issues/12","labels_url":"https://api.github.com/repos/DQNEO/Amazon-S3-Thin/issues/12/labels{/name}","comments_url":"https://api.github.com/repos/DQNEO/Amazon-S3-Thin/issues/12/comments","events_url":"https://api.github.com/repos/DQNEO/Amazon-S3-Thin/issues/12/events","html_url":"https://github.com/DQNEO/Amazon-S3-Thin/pull/12","id":70866363,"number":12,"title":"new delete_multiple_objects() method","user":{"login":"garu","id":52187,"avatar_url":"https://avatars.githubusercontent.com/u/52187?v=3","gravatar_id":"","url":"https://api.github.com/users/garu","html_url":"https://github.com/garu","followers_url":"https://api.github.com/users/garu/followers","following_url":"https://api.github.com/users/garu/following{/other_user}","gists_url":"https://api.github.com/users/garu/gists{/gist_id}","starred_url":"https://api.github.com/users/garu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/garu/subscriptions","organizations_url":"https://api.github.com/users/garu/orgs","repos_url":"https://api.github.com/users/garu/repos","events_url":"https://api.github.com/users/garu/events{/privacy}","received_events_url":"https://api.github.com/users/garu/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2015-04-25T06:48:31Z","updated_at":"2015-04-25T19:24:27Z","closed_at":"2015-04-25T19:23:20Z","pull_request":{"url":"https://api.github.com/repos/DQNEO/Amazon-S3-Thin/pulls/12","html_url":"https://github.com/DQNEO/Amazon-S3-Thin/pull/12","diff_url":"https://github.com/DQNEO/Amazon-S3-Thin/pull/12.diff","patch_url":"https://github.com/DQNEO/Amazon-S3-Thin/pull/12.patch"},"body":"Hi! Me again :)\r\n\r\nWhile I was coding a project that uses Amazon::S3::Thin, I realized if I wanted to delete an entire \"tree\" (or key prefix in S3 terms), I could fetch all keys using `list_objects()`, but I'd have to send one `delete_object()` request per key, which would definitely slow things down!\r\n\r\nFortunately, the REST API provides the \"[DELETE multi objects](http://docs.aws.amazon.com/AmazonS3/latest/API/multiobjectdeleteapi.html)\" endpoint for us, so I went ahead and implemented it :)\r\n\r\nAs usual, this PR also contains testing code and documentation. In order to be fully compliant with Amazon's API I had to depend on \"Encode\" and \"Digest::MD5\", both core modules since forever and loaded (via require) only on demand, during runtime, so it would not bloat the class.\r\n\r\nThe code works like a charm and I'm using it in production, so if there's anything I can do to help you push this to CPAN, please don't hesitate and just let me know :)\r\n\r\nCheers! And thanks again for all the great work!"},"comment":{"url":"https://api.github.com/repos/DQNEO/Amazon-S3-Thin/issues/comments/96267019","html_url":"https://github.com/DQNEO/Amazon-S3-Thin/pull/12#issuecomment-96267019","issue_url":"https://api.github.com/repos/DQNEO/Amazon-S3-Thin/issues/12","id":96267019,"user":{"login":"DQNEO","id":188741,"avatar_url":"https://avatars.githubusercontent.com/u/188741?v=3","gravatar_id":"","url":"https://api.github.com/users/DQNEO","html_url":"https://github.com/DQNEO","followers_url":"https://api.github.com/users/DQNEO/followers","following_url":"https://api.github.com/users/DQNEO/following{/other_user}","gists_url":"https://api.github.com/users/DQNEO/gists{/gist_id}","starred_url":"https://api.github.com/users/DQNEO/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DQNEO/subscriptions","organizations_url":"https://api.github.com/users/DQNEO/orgs","repos_url":"https://api.github.com/users/DQNEO/repos","events_url":"https://api.github.com/users/DQNEO/events{/privacy}","received_events_url":"https://api.github.com/users/DQNEO/received_events","type":"User","site_admin":false},"created_at":"2015-04-25T19:24:27Z","updated_at":"2015-04-25T19:24:27Z","body":"Excellent !!\r\nYou are a great programmer.\r\n\r\nThank you for your contribution."}}