jekyll-s3 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -68,6 +68,12 @@ Enable the headless mode by adding the `--headless` or `-h` argument after
68
68
 
69
69
  ## Changelog
70
70
 
71
+ ### 2.0.0
72
+
73
+ * Set content type of the uploaded files
74
+ * (Increment major version because of the changed return value in
75
+ Jekyll::S3::CLI::run)
76
+
71
77
  ### 1.0.0
72
78
 
73
79
  * CloudFront invalidation on changed files only
@@ -0,0 +1,373 @@
1
+ ---
2
+ recorded_with: VCR 2.2.4
3
+ http_interactions:
4
+ - request:
5
+ method: get
6
+ uri: https://s3.amazonaws.com/
7
+ body:
8
+ string: ""
9
+ headers:
10
+ Date:
11
+ - Tue, 04 Dec 2012 22:14:48 +0200
12
+ Accept:
13
+ - "*/*"
14
+ Authorization:
15
+ - AWS
16
+ User-Agent:
17
+ - aws-sdk-ruby/1.5.8 ruby/1.8.7 i686-darwin11.4.0
18
+ Content-Type:
19
+ - ""
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Tue, 04 Dec 2012 20:14:47 GMT
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Server:
30
+ - AmazonS3
31
+ X-Amz-Request-Id:
32
+ - 8080972FB30862AC
33
+ X-Amz-Id-2:
34
+ - S8vcQZBZvDhNSsJ3IbFdkdTXkhUlTCuw9/gW9GtFtXe27v+njG/73G49fxQn10UJ
35
+ Content-Type:
36
+ - application/xml
37
+ body:
38
+ string: |-
39
+ <?xml version="1.0" encoding="UTF-8"?>
40
+ <ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>3855ebae0f370c3dd0c8d8031863792112bd2a2cb18fa310d3f463ae0dea62f1</ID><DisplayName></DisplayName></Owner><Buckets><Bucket><Name>jekyll-s3-test.net</Name><CreationDate>2012-10-14T12:58:37.000Z</CreationDate></Bucket></Buckets></ListAllMyBucketsResult>
41
+ http_version:
42
+ recorded_at: Tue, 04 Dec 2012 20:14:48 GMT
43
+ - request:
44
+ method: get
45
+ uri: https://s3.amazonaws.com/jekyll-s3-test.net?max-keys=1000
46
+ body:
47
+ string: ""
48
+ headers:
49
+ Date:
50
+ - Tue, 04 Dec 2012 22:14:48 +0200
51
+ Accept:
52
+ - "*/*"
53
+ Authorization:
54
+ - AWS
55
+ User-Agent:
56
+ - aws-sdk-ruby/1.5.8 ruby/1.8.7 i686-darwin11.4.0
57
+ Content-Type:
58
+ - ""
59
+ response:
60
+ status:
61
+ code: 200
62
+ message: OK
63
+ headers:
64
+ Date:
65
+ - Tue, 04 Dec 2012 20:14:48 GMT
66
+ Transfer-Encoding:
67
+ - chunked
68
+ Server:
69
+ - AmazonS3
70
+ X-Amz-Request-Id:
71
+ - 1C989B3F5D04453E
72
+ X-Amz-Id-2:
73
+ - Oi66Q4pmZ8ZqD1VI+tIfG6VV1hTlKwlvl/e4uQCTfug8iqsH2o+h8m+ba0S/clUO
74
+ Content-Type:
75
+ - application/xml
76
+ body:
77
+ string: |-
78
+ <?xml version="1.0" encoding="UTF-8"?>
79
+ <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Name>jekyll-s3-test.net</Name><Prefix></Prefix><Marker></Marker><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated><Contents><Key>css/styles.css</Key><LastModified>2012-12-04T20:08:29.000Z</LastModified><ETag>&quot;8fcf43a38cbf0c502f029a50645f2374&quot;</ETag><Size>10</Size><Owner><ID>3855ebae0f370c3dd0c8d8031863792112bd2a2cb18fa310d3f463ae0dea62f1</ID><DisplayName>foo83</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>index.html</Key><LastModified>2012-12-04T20:08:30.000Z</LastModified><ETag>&quot;8a8892a2b0fad281f26c0dedbff7011a&quot;</ETag><Size>60</Size><Owner><ID>3855ebae0f370c3dd0c8d8031863792112bd2a2cb18fa310d3f463ae0dea62f1</ID><DisplayName>foo83</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents></ListBucketResult>
80
+ http_version:
81
+ recorded_at: Tue, 04 Dec 2012 20:14:49 GMT
82
+ - request:
83
+ method: head
84
+ uri: https://s3.amazonaws.com/jekyll-s3-test.net/css/styles.css
85
+ body:
86
+ string: ""
87
+ headers:
88
+ Date:
89
+ - Tue, 04 Dec 2012 22:14:49 +0200
90
+ Accept:
91
+ - "*/*"
92
+ Authorization:
93
+ - AWS
94
+ User-Agent:
95
+ - aws-sdk-ruby/1.5.8 ruby/1.8.7 i686-darwin11.4.0
96
+ Content-Type:
97
+ - ""
98
+ response:
99
+ status:
100
+ code: 200
101
+ message: OK
102
+ headers:
103
+ Last-Modified:
104
+ - Tue, 04 Dec 2012 20:08:29 GMT
105
+ Date:
106
+ - Tue, 04 Dec 2012 20:14:49 GMT
107
+ Etag:
108
+ - "\"8fcf43a38cbf0c502f029a50645f2374\""
109
+ Server:
110
+ - AmazonS3
111
+ Accept-Ranges:
112
+ - bytes
113
+ X-Amz-Request-Id:
114
+ - CB0A11392C67D36D
115
+ Content-Length:
116
+ - "10"
117
+ X-Amz-Id-2:
118
+ - 223ZlIxWI8BGtz62wuef/Z+ONTpOype/yYCIezN+M1NXOe6ziTMiHRWoAL0iTVGz
119
+ Content-Type:
120
+ - ""
121
+ body:
122
+ string: ""
123
+ http_version:
124
+ recorded_at: Tue, 04 Dec 2012 20:14:50 GMT
125
+ - request:
126
+ method: head
127
+ uri: https://s3.amazonaws.com/jekyll-s3-test.net/css/styles.css
128
+ body:
129
+ string: ""
130
+ headers:
131
+ Date:
132
+ - Tue, 04 Dec 2012 22:14:50 +0200
133
+ Accept:
134
+ - "*/*"
135
+ Authorization:
136
+ - AWS
137
+ User-Agent:
138
+ - aws-sdk-ruby/1.5.8 ruby/1.8.7 i686-darwin11.4.0
139
+ Content-Type:
140
+ - ""
141
+ response:
142
+ status:
143
+ code: 200
144
+ message: OK
145
+ headers:
146
+ Last-Modified:
147
+ - Tue, 04 Dec 2012 20:08:29 GMT
148
+ Date:
149
+ - Tue, 04 Dec 2012 20:14:49 GMT
150
+ Etag:
151
+ - "\"8fcf43a38cbf0c502f029a50645f2374\""
152
+ Server:
153
+ - AmazonS3
154
+ Accept-Ranges:
155
+ - bytes
156
+ X-Amz-Request-Id:
157
+ - 3C5E638312092222
158
+ Content-Length:
159
+ - "10"
160
+ X-Amz-Id-2:
161
+ - 7rURYcFJ43UZ8SD8S5L17O63LlagCMeUO0QweiR1yWAJDWQOdqChJCNbIXajrVk2
162
+ Content-Type:
163
+ - ""
164
+ body:
165
+ string: ""
166
+ http_version:
167
+ recorded_at: Tue, 04 Dec 2012 20:14:50 GMT
168
+ - request:
169
+ method: head
170
+ uri: https://s3.amazonaws.com/jekyll-s3-test.net/index.html
171
+ body:
172
+ string: ""
173
+ headers:
174
+ Date:
175
+ - Tue, 04 Dec 2012 22:14:50 +0200
176
+ Accept:
177
+ - "*/*"
178
+ Authorization:
179
+ - AWS
180
+ User-Agent:
181
+ - aws-sdk-ruby/1.5.8 ruby/1.8.7 i686-darwin11.4.0
182
+ Content-Type:
183
+ - ""
184
+ response:
185
+ status:
186
+ code: 200
187
+ message: OK
188
+ headers:
189
+ Last-Modified:
190
+ - Tue, 04 Dec 2012 20:08:30 GMT
191
+ Date:
192
+ - Tue, 04 Dec 2012 20:14:50 GMT
193
+ Etag:
194
+ - "\"8a8892a2b0fad281f26c0dedbff7011a\""
195
+ Server:
196
+ - AmazonS3
197
+ Accept-Ranges:
198
+ - bytes
199
+ X-Amz-Request-Id:
200
+ - 34EB3FD0E7A16391
201
+ Content-Length:
202
+ - "60"
203
+ X-Amz-Id-2:
204
+ - 0jmRBRuywfUE1+I/AHFyNnwEtJVFx11BerAuZ2x6+f88J1Kfc6BeK9tqF399UHmF
205
+ Content-Type:
206
+ - ""
207
+ body:
208
+ string: ""
209
+ http_version:
210
+ recorded_at: Tue, 04 Dec 2012 20:14:51 GMT
211
+ - request:
212
+ method: head
213
+ uri: https://s3.amazonaws.com/jekyll-s3-test.net/index.html
214
+ body:
215
+ string: ""
216
+ headers:
217
+ Date:
218
+ - Tue, 04 Dec 2012 22:14:51 +0200
219
+ Accept:
220
+ - "*/*"
221
+ Authorization:
222
+ - AWS
223
+ User-Agent:
224
+ - aws-sdk-ruby/1.5.8 ruby/1.8.7 i686-darwin11.4.0
225
+ Content-Type:
226
+ - ""
227
+ response:
228
+ status:
229
+ code: 200
230
+ message: OK
231
+ headers:
232
+ Last-Modified:
233
+ - Tue, 04 Dec 2012 20:08:30 GMT
234
+ Date:
235
+ - Tue, 04 Dec 2012 20:14:50 GMT
236
+ Etag:
237
+ - "\"8a8892a2b0fad281f26c0dedbff7011a\""
238
+ Server:
239
+ - AmazonS3
240
+ Accept-Ranges:
241
+ - bytes
242
+ X-Amz-Request-Id:
243
+ - 4A9FE67641D8BB37
244
+ Content-Length:
245
+ - "60"
246
+ X-Amz-Id-2:
247
+ - vKyYjHLhyoJf1UYWBW5yL2gh8TQXwYeXqJmG6lIcvxlhPVEdsntLRsiKxZsXFsxc
248
+ Content-Type:
249
+ - ""
250
+ body:
251
+ string: ""
252
+ http_version:
253
+ recorded_at: Tue, 04 Dec 2012 20:14:51 GMT
254
+ - request:
255
+ method: put
256
+ uri: https://s3.amazonaws.com/jekyll-s3-test.net/index.html
257
+ body:
258
+ string: |
259
+ <html>
260
+ <head>
261
+ <title>hello!</title>
262
+ </head>
263
+ <body>
264
+ This is something for a change!
265
+ </body>
266
+ </html>
267
+
268
+ headers:
269
+ Date:
270
+ - Tue, 04 Dec 2012 22:14:51 +0200
271
+ Accept:
272
+ - "*/*"
273
+ Authorization:
274
+ - AWS
275
+ User-Agent:
276
+ - aws-sdk-ruby/1.5.8 ruby/1.8.7 i686-darwin11.4.0
277
+ Content-Length:
278
+ - "115"
279
+ Content-Type:
280
+ - ""
281
+ response:
282
+ status:
283
+ code: 200
284
+ message: OK
285
+ headers:
286
+ Date:
287
+ - Tue, 04 Dec 2012 20:14:51 GMT
288
+ Etag:
289
+ - "\"c9e51ad849ff680347e121815eada3d1\""
290
+ Server:
291
+ - AmazonS3
292
+ X-Amz-Request-Id:
293
+ - 61EEF921591CDDE1
294
+ Content-Length:
295
+ - "0"
296
+ X-Amz-Id-2:
297
+ - KNbrgH9WWTLC3+M6aAH5zhD0212aJKK96XTu40ZN2JSt2PtGANhlF8ym9tTGgSpR
298
+ body:
299
+ string: ""
300
+ http_version:
301
+ recorded_at: Tue, 04 Dec 2012 20:14:52 GMT
302
+ - request:
303
+ method: get
304
+ uri: https://s3.amazonaws.com/jekyll-s3-test.net?max-keys=1000
305
+ body:
306
+ string: ""
307
+ headers:
308
+ Date:
309
+ - Tue, 04 Dec 2012 22:14:52 +0200
310
+ Accept:
311
+ - "*/*"
312
+ Authorization:
313
+ - AWS
314
+ User-Agent:
315
+ - aws-sdk-ruby/1.5.8 ruby/1.8.7 i686-darwin11.4.0
316
+ Content-Type:
317
+ - ""
318
+ response:
319
+ status:
320
+ code: 200
321
+ message: OK
322
+ headers:
323
+ Date:
324
+ - Tue, 04 Dec 2012 20:14:52 GMT
325
+ Transfer-Encoding:
326
+ - chunked
327
+ Server:
328
+ - AmazonS3
329
+ X-Amz-Request-Id:
330
+ - 03E62619256C31A7
331
+ X-Amz-Id-2:
332
+ - BdmZizRUIFpIJeRQp2BeJqu4bViMq7i97ZSl111JKI0giDYkkmOIUMu3HltRvCZ1
333
+ Content-Type:
334
+ - application/xml
335
+ body:
336
+ string: |-
337
+ <?xml version="1.0" encoding="UTF-8"?>
338
+ <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Name>jekyll-s3-test.net</Name><Prefix></Prefix><Marker></Marker><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated><Contents><Key>css/styles.css</Key><LastModified>2012-12-04T20:08:29.000Z</LastModified><ETag>&quot;8fcf43a38cbf0c502f029a50645f2374&quot;</ETag><Size>10</Size><Owner><ID>3855ebae0f370c3dd0c8d8031863792112bd2a2cb18fa310d3f463ae0dea62f1</ID><DisplayName>foo83</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents><Contents><Key>index.html</Key><LastModified>2012-12-04T20:14:51.000Z</LastModified><ETag>&quot;c9e51ad849ff680347e121815eada3d1&quot;</ETag><Size>115</Size><Owner><ID>3855ebae0f370c3dd0c8d8031863792112bd2a2cb18fa310d3f463ae0dea62f1</ID><DisplayName>foo83</DisplayName></Owner><StorageClass>STANDARD</StorageClass></Contents></ListBucketResult>
339
+ http_version:
340
+ recorded_at: Tue, 04 Dec 2012 20:14:53 GMT
341
+ - request:
342
+ method: post
343
+ uri: https://cloudfront.amazonaws.com/2012-05-05/distribution/foo/invalidation
344
+ body:
345
+ string: "\n <InvalidationBatch>\n <Paths>\n <Quantity>2</Quantity>\n <Items>\n <Path>/index.html</Path><Path>/</Path>\n </Items>\n </Paths>\n <CallerReference>1354652093</CallerReference>\n </InvalidationBatch>\n "
346
+ headers:
347
+ X-Amz-Date:
348
+ - Tue, 04 Dec 2012 22:14:53 EET
349
+ Authorization:
350
+ - AWS
351
+ Content-Type:
352
+ - text/xml
353
+ response:
354
+ status:
355
+ code: 201
356
+ message: Created
357
+ headers:
358
+ Date:
359
+ - Tue, 04 Dec 2012 20:14:53 GMT
360
+ Location:
361
+ - https://cloudfront.amazonaws.com/2012-05-05/distribution/foo/invalidation/I35VKBAYIKCW1J
362
+ Content-Length:
363
+ - "380"
364
+ Content-Type:
365
+ - text/xml
366
+ X-Amzn-Requestid:
367
+ - 434f5fea-3e4f-11e2-a5d7-53af0194f490
368
+ body:
369
+ string: |-
370
+ <?xml version="1.0"?>
371
+ <Invalidation xmlns="http://cloudfront.amazonaws.com/doc/2012-05-05/"><Id>I35VKBAYIKCW1J</Id><Status>InProgress</Status><CreateTime>2012-12-04T20:14:53.123Z</CreateTime><InvalidationBatch><Paths><Quantity>2</Quantity><Items><Path>/</Path><Path>/index.html</Path></Items></Paths><CallerReference>1354652093</CallerReference></InvalidationBatch></Invalidation>
372
+ http_version:
373
+ recorded_at: Tue, 04 Dec 2012 20:14:55 GMT
@@ -12,3 +12,11 @@ Feature: Invalidate the Cloudfront distribution
12
12
  And the configuration contains the Cloudfront distribution id
13
13
  Then jekyll-s3 will push my blog to S3 and invalidate the Cloudfront distribution
14
14
  And report that it uploaded 2 new and 0 changed files into S3
15
+
16
+ @s3-and-cloudfront-when-updating-a-file
17
+ Scenario: Update a blog entry and then upload
18
+ When my Jekyll site is in "features/support/test_site_dirs/cdn-powered.with-one-change.blog.fi"
19
+ And the configuration contains the Cloudfront distribution id
20
+ Then jekyll-s3 will push my blog to S3 and invalidate the Cloudfront distribution
21
+ And report that it uploaded 0 new and 1 changed files into S3
22
+ And report that it invalidated only the changed file on Cloudfront
@@ -10,7 +10,7 @@ When /^the configuration contains the Cloudfront distribution id$/ do
10
10
  # Just here for readability
11
11
  end
12
12
 
13
- Then /^jekyll-s(\d+) will push my blog to S(\d+) and invalidate the Cloudfront distribution$/ do
13
+ Then /^jekyll-s(\d+) will push my blog to S(\d+) and invalidate the Cloudfront distribution$/ do
14
14
  |arg1, arg2|
15
15
  do_run
16
16
  end
@@ -25,8 +25,19 @@ Then /^report that it deleted (\d+) file from S3$/ do |amount_of_deleted_files|
25
25
  raise unless @amount_of_deleted_files == amount_of_deleted_files.to_i
26
26
  end
27
27
 
28
+ Then /^report that it invalidated only the changed file on Cloudfront$/ do
29
+ # The Cloudfront root object is always invalidated;
30
+ # it counts as an invalidation.
31
+ root_object_count = 1
32
+ changed_files = 1
33
+ raise unless @amount_of_invalidated_items == root_object_count + changed_files
34
+ end
35
+
28
36
  def do_run
29
37
  in_headless_mode = true
30
- @amount_of_new_files, @amount_of_changed_files, @amount_of_deleted_files =
31
- Jekyll::S3::CLI.new.run("#{@blog_dir}/_site", in_headless_mode)
38
+ result = Jekyll::S3::CLI.new.run("#{@blog_dir}/_site", in_headless_mode)
39
+ @amount_of_new_files = result[:new_files_count]
40
+ @amount_of_changed_files = result[:changed_files_count]
41
+ @amount_of_deleted_files = result[:deleted_files_count]
42
+ @amount_of_invalidated_items = result[:invalidated_items_count]
32
43
  end
@@ -0,0 +1,4 @@
1
+ s3_id: foo
2
+ s3_secret: foo
3
+ s3_bucket: jekyll-s3-test.net
4
+ cloudfront_distribution_id: foo
@@ -0,0 +1,8 @@
1
+ <html>
2
+ <head>
3
+ <title>hello!</title>
4
+ </head>
5
+ <body>
6
+ This is something for a change!
7
+ </body>
8
+ </html>
@@ -11,5 +11,6 @@ VCR.cucumber_tags do |t|
11
11
  t.tag '@only-changed-files'
12
12
  t.tag '@no-new-or-changed-files'
13
13
  t.tag '@s3-and-cloudfront'
14
+ t.tag '@s3-and-cloudfront-when-updating-a-file'
14
15
  t.tag '@one-file-to-delete'
15
16
  end
data/jekyll-s3.gemspec CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "jekyll-s3"
6
- s.version = "1.0.0"
6
+ s.version = "2.0.0"
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["Philippe Creux", "Lauri Lehmijoki"]
9
9
  s.email = ["pcreux@gmail.com", "lauri.lehmijoki@iki.fi"]
@@ -17,8 +17,9 @@ distribution, making it easy to deliver your blog via the CDN.}
17
17
 
18
18
  s.add_dependency 'aws-sdk', '~> 1.5.6'
19
19
  s.add_dependency 'filey-diff', '~> 0.0.2'
20
- s.add_dependency 'simple-cloudfront-invalidator', '~> 0.0.1'
20
+ s.add_dependency 'simple-cloudfront-invalidator', '~> 1.0.0'
21
21
  s.add_dependency 'erubis', '~> 2.7.0'
22
+ s.add_dependency 'mime-types', '= 1.19'
22
23
 
23
24
  s.add_development_dependency 'rspec'
24
25
  s.add_development_dependency 'rspec-expectations'
@@ -14,7 +14,8 @@ module Jekyll
14
14
  report = SimpleCloudfrontInvalidator::CloudfrontClient.new(
15
15
  aws_key, aws_secret, cloudfront_distribution_id).invalidate(
16
16
  s3_object_keys)
17
- puts report
17
+ puts report[:text_report]
18
+ report[:invalidated_items_count]
18
19
  end
19
20
  end
20
21
  end
data/lib/jekyll-s3.rb CHANGED
@@ -4,6 +4,7 @@ require 'erubis'
4
4
  require 'aws-sdk'
5
5
  require 'simple-cloudfront-invalidator'
6
6
  require 'filey-diff'
7
+ require 'mime/types'
7
8
 
8
9
  module Jekyll
9
10
  module S3
data/lib/jekyll-s3/cli.rb CHANGED
@@ -10,10 +10,16 @@ module Jekyll
10
10
  def run(site_dir, in_headless_mode = false)
11
11
  CLI.check_configuration site_dir
12
12
  config = Jekyll::S3::ConfigLoader.load_configuration site_dir
13
- new_files_count, changed_files_count, deleted_files_count, changed_files =
13
+ new_files_count, changed_files_count, deleted_files_count, changed_files =
14
14
  Uploader.run(site_dir, config, in_headless_mode)
15
- CLI.invalidate_cf_dist_if_configured(config, changed_files)
16
- [new_files_count, changed_files_count, deleted_files_count]
15
+ invalidated_items_count =
16
+ CLI.invalidate_cf_dist_if_configured(config, changed_files)
17
+ {
18
+ :new_files_count => new_files_count,
19
+ :changed_files_count => changed_files_count,
20
+ :deleted_files_count => deleted_files_count,
21
+ :invalidated_items_count => invalidated_items_count
22
+ }
17
23
  rescue JekyllS3Error => e
18
24
  puts e.message
19
25
  exit 1
@@ -24,7 +30,11 @@ module Jekyll
24
30
  def self.invalidate_cf_dist_if_configured(config, changed_files)
25
31
  cloudfront_configured = config['cloudfront_distribution_id'] &&
26
32
  (not config['cloudfront_distribution_id'].empty?)
27
- Jekyll::Cloudfront::Invalidator.invalidate(config, changed_files) if cloudfront_configured
33
+ invalidated_items_count = if cloudfront_configured
34
+ Jekyll::Cloudfront::Invalidator.invalidate(config, changed_files)
35
+ else
36
+ 0
37
+ end
28
38
  end
29
39
 
30
40
  def self.check_configuration(site_dir)
@@ -53,7 +53,12 @@ module Jekyll
53
53
 
54
54
  def self.upload_file(file, s3, s3_bucket_name, site_dir)
55
55
  Retry.run_with_retry do
56
- if s3.buckets[s3_bucket_name].objects[file].write( File.read("#{site_dir}/#{file}"))
56
+ mime_type = MIME::Types.type_for(file)
57
+ upload_succeeded = s3.buckets[s3_bucket_name].objects[file].write(
58
+ File.read("#{site_dir}/#{file}"),
59
+ :content_type => mime_type.first
60
+ )
61
+ if upload_succeeded
57
62
  puts("Upload #{file}: Success!")
58
63
  else
59
64
  puts("Upload #{file}: FAILURE!")
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jekyll::S3::Uploader do
4
+ describe 'content type resolving' do
5
+ it 'adds the content type of the uploaded CSS file into the S3 object' do
6
+ file_to_upload = 'css/styles.css'
7
+ Jekyll::S3::Uploader.send(:upload_file,
8
+ file_to_upload,
9
+ create_content_type_verifying_s3(file_to_upload),
10
+ 'some_bucket_name',
11
+ 'features/support/test_site_dirs/my.blog.com/_site')
12
+ end
13
+
14
+ it 'adds the content type of the uploaded HTML file into the S3 object' do
15
+ file_to_upload = 'index.html'
16
+ Jekyll::S3::Uploader.send(:upload_file,
17
+ file_to_upload,
18
+ create_content_type_verifying_s3(file_to_upload),
19
+ 'some_bucket_name',
20
+ 'features/support/test_site_dirs/my.blog.com/_site')
21
+ end
22
+
23
+ def create_content_type_verifying_s3(file_to_upload)
24
+ def create_objects(file_to_upload)
25
+ def create_html_s3_object(file_to_upload)
26
+ s3_object = stub('s3_object')
27
+ content_type = (file_to_upload.end_with?'html') ? 'text/html' : 'text/css'
28
+ s3_object.should_receive(:write).with(
29
+ anything(),
30
+ # Ensure that the write method is called with the correct content type:
31
+ :content_type => content_type
32
+ )
33
+ s3_object
34
+ end
35
+ objects = {}
36
+ objects[file_to_upload] = create_html_s3_object(file_to_upload)
37
+ objects
38
+ end
39
+ def create_bucket(file_to_upload)
40
+ bucket = stub('bucket')
41
+ bucket.stub(:objects => create_objects(file_to_upload))
42
+ bucket
43
+ end
44
+ buckets = stub('buckets')
45
+ buckets.stub(:[] => create_bucket(file_to_upload))
46
+ s3 = stub('s3')
47
+ s3.stub(:buckets => buckets)
48
+ s3
49
+ end
50
+ end
51
+ end
metadata CHANGED
@@ -1,201 +1,222 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: jekyll-s3
3
- version: !ruby/object:Gem::Version
4
- hash: 23
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 0
10
- version: 1.0.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Philippe Creux
14
9
  - Lauri Lehmijoki
15
10
  autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
-
19
- date: 2012-12-04 00:00:00 Z
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
13
+ date: 2012-12-06 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: aws-sdk
17
+ requirement: !ruby/object:Gem::Requirement
23
18
  none: false
24
- requirements:
19
+ requirements:
25
20
  - - ~>
26
- - !ruby/object:Gem::Version
27
- hash: 15
28
- segments:
29
- - 1
30
- - 5
31
- - 6
21
+ - !ruby/object:Gem::Version
32
22
  version: 1.5.6
33
- prerelease: false
34
23
  type: :runtime
35
- name: aws-sdk
36
- requirement: *id001
37
- - !ruby/object:Gem::Dependency
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
39
26
  none: false
40
- requirements:
27
+ requirements:
41
28
  - - ~>
42
- - !ruby/object:Gem::Version
43
- hash: 27
44
- segments:
45
- - 0
46
- - 0
47
- - 2
48
- version: 0.0.2
49
- prerelease: false
50
- type: :runtime
29
+ - !ruby/object:Gem::Version
30
+ version: 1.5.6
31
+ - !ruby/object:Gem::Dependency
51
32
  name: filey-diff
52
- requirement: *id002
53
- - !ruby/object:Gem::Dependency
54
- version_requirements: &id003 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
55
34
  none: false
56
- requirements:
35
+ requirements:
57
36
  - - ~>
58
- - !ruby/object:Gem::Version
59
- hash: 29
60
- segments:
61
- - 0
62
- - 0
63
- - 1
64
- version: 0.0.1
65
- prerelease: false
37
+ - !ruby/object:Gem::Version
38
+ version: 0.0.2
66
39
  type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 0.0.2
47
+ - !ruby/object:Gem::Dependency
67
48
  name: simple-cloudfront-invalidator
68
- requirement: *id003
69
- - !ruby/object:Gem::Dependency
70
- version_requirements: &id004 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
71
50
  none: false
72
- requirements:
51
+ requirements:
73
52
  - - ~>
74
- - !ruby/object:Gem::Version
75
- hash: 19
76
- segments:
77
- - 2
78
- - 7
79
- - 0
80
- version: 2.7.0
81
- prerelease: false
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
82
55
  type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: 1.0.0
63
+ - !ruby/object:Gem::Dependency
83
64
  name: erubis
84
- requirement: *id004
85
- - !ruby/object:Gem::Dependency
86
- version_requirements: &id005 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
87
66
  none: false
88
- requirements:
89
- - - ">="
90
- - !ruby/object:Gem::Version
91
- hash: 3
92
- segments:
93
- - 0
94
- version: "0"
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ version: 2.7.0
71
+ type: :runtime
95
72
  prerelease: false
96
- type: :development
97
- name: rspec
98
- requirement: *id005
99
- - !ruby/object:Gem::Dependency
100
- version_requirements: &id006 !ruby/object:Gem::Requirement
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: 2.7.0
79
+ - !ruby/object:Gem::Dependency
80
+ name: mime-types
81
+ requirement: !ruby/object:Gem::Requirement
101
82
  none: false
102
- requirements:
103
- - - ">="
104
- - !ruby/object:Gem::Version
105
- hash: 3
106
- segments:
107
- - 0
108
- version: "0"
83
+ requirements:
84
+ - - '='
85
+ - !ruby/object:Gem::Version
86
+ version: '1.19'
87
+ type: :runtime
109
88
  prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - '='
93
+ - !ruby/object:Gem::Version
94
+ version: '1.19'
95
+ - !ruby/object:Gem::Dependency
96
+ name: rspec
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
110
103
  type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
111
112
  name: rspec-expectations
112
- requirement: *id006
113
- - !ruby/object:Gem::Dependency
114
- version_requirements: &id007 !ruby/object:Gem::Requirement
113
+ requirement: !ruby/object:Gem::Requirement
115
114
  none: false
116
- requirements:
117
- - - ">="
118
- - !ruby/object:Gem::Version
119
- hash: 3
120
- segments:
121
- - 0
122
- version: "0"
123
- prerelease: false
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
124
119
  type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
125
128
  name: cucumber
126
- requirement: *id007
127
- - !ruby/object:Gem::Dependency
128
- version_requirements: &id008 !ruby/object:Gem::Requirement
129
+ requirement: !ruby/object:Gem::Requirement
129
130
  none: false
130
- requirements:
131
- - - ">="
132
- - !ruby/object:Gem::Version
133
- hash: 1
134
- segments:
135
- - 0
136
- - 4
137
- - 7
138
- version: 0.4.7
139
- prerelease: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
140
135
  type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ - !ruby/object:Gem::Dependency
141
144
  name: aruba
142
- requirement: *id008
143
- - !ruby/object:Gem::Dependency
144
- version_requirements: &id009 !ruby/object:Gem::Requirement
145
+ requirement: !ruby/object:Gem::Requirement
145
146
  none: false
146
- requirements:
147
- - - ">="
148
- - !ruby/object:Gem::Version
149
- hash: 3
150
- segments:
151
- - 0
152
- version: "0"
153
- prerelease: false
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: 0.4.7
154
151
  type: :development
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: 0.4.7
159
+ - !ruby/object:Gem::Dependency
155
160
  name: rake
156
- requirement: *id009
157
- - !ruby/object:Gem::Dependency
158
- version_requirements: &id010 !ruby/object:Gem::Requirement
161
+ requirement: !ruby/object:Gem::Requirement
159
162
  none: false
160
- requirements:
161
- - - ">="
162
- - !ruby/object:Gem::Version
163
- hash: 3
164
- segments:
165
- - 0
166
- version: "0"
167
- prerelease: false
163
+ requirements:
164
+ - - ! '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
168
167
  type: :development
168
+ prerelease: false
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ! '>='
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ - !ruby/object:Gem::Dependency
169
176
  name: vcr
170
- requirement: *id010
171
- - !ruby/object:Gem::Dependency
172
- version_requirements: &id011 !ruby/object:Gem::Requirement
177
+ requirement: !ruby/object:Gem::Requirement
173
178
  none: false
174
- requirements:
175
- - - ">="
176
- - !ruby/object:Gem::Version
177
- hash: 3
178
- segments:
179
- - 0
180
- version: "0"
181
- prerelease: false
179
+ requirements:
180
+ - - ! '>='
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
182
183
  type: :development
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ - !ruby/object:Gem::Dependency
183
192
  name: webmock
184
- requirement: *id011
185
- description: |-
186
- This Gem allows you to push your Jekyll blog to AWS S3.
193
+ requirement: !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ! '>='
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ type: :development
200
+ prerelease: false
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ! '>='
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
207
+ description: ! 'This Gem allows you to push your Jekyll blog to AWS S3.
208
+
187
209
  In addition, you can use this Gem to invalidate the related Cloudfront
188
- distribution, making it easy to deliver your blog via the CDN.
189
- email:
210
+
211
+ distribution, making it easy to deliver your blog via the CDN.'
212
+ email:
190
213
  - pcreux@gmail.com
191
214
  - lauri.lehmijoki@iki.fi
192
- executables:
215
+ executables:
193
216
  - jekyll-s3
194
217
  extensions: []
195
-
196
218
  extra_rdoc_files: []
197
-
198
- files:
219
+ files:
199
220
  - .gitignore
200
221
  - .travis.yml
201
222
  - Gemfile
@@ -207,6 +228,7 @@ files:
207
228
  - features/cassettes/cucumber_tags/no-new-or-changed-files.yml
208
229
  - features/cassettes/cucumber_tags/one-file-to-delete.yml
209
230
  - features/cassettes/cucumber_tags/only-changed-files.yml
231
+ - features/cassettes/cucumber_tags/s3-and-cloudfront-when-updating-a-file.yml
210
232
  - features/cassettes/cucumber_tags/s3-and-cloudfront.yml
211
233
  - features/cli-output.feature
212
234
  - features/jekyll-s3-cloudfront.feature
@@ -217,6 +239,9 @@ files:
217
239
  - features/support/test_site_dirs/cdn-powered.blog.fi/_jekyll_s3.yml
218
240
  - features/support/test_site_dirs/cdn-powered.blog.fi/_site/css/styles.css
219
241
  - features/support/test_site_dirs/cdn-powered.blog.fi/_site/index.html
242
+ - features/support/test_site_dirs/cdn-powered.with-one-change.blog.fi/_jekyll_s3.yml
243
+ - features/support/test_site_dirs/cdn-powered.with-one-change.blog.fi/_site/css/styles.css
244
+ - features/support/test_site_dirs/cdn-powered.with-one-change.blog.fi/_site/index.html
220
245
  - features/support/test_site_dirs/my.blog.com/_jekyll_s3.yml
221
246
  - features/support/test_site_dirs/my.blog.com/_site/css/styles.css
222
247
  - features/support/test_site_dirs/my.blog.com/_site/index.html
@@ -244,46 +269,39 @@ files:
244
269
  - lib/jekyll-s3/uploader.rb
245
270
  - spec/lib/keyboard_spec.rb
246
271
  - spec/lib/retry_spec.rb
272
+ - spec/lib/upload_spec.rb
247
273
  - spec/spec_helper.rb
248
274
  homepage: https://github.com/laurilehmijoki/jekyll-s3
249
275
  licenses: []
250
-
251
276
  post_install_message:
252
277
  rdoc_options: []
253
-
254
- require_paths:
278
+ require_paths:
255
279
  - lib
256
- required_ruby_version: !ruby/object:Gem::Requirement
280
+ required_ruby_version: !ruby/object:Gem::Requirement
257
281
  none: false
258
- requirements:
259
- - - ">="
260
- - !ruby/object:Gem::Version
261
- hash: 3
262
- segments:
263
- - 0
264
- version: "0"
265
- required_rubygems_version: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - ! '>='
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ required_rubygems_version: !ruby/object:Gem::Requirement
266
287
  none: false
267
- requirements:
268
- - - ">="
269
- - !ruby/object:Gem::Version
270
- hash: 3
271
- segments:
272
- - 0
273
- version: "0"
288
+ requirements:
289
+ - - ! '>='
290
+ - !ruby/object:Gem::Version
291
+ version: '0'
274
292
  requirements: []
275
-
276
293
  rubyforge_project:
277
294
  rubygems_version: 1.8.24
278
295
  signing_key:
279
296
  specification_version: 3
280
297
  summary: Push your Jekyll blog to S3
281
- test_files:
298
+ test_files:
282
299
  - features/cassettes/cucumber_tags/new-and-changed-files.yml
283
300
  - features/cassettes/cucumber_tags/new-files.yml
284
301
  - features/cassettes/cucumber_tags/no-new-or-changed-files.yml
285
302
  - features/cassettes/cucumber_tags/one-file-to-delete.yml
286
303
  - features/cassettes/cucumber_tags/only-changed-files.yml
304
+ - features/cassettes/cucumber_tags/s3-and-cloudfront-when-updating-a-file.yml
287
305
  - features/cassettes/cucumber_tags/s3-and-cloudfront.yml
288
306
  - features/cli-output.feature
289
307
  - features/jekyll-s3-cloudfront.feature
@@ -294,6 +312,9 @@ test_files:
294
312
  - features/support/test_site_dirs/cdn-powered.blog.fi/_jekyll_s3.yml
295
313
  - features/support/test_site_dirs/cdn-powered.blog.fi/_site/css/styles.css
296
314
  - features/support/test_site_dirs/cdn-powered.blog.fi/_site/index.html
315
+ - features/support/test_site_dirs/cdn-powered.with-one-change.blog.fi/_jekyll_s3.yml
316
+ - features/support/test_site_dirs/cdn-powered.with-one-change.blog.fi/_site/css/styles.css
317
+ - features/support/test_site_dirs/cdn-powered.with-one-change.blog.fi/_site/index.html
297
318
  - features/support/test_site_dirs/my.blog.com/_jekyll_s3.yml
298
319
  - features/support/test_site_dirs/my.blog.com/_site/css/styles.css
299
320
  - features/support/test_site_dirs/my.blog.com/_site/index.html
@@ -311,4 +332,5 @@ test_files:
311
332
  - features/support/vcr.rb
312
333
  - spec/lib/keyboard_spec.rb
313
334
  - spec/lib/retry_spec.rb
335
+ - spec/lib/upload_spec.rb
314
336
  - spec/spec_helper.rb