s3_website 1.3.2 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 75048b9591b2516d217424c859f4154ea117cf57
4
- data.tar.gz: ace75278f0925aa842b0e6a27d8c69a3a10b1fa3
3
+ metadata.gz: bad4fc74f724a4017ad910badbaeaebd90d0f2b7
4
+ data.tar.gz: 6c7e6efac417531ef5afec5b94a6bd74e795cc20
5
5
  SHA512:
6
- metadata.gz: 493f9be03d3fdbc1253590cfb2762082a0928fc10b9dbcc176300d810cede4aa9af2e1b02ce36394ddbd4c9da79fd832999188add3b2014610c7901a5e11cb6f
7
- data.tar.gz: 1a043fb4b2d95c2b2ab5839b8cc35289cfd389eefc2670d4c13b635b62afbd22ea9c2e366f45283e87dff6c8610269404291b31e4af2a3e102f062994575b576
6
+ metadata.gz: 47b2d9003a269827e1e0b3f8ebe7bb6816f284209e510009c306c30cf9c426477ca1345af15147cb8ba699b74c23af00f2cb55780586b656909aeb0a969e12e9
7
+ data.tar.gz: 9bbc213d27d7f8069e85031941252a2604ff28e2c2ac3656c402e43743b29991b7e990f7bac0f4c043883744957605e560eb53f9088ee94706e48aa72af19524
data/README.md CHANGED
@@ -210,6 +210,25 @@ cloudfront_distribution_config:
210
210
  Once you've saved the configuration into `s3_website.yml`, you can apply them by
211
211
  running `s3_website cfg apply`.
212
212
 
213
+ #### Invalidating root resources instead of index.htmls
214
+
215
+ By default, `s3_website push` calls the CloudFront invalidation API with the
216
+ file-name-as-it-is. This means that if your file is *article/index.html*, the
217
+ push command will call the invalidation API on the resource
218
+ *article/index.html*.
219
+
220
+ You can instruct the push command to invalidate the root resource instead of the
221
+ *index.html* resource by adding the following setting into the configuration
222
+ file:
223
+
224
+ cloudfront_invalidate_root: true
225
+
226
+ To recap, this setting instructs s3_website to invalidate the root resource
227
+ (e.g., *article/*) instead of the filename'd resource (e.g.,
228
+ *article/index.html).
229
+
230
+ No more index.htmls in your URLs!
231
+
213
232
  ### The headless mode
214
233
 
215
234
  s3_website has a headless mode, where human interactions are disabled.
@@ -2,6 +2,10 @@
2
2
 
3
3
  This project uses [Semantic Versioning](http://semver.org).
4
4
 
5
+ ## 1.4.0
6
+
7
+ * Add setting `cloudfront_invalidate_root`
8
+
5
9
  ## 1.3.2
6
10
 
7
11
  * Move blacklist filtering into a better place
@@ -4,19 +4,27 @@ module S3Website
4
4
  def self.invalidate(config, changed_files)
5
5
  aws_key = config['s3_id']
6
6
  aws_secret = config['s3_secret']
7
- s3_bucket_name = config['s3_bucket']
8
7
  cloudfront_distribution_id = config['cloudfront_distribution_id']
9
- s3 = AWS::S3.new(
10
- :access_key_id => aws_key,
11
- :secret_access_key => aws_secret)
12
- s3_object_keys = changed_files
8
+ s3_object_keys = apply_config config, changed_files
13
9
  s3_object_keys << ""
14
10
  report = SimpleCloudfrontInvalidator::CloudfrontClient.new(
15
- aws_key, aws_secret, cloudfront_distribution_id).invalidate(
16
- s3_object_keys)
11
+ aws_key, aws_secret, cloudfront_distribution_id
12
+ ).invalidate(s3_object_keys)
17
13
  puts report[:text_report]
18
14
  report[:invalidated_items_count]
19
15
  end
16
+
17
+ private
18
+
19
+ def self.apply_config(config, changed_files)
20
+ if config['cloudfront_invalidate_root']
21
+ changed_files.map { |changed_file|
22
+ changed_file.sub /\/index.html$/, '/'
23
+ }
24
+ else
25
+ changed_files
26
+ end
27
+ end
20
28
  end
21
29
  end
22
30
  end
@@ -30,6 +30,8 @@ s3_bucket: your.blog.bucket.com
30
30
  # items:
31
31
  # CNAME: your.website.com
32
32
 
33
+ # cloudfront_invalidate_root: true
34
+
33
35
  # concurrency_level: 100
34
36
 
35
37
  # redirects:
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "s3_website"
6
- s.version = "1.3.2"
6
+ s.version = "1.4.0"
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["Lauri Lehmijoki"]
9
9
  s.email = ["lauri.lehmijoki@iki.fi"]
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe S3Website::Cloudfront::Invalidator do
4
+ describe 'default behaviour' do
5
+ let(:config) {
6
+ {
7
+ 's3_id' => 'aws id',
8
+ 's3_secret' => 'aws secret',
9
+ 'cloudfront_distribution_id' => 'EFXX'
10
+ }
11
+ }
12
+
13
+ it 'invalidates the root resource' do
14
+ invalidator = double('invalidator')
15
+ SimpleCloudfrontInvalidator::CloudfrontClient.
16
+ should_receive(:new).
17
+ with('aws id', 'aws secret', 'EFXX').
18
+ and_return(invalidator)
19
+
20
+ invalidator.
21
+ should_receive(:invalidate).
22
+ with(['index.html', '']).
23
+ and_return(:text_report => 'report txt')
24
+
25
+ S3Website::Cloudfront::Invalidator.invalidate(config, ['index.html'])
26
+ end
27
+ end
28
+
29
+ describe 'option cloudfront_invalidate_root = true' do
30
+ let(:config) {
31
+ {
32
+ 's3_id' => 'aws id',
33
+ 's3_secret' => 'aws secret',
34
+ 'cloudfront_distribution_id' => 'EFXX',
35
+ 'cloudfront_invalidate_root' => true
36
+ }
37
+ }
38
+
39
+ it 'invalidates all root resources' do
40
+ invalidator = double('invalidator')
41
+ SimpleCloudfrontInvalidator::CloudfrontClient.
42
+ should_receive(:new).
43
+ with('aws id', 'aws secret', 'EFXX').
44
+ and_return(invalidator)
45
+
46
+ invalidator.
47
+ should_receive(:invalidate).
48
+ with(['article/', '']).
49
+ and_return(:text_report => 'report txt')
50
+
51
+ S3Website::Cloudfront::Invalidator.invalidate(config, ['article/index.html'])
52
+ end
53
+ end
54
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: s3_website
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lauri Lehmijoki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-29 00:00:00.000000000 Z
11
+ date: 2013-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -314,6 +314,7 @@ files:
314
314
  - lib/s3_website/uploader.rb
315
315
  - resources/configuration_file_template.yml
316
316
  - s3_website.gemspec
317
+ - spec/lib/cloudfront/invalidator_spec.rb
317
318
  - spec/lib/config_loader_spec.rb
318
319
  - spec/lib/endpoint_spec.rb
319
320
  - spec/lib/keyboard_spec.rb
@@ -429,6 +430,7 @@ test_files:
429
430
  - features/support/test_site_dirs/unpublish-a-post.com/s3_website.yml
430
431
  - features/support/vcr.rb
431
432
  - features/website-performance.feature
433
+ - spec/lib/cloudfront/invalidator_spec.rb
432
434
  - spec/lib/config_loader_spec.rb
433
435
  - spec/lib/endpoint_spec.rb
434
436
  - spec/lib/keyboard_spec.rb