publish_my_data 0.0.15 → 0.0.16

Sign up to get free protection for your applications and to get access to all the features.
@@ -51,8 +51,18 @@ module PublishMyData
51
51
  prefix = "dataset_data_#{@dataset.slug}_#{@dataset.modified.strftime("%Y%m%d")}"
52
52
  downloads = s3.buckets[PublishMyData.dataset_downloads_s3_bucket].objects.with_prefix(prefix).to_a
53
53
 
54
- if downloads.any?
55
- latest_download = downloads.last
54
+ # filter the downloads to only include ones with a timestamp equal to or after the dataset modified date.
55
+ # (ones older than this are out of date)
56
+ current_downloads = downloads.select do |d|
57
+ date_portion = d.public_url.to_s.split("_").last.split('.').first #between last underscore and first dot.
58
+ file_timestamp = DateTime.parse(date_portion)
59
+ file_timestamp >= @dataset.modified
60
+ end
61
+
62
+ # if we can't find a current download it's cos we haven't generated it yet since ds was modified
63
+ # ... and we should 404.
64
+ if current_downloads.any?
65
+ latest_download = current_downloads.last
56
66
  redirect_to latest_download.public_url.to_s
57
67
  else
58
68
  raise Tripod::Errors::ResourceNotFound
@@ -1,3 +1,3 @@
1
1
  module PublishMyData
2
- VERSION = "0.0.15"
2
+ VERSION = "0.0.16"
3
3
  end
@@ -204,7 +204,7 @@ module PublishMyData
204
204
 
205
205
  let(:dataset) { FactoryGirl.create(:my_dataset) }
206
206
 
207
- context "when a download exists on s3" do
207
+ context "when a download exists on s3 for today" do
208
208
 
209
209
  before do
210
210
  # make some downloads.
@@ -229,12 +229,33 @@ module PublishMyData
229
229
 
230
230
  end
231
231
 
232
+ context "when a download exists on s3 for today, but before the modified date" do
233
+
234
+ before do
235
+ # make some downloads.
236
+ s3 = AWS::S3.new
237
+ bucket = s3.buckets[PublishMyData.dataset_downloads_s3_bucket]
238
+
239
+ @obj1 = bucket.objects.create("dataset_data_#{dataset.slug}_201007011159.nt.zip", 'data')
240
+
241
+ # make them public readable
242
+ [@obj1].each { |o| o.acl = :public_read }
243
+ end
244
+
245
+ it "should 404" do
246
+ get "dump", :id => dataset.slug, :use_route => :publish_my_data
247
+ response.should be_not_found
248
+ end
249
+
250
+ end
251
+
232
252
  context "when a download doesn't exist on s3" do
233
253
  it "should 404" do
234
254
  get "dump", :id => dataset.slug, :use_route => :publish_my_data
235
255
  response.should be_not_found
236
256
  end
237
257
  end
258
+
238
259
  end
239
260
 
240
261
  context "when a dataset with that slug doesn't exist" do