jekyll-s3 2.4.3 → 2.5.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
@@ -96,6 +96,15 @@ s3_endpoint: ap-northeast-1
96
96
  The valid `s3_endpoint` values consist of the [S3 location constraint
97
97
  values](http://docs.amazonwebservices.com/general/latest/gr/rande.html#s3_region).
98
98
 
99
+ ### Ignoring files you want to keep on AWS
100
+
101
+ Sometimes there are files or directories you want to keep on S3, but not on
102
+ your local machine. You may define a regular expression to ignore files like so:
103
+
104
+ ```yaml
105
+ ignore_on_server: that_folder_of_stuff_i_dont_keep_locally
106
+ ```
107
+
99
108
  ### Reduced Redundancy
100
109
 
101
110
  You can reduce the cost of hosting your blog on S3 by using Reduced Redundancy Storage:
@@ -125,16 +134,32 @@ bucket that are not on your local computer.
125
134
  Enable the headless mode by adding the `--headless` or `-h` argument after
126
135
  `jekyll-s3`.
127
136
 
128
- ## Using `jekyll-s3` as a library
137
+ ### Using `jekyll-s3` as a library
129
138
 
130
139
  By nature, `jekyll-s3` is a command-line interface tool. You can, however, use
131
140
  it programmatically by calling the same API as the executable `jekyll-s3` does:
132
141
 
133
142
  ````ruby
143
+ require 'jekyll-s3'
134
144
  is_headless = true
135
145
  Jekyll::S3::CLI.new.run('/path/to/your/jekyll-site/_site/', is_headless)
136
146
  ````
137
147
 
148
+ You can also use a basic `Hash` instead of a `_jekyll_s3.yml` file:
149
+
150
+ ```ruby
151
+ config = {
152
+ "s3_id" => YOUR_AWS_S3_ACCESS_KEY_ID,
153
+ "s3_secret" => YOUR_AWS_S3_SECRET_ACCESS_KEY,
154
+ "s3_bucket" => your.blog.bucket.com
155
+ }
156
+ in_headless = true
157
+ Jekyll::S3::Uploader.run('/path/to/your/jekyll-site/_site/', config, in_headless)
158
+ ```
159
+
160
+ The code above will assume that you have the `_jekyll_s3.yml` in the directory
161
+ `/path/to/your/jekyll-site`.
162
+
138
163
  ## Known issues
139
164
 
140
165
  None. Please send a pull request if you spot any.
@@ -175,6 +200,7 @@ MIT
175
200
  Copyright (c) 2011 VersaPay, Philippe Creux.
176
201
 
177
202
  Contributors (in alphabetical order)
203
+ * Alan deLevie
178
204
  * Cory Kaufman-Schofield
179
205
  * Chris Kelly
180
206
  * Chris Moos
data/changelog.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  This project uses [Semantic Versioning](http://semver.org).
4
4
 
5
+ ## 2.5.0
6
+
7
+ * Use regex to ignore files on server
8
+
5
9
  ## 2.4.3
6
10
 
7
11
  * Make `s3_endpoint` optional in `_jekyll_s3.yml` when using `jekyll-s3` as a
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.4.3"
6
+ s.version = "2.5.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"]
@@ -12,8 +12,10 @@ module Jekyll
12
12
  s3, config, site_dir
13
13
  )
14
14
 
15
- deleted_files_count = remove_superfluous_files(
16
- s3, config['s3_bucket'], site_dir, in_headless_mode)
15
+ deleted_files_count = remove_superfluous_files(s3, { :s3_bucket => config['s3_bucket'],
16
+ :site_dir => site_dir,
17
+ :in_headless_mode => in_headless_mode,
18
+ :ignore_on_server => config["ignore_on_server"] })
17
19
 
18
20
  print_done_report config
19
21
 
@@ -63,10 +65,16 @@ module Jekyll
63
65
  end
64
66
  end
65
67
 
66
- def self.remove_superfluous_files(s3, s3_bucket_name, site_dir, in_headless_mode)
68
+ def self.remove_superfluous_files(s3, options)
69
+ s3_bucket_name = options.fetch(:s3_bucket)
70
+ site_dir = options.fetch(:site_dir)
71
+ in_headless_mode = options.fetch(:in_headless_mode)
72
+
67
73
  remote_files = s3.buckets[s3_bucket_name].objects.map { |f| f.key }
68
74
  local_files = load_all_local_files(site_dir)
69
- files_to_delete = remote_files - local_files
75
+ files_to_delete = build_list_of_files_to_delete(remote_files, local_files, options[:ignore_on_server])
76
+
77
+
70
78
  deleted_files_count = 0
71
79
  if in_headless_mode
72
80
  files_to_delete.each { |s3_object_key|
@@ -82,6 +90,12 @@ module Jekyll
82
90
  deleted_files_count
83
91
  end
84
92
 
93
+ def self.build_list_of_files_to_delete(remote_files, local_files, ignore_on_server = nil)
94
+ ignore_on_server = Regexp.new(ignore_on_server || "a_string_that_should_never_match_ever")
95
+ files_to_delete = remote_files - local_files
96
+ files_to_delete.reject { |file| ignore_on_server.match(file) }
97
+ end
98
+
85
99
  def self.delete_s3_object(s3, s3_bucket_name, s3_object_key)
86
100
  Retry.run_with_retry do
87
101
  s3.buckets[s3_bucket_name].objects[s3_object_key].delete
@@ -16,4 +16,15 @@ describe Jekyll::S3::Uploader do
16
16
  files.should include('.vimrc')
17
17
  end
18
18
  end
19
+
20
+ context "#build_list_of_files_to_delete" do
21
+ it "ignores files which match a regular expression" do
22
+ files_to_delete = Jekyll::S3::Uploader.build_list_of_files_to_delete(["a", "b", "ignored"], ["a"], "ignored")
23
+ files_to_delete.should eq ["b"]
24
+ end
25
+ it "does not ignore when you don't provide an ignored regex" do
26
+ files_to_delete = Jekyll::S3::Uploader.build_list_of_files_to_delete(["a", "b", "ignored"], ["a"])
27
+ files_to_delete.should eq ["b", "ignored"]
28
+ end
29
+ end
19
30
  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.4.3
4
+ version: 2.5.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-04-09 00:00:00.000000000 Z
13
+ date: 2013-04-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: aws-sdk
@@ -331,15 +331,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
331
331
  - - ! '>='
332
332
  - !ruby/object:Gem::Version
333
333
  version: '0'
334
+ segments:
335
+ - 0
336
+ hash: 392463145716040126
334
337
  required_rubygems_version: !ruby/object:Gem::Requirement
335
338
  none: false
336
339
  requirements:
337
340
  - - ! '>='
338
341
  - !ruby/object:Gem::Version
339
342
  version: '0'
343
+ segments:
344
+ - 0
345
+ hash: 392463145716040126
340
346
  requirements: []
341
347
  rubyforge_project:
342
- rubygems_version: 1.8.24
348
+ rubygems_version: 1.8.25
343
349
  signing_key:
344
350
  specification_version: 3
345
351
  summary: Push your Jekyll blog to S3