jekyll-s3 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in jekyll-s3.gemspec
4
- gemspec
4
+ gemspec
data/README.md CHANGED
@@ -33,6 +33,56 @@ s3_bucket: your.blog.bucket.com
33
33
 
34
34
  ## Additional features
35
35
 
36
+ ### Cache Control
37
+
38
+ You can use the `max_age` configuration option to enable more effective browser
39
+ caching of your static assets. There are two possible ways to use the option:
40
+ you can specify a single age (in seconds) like so:
41
+
42
+ ```yaml
43
+ max_age: 300
44
+ ```
45
+
46
+ Or you can specify a hash of globs, and all files matching those globs will have
47
+ the specified age:
48
+
49
+ ```yaml
50
+ max_age:
51
+ "assets/*": 6000
52
+ "*": 300
53
+ ```
54
+
55
+ Place the configuration into the file `_jekyll_s3.yml`.
56
+
57
+ ### Gzip Compression
58
+
59
+ If you choose, you can use compress certain file types before uploading them to
60
+ S3. This is a recommended practice for maximizing page speed and minimizing
61
+ bandwidth usage.
62
+
63
+ To enable Gzip compression, simply add a `gzip` option to your `_jekyll_s3.yml`
64
+ configuration file:
65
+
66
+ ```yaml
67
+ gzip: true
68
+ ```
69
+
70
+ Note that you can additionally specify the file extensions you want to Gzip
71
+ (`.html`, `.css`, `.js`, and `.txt` will be compressed when `gzip: true`):
72
+
73
+ ```yaml
74
+ gzip:
75
+ - .html
76
+ - .css
77
+ - .md
78
+ ```
79
+
80
+ Remember that the extensions here are referring to the *compiled* extensions,
81
+ not the pre-processed extensions.
82
+
83
+ The gzip'ed files are always re-uploaded (see the issue
84
+ [#29](https://github.com/laurilehmijoki/jekyll-s3/issues/29) for more info).
85
+
36
86
  ### Using non-standard AWS regions
37
87
 
38
88
  By default, `jekyll-s3` uses the US Standard Region. You can upload your Jekyll
@@ -42,7 +92,9 @@ site to other regions by adding the setting `s3_endpoint` into the
42
92
  For example, the following line in `_jekyll_s3.yml` will instruct `jekyll_s3` to
43
93
  push your site into the Tokyo region:
44
94
 
45
- s3_endpoint: ap-northeast-1
95
+ ```yaml
96
+ s3_endpoint: ap-northeast-1
97
+ ```
46
98
 
47
99
  The valid `s3_endpoint` values consist of the [S3 location constraint
48
100
  values](http://docs.amazonwebservices.com/general/latest/gr/rande.html#s3_region).
@@ -78,12 +130,7 @@ Enable the headless mode by adding the `--headless` or `-h` argument after
78
130
 
79
131
  ## Known issues
80
132
 
81
- ### Only S3 buckets in the US Standard region work
82
-
83
- Jekyll-s3 supports only S3 buckets that are in the US Standard region. If your
84
- bucket is currently on some other region, you can set a non-existing bucket in
85
- `_jekyll_s3.yml` and then run `configure-s3-website --config-file
86
- _jekyll_s3.yml`. This creates you a bucket in the US Standard region.
133
+ None. Please send a pull request if you spot any.
87
134
 
88
135
  ## Development
89
136
 
@@ -126,4 +173,6 @@ Contributors (in alphabetical order)
126
173
  * Chris Moos
127
174
  * Lauri Lehmijoki
128
175
  * Mason Turner
176
+ * Michael Bleigh
177
+ * Shigeaki Matsumura
129
178
  * stanislas
data/changelog.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.4.0
4
+
5
+ * Add gzip support
6
+ * Add support for specifying `Cache-Control: max-age` HTTP header
7
+
3
8
  ## 2.3.0
4
9
 
5
10
  * Add support for non-standard AWS regions
@@ -0,0 +1,62 @@
1
+ Feature: improve response times of your Jekyll website
2
+
3
+ As a blogger
4
+ I want to benefit from HTTP performance optimisations
5
+ So that my readers would not have to wait long for my website to load
6
+
7
+ @new-files
8
+ Scenario: Set Cache-Control: max-age for all uploaded files
9
+ When my Jekyll site is in "features/support/test_site_dirs/site.with.maxage.com"
10
+ Then jekyll-s3 will push my blog to S3
11
+ And the output should equal
12
+ """
13
+ Deploying _site/* to jekyll-s3-test.net
14
+ Uploading 2 new file(s)
15
+ Upload css/styles.css [max-age=120]: Success!
16
+ Upload index.html [max-age=120]: Success!
17
+ Done! Go visit: http://jekyll-s3-test.net.s3-website-us-east-1.amazonaws.com/index.html
18
+
19
+ """
20
+
21
+ @new-files
22
+ Scenario: Set Cache-Control: max-age for CSS files only
23
+ When my Jekyll site is in "features/support/test_site_dirs/site.with.css-maxage.com"
24
+ Then jekyll-s3 will push my blog to S3
25
+ And the output should equal
26
+ """
27
+ Deploying _site/* to jekyll-s3-test.net
28
+ Uploading 2 new file(s)
29
+ Upload css/styles.css [max-age=100]: Success!
30
+ Upload index.html [max-age=0]: Success!
31
+ Done! Go visit: http://jekyll-s3-test.net.s3-website-us-east-1.amazonaws.com/index.html
32
+
33
+ """
34
+
35
+ @new-files
36
+ Scenario: Set Content-Encoding: gzip HTTP header
37
+ When my Jekyll site is in "features/support/test_site_dirs/site.with.gzipped-html.com"
38
+ Then jekyll-s3 will push my blog to S3
39
+ And the output should equal
40
+ """
41
+ Deploying _site/* to jekyll-s3-test.net
42
+ Uploading 2 new file(s)
43
+ Upload css/styles.css: Success!
44
+ Upload index.html [gzipped]: Success!
45
+ Done! Go visit: http://jekyll-s3-test.net.s3-website-us-east-1.amazonaws.com/index.html
46
+
47
+ """
48
+
49
+ @new-files
50
+ @wip
51
+ Scenario: Set both the Content-Encoding: gzip and Cache-Control: max-age headers
52
+ When my Jekyll site is in "features/support/test_site_dirs/site.with.gzipped-and-max-aged-content.com"
53
+ Then jekyll-s3 will push my blog to S3
54
+ And the output should equal
55
+ """
56
+ Deploying _site/* to jekyll-s3-test.net
57
+ Uploading 2 new file(s)
58
+ Upload css/styles.css [gzipped] [max-age=300]: Success!
59
+ Upload index.html [gzipped] [max-age=300]: Success!
60
+ Done! Go visit: http://jekyll-s3-test.net.s3-website-us-east-1.amazonaws.com/index.html
61
+
62
+ """
@@ -0,0 +1,5 @@
1
+ s3_id: key
2
+ s3_secret: pass
3
+ s3_bucket: jekyll-s3-test.net
4
+ max_age:
5
+ "css/*": 100
@@ -0,0 +1,5 @@
1
+ <html>
2
+ <head>
3
+ <title>hello!</title>
4
+ </head>
5
+ </html>
@@ -0,0 +1,5 @@
1
+ s3_id: key
2
+ s3_secret: pass
3
+ s3_bucket: jekyll-s3-test.net
4
+ gzip: true
5
+ max_age: 300
@@ -0,0 +1,5 @@
1
+ <html>
2
+ <head>
3
+ <title>hello!</title>
4
+ </head>
5
+ </html>
@@ -0,0 +1,5 @@
1
+ s3_id: key
2
+ s3_secret: pass
3
+ s3_bucket: jekyll-s3-test.net
4
+ gzip:
5
+ - .html
@@ -0,0 +1,5 @@
1
+ <html>
2
+ <head>
3
+ <title>hello!</title>
4
+ </head>
5
+ </html>
@@ -0,0 +1,4 @@
1
+ s3_id: key
2
+ s3_secret: pass
3
+ s3_bucket: jekyll-s3-test.net
4
+ max_age: 120
@@ -0,0 +1,5 @@
1
+ <html>
2
+ <head>
3
+ <title>hello!</title>
4
+ </head>
5
+ </html>
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 = "2.3.0"
6
+ s.version = "2.4.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"]
data/lib/jekyll-s3.rb CHANGED
@@ -8,10 +8,11 @@ require 'mime/types'
8
8
 
9
9
  module Jekyll
10
10
  module S3
11
+ DEFAULT_GZIP_EXTENSIONS = %w(.html .css .js .svg .txt)
11
12
  end
12
13
  end
13
14
 
14
- %w{errors uploader cli config_loader retry keyboard diff_helper endpoint}.each do |file|
15
+ %w{errors upload uploader cli config_loader retry keyboard diff_helper endpoint}.each do |file|
15
16
  require File.dirname(__FILE__) + "/jekyll-s3/#{file}"
16
17
  end
17
18
 
@@ -0,0 +1,89 @@
1
+ require 'tempfile'
2
+ require 'zlib'
3
+
4
+ module Jekyll
5
+ module S3
6
+ class Upload
7
+ attr_reader :config, :file, :path, :full_path, :s3
8
+
9
+ def initialize(path, s3, config, site_dir)
10
+ @path = path
11
+ @full_path = "#{site_dir}/#{path}"
12
+ @file = File.open("#{site_dir}/#{path}")
13
+ @s3 = s3
14
+ @config = config
15
+ end
16
+
17
+ def perform!
18
+ success = s3.buckets[config['s3_bucket']].objects[path].write(upload_file, upload_options)
19
+ upload_file.close
20
+ success
21
+ end
22
+
23
+ def upload_file
24
+ @upload_file ||= gzip? ? gzipped_file : file
25
+ end
26
+
27
+ def gzip?
28
+ return false unless !!config['gzip']
29
+
30
+ extensions = config['gzip'].is_a?(Array) ? config['gzip'] : Jekyll::S3::DEFAULT_GZIP_EXTENSIONS
31
+ extensions.include?(File.extname(path))
32
+ end
33
+
34
+ def gzipped_file
35
+ tempfile = Tempfile.new(File.basename(path))
36
+
37
+ gz = Zlib::GzipWriter.new(tempfile, Zlib::BEST_COMPRESSION, Zlib::DEFAULT_STRATEGY)
38
+
39
+ gz.mtime = File.mtime(full_path)
40
+ gz.orig_name = File.basename(path)
41
+ gz.write(file.read)
42
+
43
+ gz.flush
44
+ tempfile.flush
45
+
46
+ gz.close
47
+ tempfile.open
48
+
49
+ tempfile
50
+ end
51
+
52
+ def details
53
+ "#{path}#{" [gzipped]" if gzip?}#{" [max-age=#{max_age}]" if cache_control?}"
54
+ end
55
+
56
+ def upload_options
57
+ opts = {
58
+ :content_type => mime_type,
59
+ :reduced_redundancy => config['s3_reduced_redundancy']
60
+ }
61
+
62
+ opts[:content_encoding] = "gzip" if gzip?
63
+ opts[:cache_control] = "max-age=#{max_age}" if cache_control?
64
+
65
+ opts
66
+ end
67
+
68
+ def cache_control?
69
+ !!config['max_age']
70
+ end
71
+
72
+ def max_age
73
+ if config['max_age'].is_a?(Hash)
74
+ config['max_age'].each_pair do |glob, age|
75
+ return age if File.fnmatch(glob, path)
76
+ end
77
+ else
78
+ return config['max_age']
79
+ end
80
+
81
+ return 0
82
+ end
83
+
84
+ def mime_type
85
+ MIME::Types.type_for(path).first
86
+ end
87
+ end
88
+ end
89
+ end
@@ -53,16 +53,12 @@ module Jekyll
53
53
 
54
54
  def self.upload_file(file, s3, config, site_dir)
55
55
  Retry.run_with_retry do
56
- mime_type = MIME::Types.type_for(file)
57
- upload_succeeded = s3.buckets[config['s3_bucket']].objects[file].write(
58
- File.read("#{site_dir}/#{file}"),
59
- :content_type => mime_type.first,
60
- :reduced_redundancy => config['s3_reduced_redundancy']
61
- )
62
- if upload_succeeded
63
- puts("Upload #{file}: Success!")
56
+ upload = Upload.new(file, s3, config, site_dir)
57
+
58
+ if upload.perform!
59
+ puts "Upload #{upload.details}: Success!"
64
60
  else
65
- puts("Upload #{file}: FAILURE!")
61
+ puts "Upload #{upload.details}: FAILURE!"
66
62
  end
67
63
  end
68
64
  end
@@ -1,104 +1,166 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Jekyll::S3::Uploader do
4
- context '#upload_file' do
5
- describe 'reduced redundancy setting' do
6
- let(:config) {
7
- { 's3_reduced_redundancy' => true }
8
- }
3
+ describe Jekyll::S3::Upload do
4
+ describe 'reduced redundancy setting' do
5
+ let(:config) {
6
+ { 's3_reduced_redundancy' => true }
7
+ }
9
8
 
10
- it 'allows storing a file under the Reduced Redundancy Storage' do
11
- file_to_upload = 'index.html'
12
- s3_client = create_verifying_s3_client(file_to_upload) do |s3_object|
13
- s3_object.should_receive(:write).with(
14
- anything(),
15
- :content_type => 'text/html',
16
- :reduced_redundancy => true
17
- )
18
- end
19
- Jekyll::S3::Uploader.send(:upload_file,
20
- file_to_upload,
21
- s3_client,
22
- config,
23
- 'features/support/test_site_dirs/my.blog.com/_site')
9
+ it 'allows storing a file under the Reduced Redundancy Storage' do
10
+ file_to_upload = 'index.html'
11
+ s3_client = create_verifying_s3_client(file_to_upload) do |s3_object|
12
+ s3_object.should_receive(:write).with(
13
+ anything(),
14
+ :content_type => 'text/html',
15
+ :reduced_redundancy => true
16
+ )
24
17
  end
18
+ Jekyll::S3::Upload.new(file_to_upload,
19
+ s3_client,
20
+ config,
21
+ 'features/support/test_site_dirs/my.blog.com/_site').perform!
25
22
  end
23
+ end
26
24
 
27
- describe 'content type resolving' do
28
- let(:config) {
29
- { 's3_reduced_redundancy' => false }
30
- }
25
+ describe 'content type resolving' do
26
+ let(:config) {
27
+ { 's3_reduced_redundancy' => false }
28
+ }
31
29
 
32
- it 'adds the content type of the uploaded CSS file into the S3 object' do
33
- file_to_upload = 'css/styles.css'
34
- s3_client = create_verifying_s3_client(file_to_upload) do |s3_object|
35
- s3_object.should_receive(:write).with(
36
- anything(),
37
- :content_type => 'text/css',
38
- :reduced_redundancy => false
39
- )
40
- end
41
- Jekyll::S3::Uploader.send(:upload_file,
42
- file_to_upload,
43
- s3_client,
44
- config,
45
- 'features/support/test_site_dirs/my.blog.com/_site')
30
+ it 'adds the content type of the uploaded CSS file into the S3 object' do
31
+ file_to_upload = 'css/styles.css'
32
+ s3_client = create_verifying_s3_client(file_to_upload) do |s3_object|
33
+ s3_object.should_receive(:write).with(
34
+ anything(),
35
+ :content_type => 'text/css',
36
+ :reduced_redundancy => false
37
+ )
46
38
  end
39
+ Jekyll::S3::Upload.new(file_to_upload,
40
+ s3_client,
41
+ config,
42
+ 'features/support/test_site_dirs/my.blog.com/_site').perform!
43
+ end
47
44
 
48
- it 'adds the content type of the uploaded HTML file into the S3 object' do
49
- file_to_upload = 'index.html'
50
- s3_client = create_verifying_s3_client(file_to_upload) do |s3_object|
51
- s3_object.should_receive(:write).with(
52
- anything(),
53
- :content_type => 'text/html',
54
- :reduced_redundancy => false
55
- )
56
- end
57
- Jekyll::S3::Uploader.send(:upload_file,
58
- file_to_upload,
59
- s3_client,
60
- config,
61
- 'features/support/test_site_dirs/my.blog.com/_site')
45
+ it 'adds the content type of the uploaded HTML file into the S3 object' do
46
+ file_to_upload = 'index.html'
47
+ s3_client = create_verifying_s3_client(file_to_upload) do |s3_object|
48
+ s3_object.should_receive(:write).with(
49
+ anything(),
50
+ :content_type => 'text/html',
51
+ :reduced_redundancy => false
52
+ )
62
53
  end
54
+ Jekyll::S3::Upload.new(file_to_upload,
55
+ s3_client,
56
+ config,
57
+ 'features/support/test_site_dirs/my.blog.com/_site').perform!
63
58
  end
59
+ end
60
+
61
+ describe 'gzip compression' do
62
+ let(:config){
63
+ {
64
+ 's3_reduced_redundancy' => false,
65
+ 'gzip' => true
66
+ }
67
+ }
68
+
69
+ subject{ Jekyll::S3::Upload.new("index.html", mock(), config, 'features/support/test_site_dirs/my.blog.com/_site') }
64
70
 
65
- def create_verifying_s3_client(file_to_upload, &block)
66
- def create_objects(file_to_upload, &block)
67
- def create_html_s3_object(file_to_upload, &block)
68
- s3_object = stub('s3_object')
69
- yield s3_object
70
- s3_object
71
- end
72
- objects = {}
73
- objects[file_to_upload] = create_html_s3_object(file_to_upload, &block)
74
- objects
71
+ describe '#gzip?' do
72
+ it 'should be false if the config does not specify gzip' do
73
+ config.delete 'gzip'
74
+ subject.should_not be_gzip
75
75
  end
76
- def create_bucket(file_to_upload, &block)
77
- bucket = stub('bucket')
78
- bucket.stub(:objects => create_objects(file_to_upload, &block))
79
- bucket
76
+
77
+ it 'should be false if gzip is true but does not match a default extension' do
78
+ subject.stub(:path).and_return("index.bork")
79
+ subject.should_not be_gzip
80
+ end
81
+
82
+ it 'should be true if gzip is true and file extension matches' do
83
+ subject.should be_gzip
84
+ end
85
+
86
+ it 'should be true if gzip is true and file extension matches custom supplied' do
87
+ config['gzip'] = %w(.bork)
88
+ subject.stub(:path).and_return('index.bork')
89
+ subject.should be_gzip
90
+ end
91
+ end
92
+
93
+ describe '#gzipped_file' do
94
+ it 'should return a gzipped version of the file' do
95
+ gz = Zlib::GzipReader.new(subject.gzipped_file)
96
+ gz.read.should == File.read('features/support/test_site_dirs/my.blog.com/_site/index.html')
80
97
  end
81
- buckets = stub('buckets')
82
- buckets.stub(:[] => create_bucket(file_to_upload, &block))
83
- s3 = stub('s3')
84
- s3.stub(:buckets => buckets)
85
- s3
86
98
  end
87
99
  end
88
100
 
89
- context '#load_all_local_files' do
90
- let(:files) {
91
- Jekyll::S3::Uploader.send(:load_all_local_files,
92
- 'spec/sample_files/hyde_site/_site')
101
+ describe 'cache control' do
102
+ let(:config){
103
+ {
104
+ 's3_reduced_redundancy' => false,
105
+ 'max_age' => 300
106
+ }
93
107
  }
94
108
 
95
- it 'loads regular files' do
96
- files.should include('css/styles.css')
97
- files.should include('index.html')
109
+ subject{ Jekyll::S3::Upload.new("index.html", mock(), config, 'features/support/test_site_dirs/my.blog.com/_site') }
110
+
111
+ describe '#cache_control?' do
112
+ it 'should be false if max_age is missing' do
113
+ config.delete 'max_age'
114
+ subject.should_not be_cache_control
115
+ end
116
+
117
+ it 'should be true if max_age is present' do
118
+ subject.should be_cache_control
119
+ end
120
+
121
+ it 'should be true if max_age is a hash' do
122
+ config['max_age'] = {'*' => 300}
123
+ subject.should be_cache_control
124
+ end
125
+ end
126
+
127
+ describe '#max_age' do
128
+ it 'should be the universal value if one is set' do
129
+ subject.max_age.should == 300
130
+ end
131
+
132
+ it 'should be the file-specific value if one is set' do
133
+ config['max_age'] = {'*index.html' => 500}
134
+ subject.max_age.should == 500
135
+ end
136
+
137
+ it 'should be zero if no file-specific value hit' do
138
+ config['max_age'] = {'*.js' => 500}
139
+ subject.max_age.should == 0
140
+ end
98
141
  end
142
+ end
99
143
 
100
- it 'loads also dotfiles' do
101
- files.should include('.vimrc')
144
+ def create_verifying_s3_client(file_to_upload, &block)
145
+ def create_objects(file_to_upload, &block)
146
+ def create_html_s3_object(file_to_upload, &block)
147
+ s3_object = stub('s3_object')
148
+ yield s3_object
149
+ s3_object
150
+ end
151
+ objects = {}
152
+ objects[file_to_upload] = create_html_s3_object(file_to_upload, &block)
153
+ objects
154
+ end
155
+ def create_bucket(file_to_upload, &block)
156
+ bucket = stub('bucket')
157
+ bucket.stub(:objects => create_objects(file_to_upload, &block))
158
+ bucket
102
159
  end
160
+ buckets = stub('buckets')
161
+ buckets.stub(:[] => create_bucket(file_to_upload, &block))
162
+ s3 = stub('s3')
163
+ s3.stub(:buckets => buckets)
164
+ s3
103
165
  end
104
- end
166
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jekyll::S3::Uploader do
4
+ context '#upload_file' do
5
+ end
6
+
7
+ context '#load_all_local_files' do
8
+ let(:files) {
9
+ Jekyll::S3::Uploader.send(:load_all_local_files,
10
+ 'spec/sample_files/hyde_site/_site')
11
+ }
12
+
13
+ it 'loads regular files' do
14
+ files.should include('css/styles.css')
15
+ files.should include('index.html')
16
+ end
17
+
18
+ it 'loads also dotfiles' do
19
+ files.should include('.vimrc')
20
+ end
21
+ end
22
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-s3
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-01-12 00:00:00.000000000 Z
13
+ date: 2013-02-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: aws-sdk
@@ -253,6 +253,7 @@ files:
253
253
  - features/jekyll-s3-cloudfront.feature
254
254
  - features/jekyll-s3-delete.feature
255
255
  - features/jekyll-s3-upload.feature
256
+ - features/jekyll-s3-website-performance.feature
256
257
  - features/step_definitions/steps.rb
257
258
  - features/support/env.rb
258
259
  - features/support/test_site_dirs/cdn-powered.blog.fi/_jekyll_s3.yml
@@ -276,6 +277,18 @@ files:
276
277
  - features/support/test_site_dirs/only-changed-files.com/_jekyll_s3.yml
277
278
  - features/support/test_site_dirs/only-changed-files.com/_site/css/styles.css
278
279
  - features/support/test_site_dirs/only-changed-files.com/_site/index.html
280
+ - features/support/test_site_dirs/site.with.css-maxage.com/_jekyll_s3.yml
281
+ - features/support/test_site_dirs/site.with.css-maxage.com/_site/css/styles.css
282
+ - features/support/test_site_dirs/site.with.css-maxage.com/_site/index.html
283
+ - features/support/test_site_dirs/site.with.gzipped-and-max-aged-content.com/_jekyll_s3.yml
284
+ - features/support/test_site_dirs/site.with.gzipped-and-max-aged-content.com/_site/css/styles.css
285
+ - features/support/test_site_dirs/site.with.gzipped-and-max-aged-content.com/_site/index.html
286
+ - features/support/test_site_dirs/site.with.gzipped-html.com/_jekyll_s3.yml
287
+ - features/support/test_site_dirs/site.with.gzipped-html.com/_site/css/styles.css
288
+ - features/support/test_site_dirs/site.with.gzipped-html.com/_site/index.html
289
+ - features/support/test_site_dirs/site.with.maxage.com/_jekyll_s3.yml
290
+ - features/support/test_site_dirs/site.with.maxage.com/_site/css/styles.css
291
+ - features/support/test_site_dirs/site.with.maxage.com/_site/index.html
279
292
  - features/support/test_site_dirs/unpublish-a-post.com/_jekyll_s3.yml
280
293
  - features/support/test_site_dirs/unpublish-a-post.com/_site/css/styles.css
281
294
  - features/support/vcr.rb
@@ -289,11 +302,13 @@ files:
289
302
  - lib/jekyll-s3/errors.rb
290
303
  - lib/jekyll-s3/keyboard.rb
291
304
  - lib/jekyll-s3/retry.rb
305
+ - lib/jekyll-s3/upload.rb
292
306
  - lib/jekyll-s3/uploader.rb
293
307
  - spec/lib/config_loader_spec.rb
294
308
  - spec/lib/keyboard_spec.rb
295
309
  - spec/lib/retry_spec.rb
296
310
  - spec/lib/upload_spec.rb
311
+ - spec/lib/uploader_spec.rb
297
312
  - spec/sample_files/hyde_site/_jekyll_s3.yml
298
313
  - spec/sample_files/hyde_site/_site/.vimrc
299
314
  - spec/sample_files/hyde_site/_site/css/styles.css
@@ -341,6 +356,7 @@ test_files:
341
356
  - features/jekyll-s3-cloudfront.feature
342
357
  - features/jekyll-s3-delete.feature
343
358
  - features/jekyll-s3-upload.feature
359
+ - features/jekyll-s3-website-performance.feature
344
360
  - features/step_definitions/steps.rb
345
361
  - features/support/env.rb
346
362
  - features/support/test_site_dirs/cdn-powered.blog.fi/_jekyll_s3.yml
@@ -364,6 +380,18 @@ test_files:
364
380
  - features/support/test_site_dirs/only-changed-files.com/_jekyll_s3.yml
365
381
  - features/support/test_site_dirs/only-changed-files.com/_site/css/styles.css
366
382
  - features/support/test_site_dirs/only-changed-files.com/_site/index.html
383
+ - features/support/test_site_dirs/site.with.css-maxage.com/_jekyll_s3.yml
384
+ - features/support/test_site_dirs/site.with.css-maxage.com/_site/css/styles.css
385
+ - features/support/test_site_dirs/site.with.css-maxage.com/_site/index.html
386
+ - features/support/test_site_dirs/site.with.gzipped-and-max-aged-content.com/_jekyll_s3.yml
387
+ - features/support/test_site_dirs/site.with.gzipped-and-max-aged-content.com/_site/css/styles.css
388
+ - features/support/test_site_dirs/site.with.gzipped-and-max-aged-content.com/_site/index.html
389
+ - features/support/test_site_dirs/site.with.gzipped-html.com/_jekyll_s3.yml
390
+ - features/support/test_site_dirs/site.with.gzipped-html.com/_site/css/styles.css
391
+ - features/support/test_site_dirs/site.with.gzipped-html.com/_site/index.html
392
+ - features/support/test_site_dirs/site.with.maxage.com/_jekyll_s3.yml
393
+ - features/support/test_site_dirs/site.with.maxage.com/_site/css/styles.css
394
+ - features/support/test_site_dirs/site.with.maxage.com/_site/index.html
367
395
  - features/support/test_site_dirs/unpublish-a-post.com/_jekyll_s3.yml
368
396
  - features/support/test_site_dirs/unpublish-a-post.com/_site/css/styles.css
369
397
  - features/support/vcr.rb
@@ -371,6 +399,7 @@ test_files:
371
399
  - spec/lib/keyboard_spec.rb
372
400
  - spec/lib/retry_spec.rb
373
401
  - spec/lib/upload_spec.rb
402
+ - spec/lib/uploader_spec.rb
374
403
  - spec/sample_files/hyde_site/_jekyll_s3.yml
375
404
  - spec/sample_files/hyde_site/_site/.vimrc
376
405
  - spec/sample_files/hyde_site/_site/css/styles.css