jekyll-s3 2.0.0 → 2.1.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.
data/README.md CHANGED
@@ -18,30 +18,28 @@ Deploy your jekyll site to S3.
18
18
 
19
19
  ## Setup
20
20
 
21
- * Go to your jekyll site directory
22
- * Run `jekyll-s3`. It generates a configuration file called `_jekyll_s3.yml` that looks like that:
21
+ * Go to your jekyll site directory
22
+ * Run `jekyll-s3`. It generates a configuration file called `_jekyll_s3.yml` that looks like this:
23
23
  <pre>
24
24
  s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
25
25
  s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
26
26
  s3_bucket: your.blog.bucket.com
27
- cloudfront_distribution_id: YOUR_CLOUDFRONT_DIST_ID (OPTIONAL)
28
27
  </pre>
29
28
 
30
- * Edit it with your details.
31
- * Hint: you can use ERB syntax in `_jekyll_s3.yml`. This is handy, if you
32
- want to store the AWS credentials as environmental variables.
29
+ * Edit it with your details (you can use [ERB](http://ruby-doc.org/stdlib-1.9.3/libdoc/erb/rdoc/ERB.html) in the file)
30
+ * [Configure your S3 bucket to function like a website](http://docs.amazonwebservices.com/AmazonS3/latest/dev/HostingWebsiteOnS3Setup.html)
33
31
 
34
32
  ## Deploy!
35
33
 
36
34
  * Run `jekyll-s3`. Done.
37
35
 
38
- ## Want the root url to render index.html?
36
+ ## Reduced Redundancy
39
37
 
40
- * Log into <https://console.aws.amazon.com/s3/home>
41
- * Set the Index document to index.html in Bucket Properties >
42
- Website.
43
- * Visit the website endpoint:
44
- (http://yourblog.s3-website...amazonaws.com)
38
+ You can reduce the cost of hosting your blog on S3 by using Reduced Redundancy Storage:
39
+
40
+ * In `_jekyll_s3.yml`, set `s3_reduced_redundancy: true`
41
+ * All objects uploaded after this change will use the Reduced Redundancy Storage.
42
+ * If you want to change all of the files in the bucket, you can change them through the AWS console, or update the timestamp on the files before running `jekyll-s3` again
45
43
 
46
44
  ## How to use Cloudfront to deliver your blog
47
45
 
@@ -68,6 +66,10 @@ Enable the headless mode by adding the `--headless` or `-h` argument after
68
66
 
69
67
  ## Changelog
70
68
 
69
+ ### 2.1.0
70
+
71
+ * Added support for S3 reduced redundancy storage
72
+
71
73
  ### 2.0.0
72
74
 
73
75
  * Set content type of the uploaded files
@@ -120,3 +122,4 @@ Contributors (in alphabetical order)
120
122
  * Chris Kelly
121
123
  * Chris Moos
122
124
  * Lauri Lehmijoki
125
+ * Mason Turner
@@ -21,6 +21,7 @@ Feature: Command-line interface feedback
21
21
  s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
22
22
  s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
23
23
  s3_bucket: your.blog.bucket.com
24
+ s3_reduced_redundancy: false
24
25
  cloudfront_distribution_id: YOUR_CLOUDFRONT_DIST_ID (OPTIONAL)
25
26
  """
26
27
 
@@ -34,6 +35,7 @@ Feature: Command-line interface feedback
34
35
  s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
35
36
  s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
36
37
  s3_bucket: your.blog.bucket.com
38
+ s3_reduced_redundancy: false
37
39
  """
38
40
 
39
41
  Scenario: Run jekyll-s3 with a malformed configuration file
@@ -50,6 +52,7 @@ Feature: Command-line interface feedback
50
52
  s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
51
53
  s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
52
54
  s3_bucket: your.blog.bucket.com
55
+ s3_reduced_redundancy: false
53
56
  """
54
57
 
55
58
  Scenario: Run jekyll-s3 with a configuration file that does not contain a bucket
@@ -59,6 +62,7 @@ Feature: Command-line interface feedback
59
62
  s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
60
63
  s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
61
64
  s3_bucket:
65
+ s3_reduced_redundancy: false
62
66
  """
63
67
  When I run `jekyll-s3`
64
68
  Then the output should contain:
@@ -67,6 +71,7 @@ Feature: Command-line interface feedback
67
71
  s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
68
72
  s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
69
73
  s3_bucket: your.blog.bucket.com
74
+ s3_reduced_redundancy: false
70
75
  """
71
76
 
72
77
  Scenario: Run jekyll-s3
@@ -10,6 +10,7 @@ require 'cucumber/rspec/doubles'
10
10
  Before do
11
11
  @__aruba_original_paths = (ENV['PATH'] || '').split(File::PATH_SEPARATOR)
12
12
  ENV['PATH'] = ([File.expand_path('bin')] + @__aruba_original_paths).join(File::PATH_SEPARATOR)
13
+ @aruba_timeout_seconds = 5
13
14
  end
14
15
 
15
16
  After do
@@ -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.0.0"
6
+ s.version = "2.1.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"]
@@ -15,7 +15,7 @@ distribution, making it easy to deliver your blog via the CDN.}
15
15
 
16
16
  s.default_executable = %q{jekyll-s3}
17
17
 
18
- s.add_dependency 'aws-sdk', '~> 1.5.6'
18
+ s.add_dependency 'aws-sdk', '~> 1.8.0'
19
19
  s.add_dependency 'filey-diff', '~> 0.0.2'
20
20
  s.add_dependency 'simple-cloudfront-invalidator', '~> 1.0.0'
21
21
  s.add_dependency 'erubis', '~> 2.7.0'
@@ -6,6 +6,7 @@ module Jekyll
6
6
  s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
7
7
  s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
8
8
  s3_bucket: your.blog.bucket.com
9
+ s3_reduced_redundancy: false
9
10
  cloudfront_distribution_id: YOUR_CLOUDFRONT_DIST_ID (OPTIONAL)
10
11
  EOF
11
12
 
@@ -2,22 +2,21 @@ module Jekyll
2
2
  module S3
3
3
  class Uploader
4
4
  def self.run(site_dir, config, in_headless_mode = false)
5
- s3_id = config['s3_id']
6
- s3_secret = config['s3_secret']
7
- s3_bucket_name = config['s3_bucket']
8
- puts "Deploying _site/* to #{s3_bucket_name}"
5
+ puts "Deploying _site/* to #{config['s3_bucket']}"
9
6
 
10
- s3 = AWS::S3.new(:access_key_id => s3_id,
11
- :secret_access_key => s3_secret)
7
+ s3 = AWS::S3.new(:access_key_id => config['s3_id'],
8
+ :secret_access_key => config['s3_secret'])
12
9
 
13
- create_bucket_if_needed(s3, s3_bucket_name)
10
+ create_bucket_if_needed(s3, config['s3_bucket'])
14
11
 
15
- new_files_count, changed_files_count, changed_files = upload_files(s3, s3_bucket_name, site_dir)
12
+ new_files_count, changed_files_count, changed_files = upload_files(
13
+ s3, config, site_dir
14
+ )
16
15
 
17
16
  deleted_files_count = remove_superfluous_files(
18
- s3, s3_bucket_name, site_dir, in_headless_mode)
17
+ s3, config['s3_bucket'], site_dir, in_headless_mode)
19
18
 
20
- puts "Done! Go visit: http://#{s3_bucket_name}.s3.amazonaws.com/index.html"
19
+ puts "Done! Go visit: http://#{config['s3_bucket']}.s3.amazonaws.com/index.html"
21
20
  [new_files_count, changed_files_count, deleted_files_count, changed_files]
22
21
  end
23
22
 
@@ -30,9 +29,9 @@ module Jekyll
30
29
  end
31
30
  end
32
31
 
33
- def self.upload_files(s3, s3_bucket_name, site_dir)
32
+ def self.upload_files(s3, config, site_dir)
34
33
  changed_files, new_files = DiffHelper.resolve_files_to_upload(
35
- s3.buckets[s3_bucket_name], site_dir)
34
+ s3.buckets[config['s3_bucket']], site_dir)
36
35
  to_upload = changed_files + new_files
37
36
  if to_upload.empty?
38
37
  puts "No new or changed files to upload"
@@ -45,18 +44,19 @@ module Jekyll
45
44
  pre_upload_report << "file(s)"
46
45
  puts pre_upload_report.join(' ')
47
46
  to_upload.each do |f|
48
- upload_file(f, s3, s3_bucket_name, site_dir)
47
+ upload_file(f, s3, config, site_dir)
49
48
  end
50
49
  end
51
50
  [new_files.length, changed_files.length, changed_files]
52
51
  end
53
52
 
54
- def self.upload_file(file, s3, s3_bucket_name, site_dir)
53
+ def self.upload_file(file, s3, config, site_dir)
55
54
  Retry.run_with_retry do
56
55
  mime_type = MIME::Types.type_for(file)
57
- upload_succeeded = s3.buckets[s3_bucket_name].objects[file].write(
56
+ upload_succeeded = s3.buckets[config['s3_bucket']].objects[file].write(
58
57
  File.read("#{site_dir}/#{file}"),
59
- :content_type => mime_type.first
58
+ :content_type => mime_type.first ,
59
+ :reduced_redundancy => config['s3_reduced_redundancy'],
60
60
  )
61
61
  if upload_succeeded
62
62
  puts("Upload #{file}: Success!")
@@ -1,51 +1,86 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Jekyll::S3::Uploader do
4
+ describe 'reduced redundancy setting' do
5
+ let(:config) {
6
+ { 's3_reduced_redundancy' => true }
7
+ }
8
+
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
+ )
17
+ end
18
+ Jekyll::S3::Uploader.send(:upload_file,
19
+ file_to_upload,
20
+ s3_client,
21
+ config,
22
+ 'features/support/test_site_dirs/my.blog.com/_site')
23
+ end
24
+ end
25
+
4
26
  describe 'content type resolving' do
27
+ let(:config) {
28
+ { 's3_reduced_redundancy' => false }
29
+ }
30
+
5
31
  it 'adds the content type of the uploaded CSS file into the S3 object' do
6
32
  file_to_upload = 'css/styles.css'
33
+ s3_client = create_verifying_s3_client(file_to_upload) do |s3_object|
34
+ s3_object.should_receive(:write).with(
35
+ anything(),
36
+ :content_type => 'text/css',
37
+ :reduced_redundancy => false
38
+ )
39
+ end
7
40
  Jekyll::S3::Uploader.send(:upload_file,
8
41
  file_to_upload,
9
- create_content_type_verifying_s3(file_to_upload),
10
- 'some_bucket_name',
42
+ s3_client,
43
+ config,
11
44
  'features/support/test_site_dirs/my.blog.com/_site')
12
45
  end
13
46
 
14
47
  it 'adds the content type of the uploaded HTML file into the S3 object' do
15
48
  file_to_upload = 'index.html'
49
+ s3_client = create_verifying_s3_client(file_to_upload) do |s3_object|
50
+ s3_object.should_receive(:write).with(
51
+ anything(),
52
+ :content_type => 'text/html',
53
+ :reduced_redundancy => false
54
+ )
55
+ end
16
56
  Jekyll::S3::Uploader.send(:upload_file,
17
57
  file_to_upload,
18
- create_content_type_verifying_s3(file_to_upload),
19
- 'some_bucket_name',
58
+ s3_client,
59
+ config,
20
60
  'features/support/test_site_dirs/my.blog.com/_site')
21
61
  end
62
+ end
22
63
 
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
64
+ def create_verifying_s3_client(file_to_upload, &block)
65
+ def create_objects(file_to_upload, &block)
66
+ def create_html_s3_object(file_to_upload, &block)
67
+ s3_object = stub('s3_object')
68
+ yield s3_object
69
+ s3_object
43
70
  end
44
- buckets = stub('buckets')
45
- buckets.stub(:[] => create_bucket(file_to_upload))
46
- s3 = stub('s3')
47
- s3.stub(:buckets => buckets)
48
- s3
71
+ objects = {}
72
+ objects[file_to_upload] = create_html_s3_object(file_to_upload, &block)
73
+ objects
74
+ end
75
+ def create_bucket(file_to_upload, &block)
76
+ bucket = stub('bucket')
77
+ bucket.stub(:objects => create_objects(file_to_upload, &block))
78
+ bucket
49
79
  end
80
+ buckets = stub('buckets')
81
+ buckets.stub(:[] => create_bucket(file_to_upload, &block))
82
+ s3 = stub('s3')
83
+ s3.stub(:buckets => buckets)
84
+ s3
50
85
  end
51
86
  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.0.0
4
+ version: 2.1.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: 2012-12-06 00:00:00.000000000 Z
13
+ date: 2012-12-29 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: aws-sdk
@@ -19,7 +19,7 @@ dependencies:
19
19
  requirements:
20
20
  - - ~>
21
21
  - !ruby/object:Gem::Version
22
- version: 1.5.6
22
+ version: 1.8.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,7 +27,7 @@ dependencies:
27
27
  requirements:
28
28
  - - ~>
29
29
  - !ruby/object:Gem::Version
30
- version: 1.5.6
30
+ version: 1.8.0
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: filey-diff
33
33
  requirement: !ruby/object:Gem::Requirement