jekyll-s3 0.0.4 → 0.0.5
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/.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
|
+
[]
|
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
|