jekyll-s3 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +5 -0
- data/README.md +20 -3
- data/Rakefile +9 -0
- data/features/jekyll-s3-cloudfront.feature +22 -0
- data/jekyll-s3.gemspec +9 -5
- data/lib/cloudfront/invalidator.rb +15 -0
- data/lib/jekyll-s3.rb +5 -0
- data/lib/jekyll-s3/uploader.rb +27 -11
- data/lib/jekyll-s3/version.rb +1 -1
- data/spec/lib/invalidator_spec.rb +36 -0
- data/spec/lib/uploader_spec.rb +39 -10
- data/spec/spec_helper.rb +6 -0
- metadata +140 -95
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# jekyll-s3
|
2
2
|
|
3
|
+
[![Build
|
4
|
+
Status](https://secure.travis-ci.org/laurilehmijoki/jekyll-s3.png)]
|
5
|
+
(http://travis-ci.org/laurilehmijoki/jekyll-s3)
|
6
|
+
|
7
|
+
|
3
8
|
Deploy your jekyll site to S3.
|
4
9
|
|
5
10
|
## Install
|
@@ -14,6 +19,7 @@ Deploy your jekyll site to S3.
|
|
14
19
|
s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
|
15
20
|
s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
|
16
21
|
s3_bucket: your.blog.bucket.com
|
22
|
+
cloudfront_distribution_id: YOUR_CLOUDFRONT_DIST_ID (OPTIONAL)
|
17
23
|
</pre>
|
18
24
|
|
19
25
|
* Edit it with your details.
|
@@ -30,12 +36,23 @@ s3_bucket: your.blog.bucket.com
|
|
30
36
|
* Visit the website endpoint:
|
31
37
|
(http://yourblog.s3-website...amazonaws.com)
|
32
38
|
|
39
|
+
## How to use Cloudfront to deliver your blog
|
40
|
+
|
41
|
+
It is easy to deliver your S3-based web site via Cloudfront, the CDN of Amazon.
|
42
|
+
|
43
|
+
* Go to <https://console.aws.amazon.com/cloudfront/home>
|
44
|
+
* Create a distribution and set the your Jekyll S3 bucket as the origin
|
45
|
+
* Add the `cloudfront_distribution_id: your-dist-id` setting into
|
46
|
+
`_jekyll_s3.yml`
|
47
|
+
* Run `jekyll-s3` to deploy your site to S3 and invalidate the Cloudfront
|
48
|
+
distribution
|
49
|
+
|
33
50
|
## Todo
|
34
51
|
|
35
52
|
* Upload new / updated files *only* (using s3-sync?)
|
36
|
-
|
53
|
+
|
37
54
|
## Development
|
38
|
-
|
55
|
+
|
39
56
|
* Install bundler and run `bundle install`
|
40
57
|
* Run the integration tests by running `bundle exec cucumber`
|
41
58
|
* Run the unit tests by running `bundle exec rspec spec/lib/*.rb`
|
@@ -47,4 +64,4 @@ MIT
|
|
47
64
|
## Copyright
|
48
65
|
|
49
66
|
Copyright (c) 2011 VersaPay, Philippe Creux.
|
50
|
-
|
67
|
+
|
data/Rakefile
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
Feature: Invalidate the Cloudfront distribution
|
2
|
+
|
3
|
+
In order to publish my posts
|
4
|
+
As a blogger who delivers his blog via an S3-based Cloudfront distribution
|
5
|
+
I want to run jekyll-s3
|
6
|
+
And see, that the items in the distribution were invalidated
|
7
|
+
So that my latest updates will be immediately available to readers
|
8
|
+
|
9
|
+
Scenario: Run jekyll-s3 for the first time
|
10
|
+
Given a directory named "_site"
|
11
|
+
When I run `jekyll-s3`
|
12
|
+
Then the output should contain:
|
13
|
+
"""
|
14
|
+
I've just generated a file called _jekyll_s3.yml. Go put your details in it!
|
15
|
+
"""
|
16
|
+
Then the file "_jekyll_s3.yml" should contain:
|
17
|
+
"""
|
18
|
+
s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
|
19
|
+
s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
|
20
|
+
s3_bucket: your.blog.bucket.com
|
21
|
+
cloudfront_distribution_id: YOUR_CLOUDFRONT_DIST_ID (OPTIONAL)
|
22
|
+
"""
|
data/jekyll-s3.gemspec
CHANGED
@@ -6,20 +6,24 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.name = "jekyll-s3"
|
7
7
|
s.version = Jekyll::S3::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = ["Philippe Creux"]
|
10
|
-
s.email = ["pcreux@gmail.com"]
|
11
|
-
s.homepage = "https://github.com/
|
12
|
-
s.summary = %q{Push your
|
13
|
-
s.description = %q{
|
9
|
+
s.authors = ["Philippe Creux", "Lauri Lehmijoki"]
|
10
|
+
s.email = ["pcreux@gmail.com", "lauri.lehmijoki@iki.fi"]
|
11
|
+
s.homepage = "https://github.com/laurilehmijoki/jekyll-s3"
|
12
|
+
s.summary = %q{Push your Jekyll blog to S3}
|
13
|
+
s.description = %q{This Gem allows you to push your Jekyll blog to AWS S3.
|
14
|
+
In addition, you can use this Gem to invalidate the related Cloudfront
|
15
|
+
distribution, making it easy to deliver your blog via the CDN.}
|
14
16
|
|
15
17
|
s.default_executable = %q{jekyll-s3}
|
16
18
|
|
17
19
|
s.add_dependency 'aws-s3'
|
20
|
+
s.add_dependency 'simple-cloudfront-invalidator'
|
18
21
|
|
19
22
|
s.add_development_dependency 'rspec'
|
20
23
|
s.add_development_dependency 'mocha'
|
21
24
|
s.add_development_dependency 'cucumber'
|
22
25
|
s.add_development_dependency 'aruba', '>= 0.4.7'
|
26
|
+
s.add_development_dependency 'rake'
|
23
27
|
|
24
28
|
s.files = `git ls-files`.split("\n")
|
25
29
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module Cloudfront
|
3
|
+
class Invalidator
|
4
|
+
def self.invalidate(
|
5
|
+
aws_key, aws_secret, s3_bucket_name, cloudfront_distribution_id)
|
6
|
+
bucket = AWS::S3::Bucket.find(s3_bucket_name)
|
7
|
+
s3_object_keys = bucket.objects.map { |f| f.key }
|
8
|
+
report = SimpleCloudfrontInvalidator::CloudfrontClient.new(
|
9
|
+
aws_key, aws_secret, cloudfront_distribution_id).invalidate(
|
10
|
+
s3_object_keys)
|
11
|
+
puts report
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/jekyll-s3.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'yaml'
|
3
3
|
require 'aws/s3'
|
4
|
+
require 'simple-cloudfront-invalidator'
|
4
5
|
|
5
6
|
module Jekyll
|
6
7
|
module S3
|
@@ -10,3 +11,7 @@ end
|
|
10
11
|
%w{errors uploader cli}.each do |file|
|
11
12
|
require File.dirname(__FILE__) + "/jekyll-s3/#{file}"
|
12
13
|
end
|
14
|
+
|
15
|
+
%w{invalidator}.each do |file|
|
16
|
+
require File.dirname(__FILE__) + "/cloudfront/#{file}"
|
17
|
+
end
|
data/lib/jekyll-s3/uploader.rb
CHANGED
@@ -8,8 +8,8 @@ module Jekyll
|
|
8
8
|
s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
|
9
9
|
s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
|
10
10
|
s3_bucket: your.blog.bucket.com
|
11
|
+
cloudfront_distribution_id: YOUR_CLOUDFRONT_DIST_ID (OPTIONAL)
|
11
12
|
EOF
|
12
|
-
|
13
13
|
|
14
14
|
def self.run!
|
15
15
|
new.run!
|
@@ -18,11 +18,20 @@ s3_bucket: your.blog.bucket.com
|
|
18
18
|
def run!
|
19
19
|
check_jekyll_project!
|
20
20
|
check_s3_configuration!
|
21
|
+
load_configuration
|
21
22
|
upload_to_s3!
|
23
|
+
invalidate_cf_dist_if_configured!
|
22
24
|
end
|
23
25
|
|
24
26
|
protected
|
25
|
-
|
27
|
+
|
28
|
+
def invalidate_cf_dist_if_configured!
|
29
|
+
cloudfront_configured = @cloudfront_distribution_id != nil && @cloudfront_distribution_id != ''
|
30
|
+
Jekyll::Cloudfront::Invalidator.invalidate(
|
31
|
+
@s3_id, @s3_secret, @s3_bucket, @cloudfront_distribution_id
|
32
|
+
) if cloudfront_configured
|
33
|
+
end
|
34
|
+
|
26
35
|
def run_with_retry
|
27
36
|
begin
|
28
37
|
yield
|
@@ -32,7 +41,7 @@ s3_bucket: your.blog.bucket.com
|
|
32
41
|
retry
|
33
42
|
end
|
34
43
|
end
|
35
|
-
|
44
|
+
|
36
45
|
def local_files
|
37
46
|
Dir[SITE_DIR + '/**/*'].
|
38
47
|
delete_if { |f| File.directory?(f) }.
|
@@ -72,7 +81,7 @@ s3_bucket: your.blog.bucket.com
|
|
72
81
|
|
73
82
|
delete_all = false
|
74
83
|
keep_all = false
|
75
|
-
to_delete.each do |f|
|
84
|
+
to_delete.each do |f|
|
76
85
|
delete = false
|
77
86
|
keep = false
|
78
87
|
until delete || delete_all || keep || keep_all
|
@@ -104,33 +113,40 @@ s3_bucket: your.blog.bucket.com
|
|
104
113
|
end
|
105
114
|
|
106
115
|
# Raise NoConfigurationFileError if the configuration file does not exists
|
107
|
-
# Raise MalformedConfigurationFileError if the configuration file does not contain the keys we expect
|
108
|
-
# Loads the configuration if everything looks cool
|
109
116
|
def check_s3_configuration!
|
110
117
|
unless File.exists?(CONFIGURATION_FILE)
|
111
118
|
create_template_configuration_file
|
112
119
|
raise NoConfigurationFileError
|
113
120
|
end
|
114
|
-
raise MalformedConfigurationFileError unless load_configuration
|
115
121
|
end
|
116
122
|
|
117
123
|
# Load configuration from _jekyll_s3.yml
|
118
|
-
#
|
124
|
+
# Raise MalformedConfigurationFileError if the configuration file does not contain the keys we expect
|
119
125
|
def load_configuration
|
120
|
-
config =
|
121
|
-
|
126
|
+
config = load_yaml_file
|
127
|
+
raise MalformedConfigurationFileError unless config
|
122
128
|
|
123
129
|
@s3_id = config['s3_id']
|
124
130
|
@s3_secret = config['s3_secret']
|
125
131
|
@s3_bucket = config['s3_bucket']
|
132
|
+
@cloudfront_distribution_id = config['cloudfront_distribution_id']
|
126
133
|
|
127
|
-
|
134
|
+
raise MalformedConfigurationFileError unless
|
135
|
+
[@s3_id, @s3_secret, @s3_bucket].select { |k| k.nil? || k == '' }.empty?
|
128
136
|
end
|
129
137
|
|
130
138
|
def create_template_configuration_file
|
131
139
|
File.open(CONFIGURATION_FILE, 'w') { |f| f.write(CONFIGURATION_FILE_TEMPLATE) }
|
132
140
|
|
133
141
|
end
|
142
|
+
|
143
|
+
def load_yaml_file
|
144
|
+
begin
|
145
|
+
config = YAML.load_file(CONFIGURATION_FILE)
|
146
|
+
rescue Exception
|
147
|
+
raise MalformedConfigurationFileError
|
148
|
+
end
|
149
|
+
end
|
134
150
|
end
|
135
151
|
end
|
136
152
|
end
|
data/lib/jekyll-s3/version.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Jekyll::Cloudfront::Invalidator do
|
4
|
+
describe "#invalidate cloudfront items" do
|
5
|
+
it "should retrieve all objects from the S3 bucket and call invalidation on them" do
|
6
|
+
s3_object_keys = ["key1", "key2"]
|
7
|
+
s3_objects = s3_object_keys.map { |key| S3Object.new(key) }
|
8
|
+
@s3_bucket_name = "my-s3-bucket"
|
9
|
+
AWS::S3::Bucket.expects(:find).with(@s3_bucket_name).returns(S3Bucket.new(s3_objects))
|
10
|
+
SimpleCloudfrontInvalidator::CloudfrontClient.any_instance.
|
11
|
+
expects(:invalidate).with(s3_object_keys)
|
12
|
+
|
13
|
+
Jekyll::Cloudfront::Invalidator.invalidate("", "", @s3_bucket_name, "")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class S3Bucket
|
19
|
+
def initialize(s3_objects)
|
20
|
+
@s3_objects = s3_objects
|
21
|
+
end
|
22
|
+
|
23
|
+
def objects
|
24
|
+
@s3_objects
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class S3Object
|
29
|
+
def initialize(key)
|
30
|
+
@key = key
|
31
|
+
end
|
32
|
+
|
33
|
+
def key
|
34
|
+
@key
|
35
|
+
end
|
36
|
+
end
|
data/spec/lib/uploader_spec.rb
CHANGED
@@ -1,12 +1,8 @@
|
|
1
|
-
require
|
2
|
-
|
3
|
-
RSpec.configure do |config|
|
4
|
-
config.mock_framework = :mocha
|
5
|
-
end
|
1
|
+
require 'spec_helper'
|
6
2
|
|
7
3
|
describe Jekyll::S3::Uploader do
|
8
4
|
describe "#upload_to_s3" do
|
9
|
-
|
5
|
+
|
10
6
|
before :each do
|
11
7
|
AWS::S3::Base.expects(:establish_connection!).at_least(1).returns true
|
12
8
|
AWS::S3::Service.expects(:buckets).at_least(1).returns []
|
@@ -14,20 +10,53 @@ describe Jekyll::S3::Uploader do
|
|
14
10
|
bucket = mock()
|
15
11
|
bucket.expects(:objects).returns []
|
16
12
|
AWS::S3::Bucket.expects(:find).at_least(1).returns bucket
|
17
|
-
|
13
|
+
|
18
14
|
@uploader = Jekyll::S3::Uploader.new
|
19
15
|
@uploader.expects(:local_files).at_least(1).returns ['index.html']
|
20
16
|
@uploader.expects(:open).at_least(1).returns true
|
21
17
|
end
|
22
|
-
|
18
|
+
|
23
19
|
it "should work right when there are no exceptions" do
|
24
20
|
AWS::S3::S3Object.expects(:store).at_least(1).returns(true)
|
25
21
|
@uploader.send(:upload_to_s3!).should
|
26
22
|
end
|
27
|
-
|
23
|
+
|
28
24
|
it "should properly handle exceptions on uploading to S3" do
|
29
25
|
AWS::S3::S3Object.expects(:store).raises(AWS::S3::RequestTimeout.new('timeout', 'timeout')).then.at_least(1).returns(true)
|
30
26
|
@uploader.send(:upload_to_s3!).should
|
31
27
|
end
|
32
28
|
end
|
33
|
-
|
29
|
+
|
30
|
+
describe "#call_cloudfront_invalidation" do
|
31
|
+
it "should invalidate Cloudfront items if the configuration 'cloudfront_dist_id' exists" do
|
32
|
+
configure_uploader({
|
33
|
+
"s3_id" => "xx",
|
34
|
+
"s3_secret" => "zz",
|
35
|
+
"s3_bucket" => "bucket",
|
36
|
+
"cloudfront_distribution_id" => "dist id"
|
37
|
+
})
|
38
|
+
Jekyll::Cloudfront::Invalidator.expects(:invalidate).with("xx", "zz", "bucket", "dist id")
|
39
|
+
Jekyll::S3::Uploader.run!
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should skip calling Cloudfront if the configuration 'cloudfront_dist_id' is missing" do
|
43
|
+
configure_uploader({
|
44
|
+
"s3_id" => "xx",
|
45
|
+
"s3_secret" => "zz",
|
46
|
+
"s3_bucket" => "bucket"
|
47
|
+
})
|
48
|
+
Jekyll::Cloudfront::Invalidator.expects(:invalidate).never
|
49
|
+
Jekyll::S3::Uploader.run!
|
50
|
+
end
|
51
|
+
|
52
|
+
def configure_uploader(config)
|
53
|
+
def disable_methods_that_interact_with_world
|
54
|
+
Jekyll::S3::Uploader.any_instance.expects(:upload_to_s3!).returns nil
|
55
|
+
Jekyll::S3::Uploader.any_instance.expects(:check_jekyll_project!).returns nil
|
56
|
+
Jekyll::S3::Uploader.any_instance.expects(:check_s3_configuration!).returns nil
|
57
|
+
end
|
58
|
+
YAML.expects(:load_file).with('_jekyll_s3.yml').returns(config)
|
59
|
+
disable_methods_that_interact_with_world
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,150 +1,195 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-s3
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 4
|
10
|
-
version: 0.0.4
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Philippe Creux
|
9
|
+
- Lauri Lehmijoki
|
14
10
|
autorequire:
|
15
11
|
bindir: bin
|
16
12
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2012-08-28 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
21
16
|
name: aws-s3
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :runtime
|
22
24
|
prerelease: false
|
23
|
-
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: simple-cloudfront-invalidator
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
24
34
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
32
39
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: rspec
|
36
40
|
prerelease: false
|
37
|
-
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
38
50
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
version: "0"
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
46
55
|
type: :development
|
47
|
-
version_requirements: *id002
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: mocha
|
50
56
|
prerelease: false
|
51
|
-
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
58
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: mocha
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
60
71
|
type: :development
|
61
|
-
version_requirements: *id003
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: cucumber
|
64
72
|
prerelease: false
|
65
|
-
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: cucumber
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
66
82
|
none: false
|
67
|
-
requirements:
|
68
|
-
- -
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
|
71
|
-
segments:
|
72
|
-
- 0
|
73
|
-
version: "0"
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
74
87
|
type: :development
|
75
|
-
|
76
|
-
|
88
|
+
prerelease: false
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
77
96
|
name: aruba
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 0.4.7
|
103
|
+
type: :development
|
78
104
|
prerelease: false
|
79
|
-
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
106
|
none: false
|
81
|
-
requirements:
|
82
|
-
- -
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
hash: 1
|
85
|
-
segments:
|
86
|
-
- 0
|
87
|
-
- 4
|
88
|
-
- 7
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
89
110
|
version: 0.4.7
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rake
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
90
119
|
type: :development
|
91
|
-
|
92
|
-
|
93
|
-
|
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
|
+
description: ! 'This Gem allows you to push your Jekyll blog to AWS S3.
|
128
|
+
|
129
|
+
In addition, you can use this Gem to invalidate the related Cloudfront
|
130
|
+
|
131
|
+
distribution, making it easy to deliver your blog via the CDN.'
|
132
|
+
email:
|
94
133
|
- pcreux@gmail.com
|
95
|
-
|
134
|
+
- lauri.lehmijoki@iki.fi
|
135
|
+
executables:
|
96
136
|
- jekyll-s3
|
97
137
|
extensions: []
|
98
|
-
|
99
138
|
extra_rdoc_files: []
|
100
|
-
|
101
|
-
files:
|
139
|
+
files:
|
102
140
|
- .gitignore
|
141
|
+
- .travis.yml
|
103
142
|
- Gemfile
|
104
143
|
- README.md
|
105
144
|
- Rakefile
|
106
145
|
- bin/jekyll-s3
|
146
|
+
- features/jekyll-s3-cloudfront.feature
|
107
147
|
- features/jekyll-s3.feature
|
108
148
|
- features/support/env.rb
|
109
149
|
- jekyll-s3.gemspec
|
150
|
+
- lib/cloudfront/invalidator.rb
|
110
151
|
- lib/jekyll-s3.rb
|
111
152
|
- lib/jekyll-s3/cli.rb
|
112
153
|
- lib/jekyll-s3/errors.rb
|
113
154
|
- lib/jekyll-s3/uploader.rb
|
114
155
|
- lib/jekyll-s3/version.rb
|
156
|
+
- spec/lib/invalidator_spec.rb
|
115
157
|
- spec/lib/uploader_spec.rb
|
116
|
-
|
158
|
+
- spec/spec_helper.rb
|
159
|
+
homepage: https://github.com/laurilehmijoki/jekyll-s3
|
117
160
|
licenses: []
|
118
|
-
|
119
161
|
post_install_message:
|
120
162
|
rdoc_options: []
|
121
|
-
|
122
|
-
require_paths:
|
163
|
+
require_paths:
|
123
164
|
- lib
|
124
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
165
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
125
166
|
none: false
|
126
|
-
requirements:
|
127
|
-
- -
|
128
|
-
- !ruby/object:Gem::Version
|
129
|
-
|
130
|
-
segments:
|
167
|
+
requirements:
|
168
|
+
- - ! '>='
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: '0'
|
171
|
+
segments:
|
131
172
|
- 0
|
132
|
-
|
133
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
|
+
hash: 671964648276143186
|
174
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
175
|
none: false
|
135
|
-
requirements:
|
136
|
-
- -
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
|
139
|
-
segments:
|
176
|
+
requirements:
|
177
|
+
- - ! '>='
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0'
|
180
|
+
segments:
|
140
181
|
- 0
|
141
|
-
|
182
|
+
hash: 671964648276143186
|
142
183
|
requirements: []
|
143
|
-
|
144
184
|
rubyforge_project:
|
145
|
-
rubygems_version: 1.8.
|
185
|
+
rubygems_version: 1.8.24
|
146
186
|
signing_key:
|
147
187
|
specification_version: 3
|
148
|
-
summary: Push your
|
149
|
-
test_files:
|
150
|
-
|
188
|
+
summary: Push your Jekyll blog to S3
|
189
|
+
test_files:
|
190
|
+
- features/jekyll-s3-cloudfront.feature
|
191
|
+
- features/jekyll-s3.feature
|
192
|
+
- features/support/env.rb
|
193
|
+
- spec/lib/invalidator_spec.rb
|
194
|
+
- spec/lib/uploader_spec.rb
|
195
|
+
- spec/spec_helper.rb
|