jekyll-s3 0.0.1

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/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in jekyll-s3.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/bin/jekyll-s3 ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../lib/jekyll-s3'
4
+
5
+ Jekyll::S3::CLI.run!
@@ -0,0 +1,87 @@
1
+ Feature: jekyll-s3
2
+
3
+ In order to push my jekyll site to s3
4
+ As a blogger
5
+ I want to run jekyll-s3 and say OMG it just worked!
6
+
7
+ Scenario: Run jekyll-s3 in the wrong directory
8
+ When I run "jekyll-s3"
9
+ Then the output should contain:
10
+ """
11
+ I can't find any directory called _site. Are you in the right directory?
12
+ """
13
+
14
+ Scenario: Run jekyll-s3 for the first time
15
+ Given a directory named "_site"
16
+ When I run "jekyll-s3"
17
+ Then the output should contain:
18
+ """
19
+ I've just generated a file called _jekyll_s3.yml. Go put your details in it!
20
+ """
21
+ Then the file "_jekyll_s3.yml" should contain:
22
+ """
23
+ s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
24
+ s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
25
+ s3_bucket: your.blog.bucket.com
26
+ """
27
+
28
+ Scenario: Run jekyll-s3 with an empty configuration file
29
+ Given a directory named "_site"
30
+ And an empty file named "_jekyll_s3.yml"
31
+ When I run "jekyll-s3"
32
+ Then the output should contain:
33
+ """
34
+ I can't parse the file _jekyll_s3.yml. It should look like this:
35
+ s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
36
+ s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
37
+ s3_bucket: your.blog.bucket.com
38
+ """
39
+
40
+ Scenario: Run jekyll-s3 with a malformed configuration file
41
+ Given a directory named "_site"
42
+ And a file named "_jekyll_s3.yml" with:
43
+ """
44
+ s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
45
+ this is not yaml
46
+ """
47
+ When I run "jekyll-s3"
48
+ Then the output should contain:
49
+ """
50
+ I can't parse the file _jekyll_s3.yml. It should look like this:
51
+ s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
52
+ s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
53
+ s3_bucket: your.blog.bucket.com
54
+ """
55
+
56
+ Scenario: Run jekyll-s3 with a configuration file that does not contain a bucket
57
+ Given a directory named "_site"
58
+ And a file named "_jekyll_s3.yml" with:
59
+ """
60
+ s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
61
+ s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
62
+ s3_bucket:
63
+ """
64
+ When I run "jekyll-s3"
65
+ Then the output should contain:
66
+ """
67
+ I can't parse the file _jekyll_s3.yml. It should look like this:
68
+ s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
69
+ s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
70
+ s3_bucket: your.blog.bucket.com
71
+ """
72
+
73
+ Scenario: Run jekyll-s3
74
+ Given a directory named "_site"
75
+ And a file named "_jekyll_s3.yml" with:
76
+ """
77
+ s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
78
+ s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
79
+ s3_bucket: your.blog.bucket.com
80
+ """
81
+ When I run "jekyll-s3"
82
+ Then the output should contain:
83
+ """
84
+ Uploading _site/* to your.blog.bucket.com
85
+ """
86
+
87
+
@@ -0,0 +1,22 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ Bundler.require
5
+
6
+ require 'aruba/cucumber'
7
+
8
+ # Following from 'aruba/cucumber'
9
+ Before do
10
+ @__aruba_original_paths = (ENV['PATH'] || '').split(File::PATH_SEPARATOR)
11
+ ENV['PATH'] = ([File.expand_path('bin')] + @__aruba_original_paths).join(File::PATH_SEPARATOR)
12
+ end
13
+
14
+ After do
15
+ ENV['PATH'] = @__aruba_original_paths.join(File::PATH_SEPARATOR)
16
+ end
17
+ # End of following from 'aruba/cucumber'
18
+
19
+ Then /^the file "([^"]*)" should contain:$/ do |file, exact_content|
20
+ check_file_content(file, exact_content, true)
21
+ end
22
+
data/jekyll-s3.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "jekyll-s3/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "jekyll-s3"
7
+ s.version = Jekyll::S3::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Philippe Creux"]
10
+ s.email = ["pcreux@gmail.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{Push your jekyll blog to S3"}
13
+ s.description = %q{Push your jekyll blog to AWS S3}
14
+
15
+ s.add_dependency 'aws-s3'
16
+
17
+ s.add_development_dependency 'rspec'
18
+ s.add_development_dependency 'cucumber'
19
+ s.add_development_dependency 'aruba'
20
+
21
+ s.files = `git ls-files`.split("\n")
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = ["lib"]
25
+ end
data/lib/jekyll-s3.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'yaml'
3
+ require 'aws/s3'
4
+
5
+ module Jekyll
6
+ module S3
7
+ end
8
+ end
9
+
10
+ %w{errors uploader cli}.each do |file|
11
+ require File.dirname(__FILE__) + "/jekyll-s3/#{file}"
12
+ end
@@ -0,0 +1,12 @@
1
+ module Jekyll
2
+ module S3
3
+ class CLI
4
+ def self.run!
5
+ Uploader.run!
6
+ rescue JekyllS3Error => e
7
+ puts e.message
8
+ exit 1
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,25 @@
1
+ module Jekyll
2
+ module S3
3
+ class JekyllS3Error < StandardError
4
+ end
5
+
6
+ class NotAJekyllProjectError < JekyllS3Error
7
+ def initialize(message = "I can't find any directory called _site. Are you in the right directory?")
8
+ super(message)
9
+ end
10
+ end
11
+
12
+ class NoConfigurationFileError < JekyllS3Error
13
+ def initialize(message = "I've just generated a file called _jekyll_s3.yml. Go put your details in it!")
14
+ super(message)
15
+ end
16
+ end
17
+
18
+ class MalformedConfigurationFileError < JekyllS3Error
19
+ def initialize(message = "I can't parse the file _jekyll_s3.yml. It should look like this:\n#{Uploader::CONFIGURATION_FILE_TEMPLATE}")
20
+ super(message)
21
+ end
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,102 @@
1
+ module Jekyll
2
+ module S3
3
+ class Uploader
4
+
5
+ SITE_DIR = "_site"
6
+ CONFIGURATION_FILE = '_jekyll_s3.yml'
7
+ CONFIGURATION_FILE_TEMPLATE = <<-EOF
8
+ s3_id: YOUR_AWS_S3_ACCESS_KEY_ID
9
+ s3_secret: YOUR_AWS_S3_SECRET_ACCESS_KEY
10
+ s3_bucket: your.blog.bucket.com
11
+ EOF
12
+
13
+
14
+ def self.run!
15
+ new.run!
16
+ end
17
+
18
+ def run!
19
+ check_jekyll_project!
20
+ check_s3_configuration!
21
+ upload_to_s3!
22
+ end
23
+
24
+ protected
25
+
26
+ include AWS::S3
27
+
28
+ def upload_to_s3!
29
+ puts "Uploading _site/* to #{@s3_bucket}"
30
+
31
+ AWS::S3::Base.establish_connection!(
32
+ :access_key_id => @s3_id,
33
+ :secret_access_key => @s3_secret,
34
+ :use_ssl => true
35
+ )
36
+ unless Service.buckets.map(&:name).include?(@s3_bucket)
37
+ puts("Creating bucket #{@s3_bucket}")
38
+ Bucket.create(@s3_bucket)
39
+ end
40
+
41
+ bucket = Bucket.find(@s3_bucket)
42
+
43
+ local_files = Dir[SITE_DIR + '/**/*'].
44
+ delete_if { |f| File.directory?(f) }.
45
+ map { |f| f.gsub(SITE_DIR + '/', '') }
46
+
47
+ remote_files = bucket.objects.map { |f| f.key }
48
+
49
+ to_upload = local_files
50
+ to_upload.each do |f|
51
+ if S3Object.store(f, open("#{SITE_DIR}/#{f}"), @s3_bucket, :access => 'public-read')
52
+ puts("Upload #{f}: Success!")
53
+ else
54
+ puts("Upload #{f}: FAILURE!")
55
+ end
56
+ end
57
+
58
+ to_delete = remote_files - local_files
59
+ to_delete.each do |f|
60
+ if S3Object.delete(f, @s3_bucket)
61
+ puts("Delete #{f}: Success!")
62
+ else
63
+ puts("Delete #{f}: FAILURE!")
64
+ end
65
+ end
66
+ end
67
+
68
+ def check_jekyll_project!
69
+ raise NotAJekyllProjectError unless File.directory?(SITE_DIR)
70
+ end
71
+
72
+ # Raise NoConfigurationFileError if the configuration file does not exists
73
+ # Raise MalformedConfigurationFileError if the configuration file does not contain the keys we expect
74
+ # Loads the configuration if everything looks cool
75
+ def check_s3_configuration!
76
+ unless File.exists?(CONFIGURATION_FILE)
77
+ create_template_configuration_file
78
+ raise NoConfigurationFileError
79
+ end
80
+ raise MalformedConfigurationFileError unless load_configuration
81
+ end
82
+
83
+ # Load configuration from _jekyll_s3.yml
84
+ # Return true if all values are set and not emtpy
85
+ def load_configuration
86
+ config = YAML.load_file(CONFIGURATION_FILE) rescue nil
87
+ return false unless config
88
+
89
+ @s3_id = config['s3_id']
90
+ @s3_secret = config['s3_secret']
91
+ @s3_bucket = config['s3_bucket']
92
+
93
+ [@s3_id, @s3_secret, @s3_bucket].select { |k| k.nil? || k == '' }.empty?
94
+ end
95
+
96
+ def create_template_configuration_file
97
+ File.open(CONFIGURATION_FILE, 'w') { |f| f.write(CONFIGURATION_FILE_TEMPLATE) }
98
+
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,5 @@
1
+ module Jekyll
2
+ module S3
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-s3
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Philippe Creux
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-04-01 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: aws-s3
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rspec
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: cucumber
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :development
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: aruba
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ type: :development
76
+ version_requirements: *id004
77
+ description: Push your jekyll blog to AWS S3
78
+ email:
79
+ - pcreux@gmail.com
80
+ executables:
81
+ - jekyll-s3
82
+ extensions: []
83
+
84
+ extra_rdoc_files: []
85
+
86
+ files:
87
+ - .gitignore
88
+ - Gemfile
89
+ - Rakefile
90
+ - bin/jekyll-s3
91
+ - features/jekyll-s3.feature
92
+ - features/support/env.rb
93
+ - jekyll-s3.gemspec
94
+ - lib/jekyll-s3.rb
95
+ - lib/jekyll-s3/cli.rb
96
+ - lib/jekyll-s3/errors.rb
97
+ - lib/jekyll-s3/uploader.rb
98
+ - lib/jekyll-s3/version.rb
99
+ has_rdoc: true
100
+ homepage: ""
101
+ licenses: []
102
+
103
+ post_install_message:
104
+ rdoc_options: []
105
+
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ hash: 3
114
+ segments:
115
+ - 0
116
+ version: "0"
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ hash: 3
123
+ segments:
124
+ - 0
125
+ version: "0"
126
+ requirements: []
127
+
128
+ rubyforge_project:
129
+ rubygems_version: 1.3.7
130
+ signing_key:
131
+ specification_version: 3
132
+ summary: Push your jekyll blog to S3"
133
+ test_files:
134
+ - features/jekyll-s3.feature
135
+ - features/support/env.rb