middleman-s3_sync 3.0.16 → 3.0.17

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.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NDFlMjY1ZDIzOWVjYTk3OTczNDlhYTM0NGQyNTVjZWNmNzE2Y2Q3Mw==
5
+ data.tar.gz: !binary |-
6
+ MDA0YmI3MGY4YWQ1NmVlOGFmOTVlZjVhZDcxYzk5YThlY2E0MzhlMQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ NWNjMjIwOTdiNmVkYjFkOTYxOWU2OWE0ODRkZDBiOGNhZDIwYWNkNWI5ZmU5
10
+ MWEzYjc2NjI2NDVlZmRiNjRhNzE2ZDZiYjdkMjg5MDdmYTQ0MTNlY2RhOTg2
11
+ YzM0NTIyNWY1MDc4NjQ5MzMzNWZhZTIxN2Q1MDc4ODEzM2Q1MzI=
12
+ data.tar.gz: !binary |-
13
+ NTJhNDhhZjc0ZGM2YWQ0Y2E3YjU0OWY0MDQxY2RlYjQxZDViOWZlMzA5Y2Yx
14
+ ZjQwNWI4MjY2ODk5YWYyYTdiOTk0YmNhMzM1Yjk1YWU4OWZiZTJkNmUwYWUy
15
+ MjhjZmIxMjRmMzc3MDE5MmNmNDI4ODQ0ZjY0NDI3NzY2OGFlNWE=
@@ -2,6 +2,15 @@
2
2
 
3
3
  The gem that tries really hard not to push files to S3.
4
4
 
5
+ ## v3.0.17
6
+
7
+ * Limits the number of concurrent threads used while processing the
8
+ resources and files. (#21)
9
+ * Adds the option to use reduced redundancy storage for the bucket. (#8)
10
+ * Adds the license to the gem specs. (#20)
11
+ * Makes sure tha the .s3_sync file is read when the sync occures within
12
+ a build. (#22, #23)
13
+
5
14
  ## v3.0.16
6
15
 
7
16
  * Adds the ignore directory and redirects logic to the --force option as
data/README.md CHANGED
@@ -34,14 +34,15 @@ You need to add the following code to your ```config.rb``` file:
34
34
 
35
35
  ```ruby
36
36
  activate :s3_sync do |s3_sync|
37
- s3_sync.bucket = 'my.bucket.com' # The name of the S3 bucket you are targetting. This is globally unique.
38
- s3_sync.region = 'us-west-1' # The AWS region for your bucket.
39
- s3_sync.aws_access_key_id = 'AWS KEY ID'
40
- s3_sync.aws_secret_access_key = 'AWS SECRET KEY'
41
- s3_sync.delete = false # We delete stray files by default.
42
- s3_sync.after_build = false # We chain after the build step by default. This may not be your desired behavior...
43
- s3_sync.prefer_gzip = true
44
- end
37
+ s3_sync.bucket = 'my.bucket.com' # The name of the S3 bucket you are targetting. This is globally unique.
38
+ s3_sync.region = 'us-west-1' # The AWS region for your bucket.
39
+ s3_sync.aws_access_key_id = 'AWS KEY ID'
40
+ s3_sync.aws_secret_access_key = 'AWS SECRET KEY'
41
+ s3_sync.delete = false # We delete stray files by default.
42
+ s3_sync.after_build = false # We chain after the build step by default. This may not be your desired behavior...
43
+ s3_sync.prefer_gzip = true
44
+ s3_sync.reduced_redundancy_storage = false
45
+ end
45
46
  ```
46
47
 
47
48
  You can then start synchronizing files with S3 through ```middleman s3_sync```.
@@ -50,13 +51,14 @@ You can then start synchronizing files with S3 through ```middleman s3_sync```.
50
51
 
51
52
  The following defaults apply to the configuration items:
52
53
 
53
- | Setting | Default |
54
- | ----------------- | ---------------------------- |
55
- | aws_access_key_id | ```ENV['AWS_ACCESS_KEY_ID``` |
56
- | aws_secret_access_key | ```ENV['AWS_SECRET_ACCESS_KEY']``` |
57
- | delete | ```true``` |
58
- | after_build | ```false``` |
59
- | prefer_gzip | ```true``` |
54
+ | Setting | Default |
55
+ | ----------------- | ---------------------------- |
56
+ | aws_access_key_id | ```ENV['AWS_ACCESS_KEY_ID``` |
57
+ | aws_secret_access_key | ```ENV['AWS_SECRET_ACCESS_KEY']``` |
58
+ | delete | ```true``` |
59
+ | after_build | ```false``` |
60
+ | prefer_gzip | ```true``` |
61
+ | reduced_redundancy_storage | ```false``` |
60
62
 
61
63
  You do not need to specify the settings that match the defaults. This
62
64
  simplify the configuration of the extension:
@@ -34,15 +34,6 @@ module Middleman
34
34
  shared_inst.s3_sync_options.bucket = options[:bucket] if options[:bucket]
35
35
  shared_inst.s3_sync_options.verbose = options[:verbose] if options[:verbose]
36
36
 
37
- config_file = File.join(shared_inst.root_path, ".s3_sync")
38
-
39
- if File.exist?(config_file)
40
- config = YAML::load( File.open( config_file ) )
41
-
42
- shared_inst.s3_sync_options.aws_secret_access_key = config["aws_secret_access_key"] if config["aws_secret_access_key"]
43
- shared_inst.s3_sync_options.aws_access_key_id = config["aws_access_key_id"] if config["aws_access_key_id"]
44
- end
45
-
46
37
  ::Middleman::S3Sync.sync
47
38
  end
48
39
  end
@@ -45,7 +45,7 @@ module Middleman
45
45
  end
46
46
 
47
47
  def resources
48
- @resources ||= paths.pmap do |p|
48
+ @resources ||= paths.pmap(32) do |p|
49
49
  progress_bar.increment
50
50
  S3Sync::Resource.new(p)
51
51
  end
@@ -71,7 +71,7 @@ module Middleman
71
71
  local_paths.reject! { |p| p =~ /\.gz$/ && File.exist?(p.gsub(/\.gz$/, '')) }
72
72
  end
73
73
 
74
- local_paths.pmap { |p| p.gsub(/#{build_dir}\//, '') }
74
+ local_paths.pmap(32) { |p| p.gsub(/#{build_dir}\//, '') }
75
75
  end
76
76
  end
77
77
 
@@ -13,8 +13,14 @@ module Middleman
13
13
  :build_dir,
14
14
  :force,
15
15
  :prefer_gzip,
16
+ :reduced_redundancy_storage,
16
17
  :verbose
17
18
 
19
+ def initialize
20
+ # read config from .s3_sync on initialization
21
+ self.read_config
22
+ end
23
+
18
24
  def add_caching_policy(content_type, options)
19
25
  caching_policies[content_type.to_s] = BrowserCachePolicy.new(options)
20
26
  end
@@ -51,6 +57,28 @@ module Middleman
51
57
  (@prefer_gzip.nil? ? true : @prefer_gzip)
52
58
  end
53
59
 
60
+ # Read config options from an IO stream and set them on `self`. Defaults
61
+ # to reading from the `.s3_sync` file in the MM project root if it exists.
62
+ #
63
+ # @param io [IO] an IO stream to read from
64
+ # @return [void]
65
+ def read_config(io = nil)
66
+ unless io
67
+ root_path = ::Middleman::Application.root
68
+ config_file_path = File.join(root_path, ".s3_sync")
69
+
70
+ # skip if config file does not exist
71
+ return unless File.exists?(config_file_path)
72
+
73
+ io = File.open(config_file_path, "r")
74
+ end
75
+
76
+ config = YAML.load(io)
77
+
78
+ self.aws_access_key_id = config["aws_access_key_id"] if config["aws_access_key_id"]
79
+ self.aws_secret_access_key = config["aws_secret_access_key"] if config["aws_secret_access_key"]
80
+ end
81
+
54
82
  protected
55
83
  class BrowserCachePolicy
56
84
  attr_accessor :policies
@@ -9,7 +9,7 @@ module Middleman
9
9
 
10
10
  def initialize(path)
11
11
  @path = path
12
- @s3_resource = bucket.files.get(path) rescue nil
12
+ @s3_resource = bucket.files.head(path)
13
13
  end
14
14
 
15
15
  def remote_path
@@ -36,6 +36,10 @@ module Middleman
36
36
  attributes[:content_encoding] = "gzip"
37
37
  end
38
38
 
39
+ if options.reduced_redundancy_storage
40
+ attributes[:storage_class] = 'REDUCED_REDUNDANCY'
41
+ end
42
+
39
43
  attributes
40
44
  end
41
45
  alias :attributes :to_h
@@ -63,6 +67,10 @@ module Middleman
63
67
  s3_resource.content_encoding = "gzip"
64
68
  end
65
69
 
70
+ if options.reduced_redundancy_storage
71
+ s3_resource.storage_class = 'REDUCED_REDUNDANCY'
72
+ end
73
+
66
74
  s3_resource.save
67
75
  end
68
76
 
@@ -135,7 +143,7 @@ module Middleman
135
143
  end
136
144
  elsif local?
137
145
  :new
138
- elsif redirect?
146
+ elsif remote? && redirect?
139
147
  :ignored
140
148
  else
141
149
  :deleted
@@ -151,7 +159,7 @@ module Middleman
151
159
  end
152
160
 
153
161
  def redirect?
154
- s3_resource.metadata.has_key? 'x-amz-website-redirect-location'
162
+ s3_resource.metadata.has_key?('x-amz-website-redirect-location')
155
163
  end
156
164
 
157
165
  def directory?
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module S3Sync
3
- VERSION = "3.0.16"
3
+ VERSION = "3.0.17"
4
4
  end
5
5
  end
@@ -11,6 +11,7 @@ Gem::Specification.new do |gem|
11
11
  gem.description = %q{Only syncs files that have been updated to S3.}
12
12
  gem.summary = %q{Tries really, really hard not to push files to S3.}
13
13
  gem.homepage = "http://github.com/fredjean/middleman-s3_sync"
14
+ gem.license = 'MIT'
14
15
 
15
16
  gem.files = `git ls-files`.split($/)
16
17
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -101,4 +101,18 @@ describe Middleman::S3Sync::Options do
101
101
  policy.expires.should == CGI.rfc1123_date(expiration)
102
102
  end
103
103
  end
104
+
105
+ context "#read_config" do
106
+ let(:aws_access_key_id) { "foo" }
107
+ let(:aws_secret_access_key) { "bar" }
108
+ let(:config) { { "aws_access_key_id" => aws_access_key_id, "aws_secret_access_key" => aws_secret_access_key } }
109
+ let(:file) { StringIO.new(YAML.dump(config)) }
110
+
111
+ before do
112
+ options.read_config(file)
113
+ end
114
+
115
+ its(:aws_access_key_id) { should eq(aws_access_key_id) }
116
+ its(:aws_secret_access_key) { should eq(aws_secret_access_key) }
117
+ end
104
118
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-s3_sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.16
5
- prerelease:
4
+ version: 3.0.17
6
5
  platform: ruby
7
6
  authors:
8
7
  - Frederic Jean
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-09-02 00:00:00.000000000 Z
12
+ date: 2013-09-18 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: middleman-core
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - ! '>='
21
19
  - !ruby/object:Gem::Version
@@ -23,7 +21,6 @@ dependencies:
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - ! '>='
29
26
  - !ruby/object:Gem::Version
@@ -31,7 +28,6 @@ dependencies:
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: fog
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
32
  - - ! '>='
37
33
  - !ruby/object:Gem::Version
@@ -39,7 +35,6 @@ dependencies:
39
35
  type: :runtime
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
39
  - - ! '>='
45
40
  - !ruby/object:Gem::Version
@@ -47,7 +42,6 @@ dependencies:
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: map
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
46
  - - ! '>='
53
47
  - !ruby/object:Gem::Version
@@ -55,7 +49,6 @@ dependencies:
55
49
  type: :runtime
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
53
  - - ! '>='
61
54
  - !ruby/object:Gem::Version
@@ -63,7 +56,6 @@ dependencies:
63
56
  - !ruby/object:Gem::Dependency
64
57
  name: pmap
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
60
  - - ! '>='
69
61
  - !ruby/object:Gem::Version
@@ -71,7 +63,6 @@ dependencies:
71
63
  type: :runtime
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
67
  - - ! '>='
77
68
  - !ruby/object:Gem::Version
@@ -79,7 +70,6 @@ dependencies:
79
70
  - !ruby/object:Gem::Dependency
80
71
  name: ruby-progressbar
81
72
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
73
  requirements:
84
74
  - - ! '>='
85
75
  - !ruby/object:Gem::Version
@@ -87,7 +77,6 @@ dependencies:
87
77
  type: :runtime
88
78
  prerelease: false
89
79
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
80
  requirements:
92
81
  - - ! '>='
93
82
  - !ruby/object:Gem::Version
@@ -95,7 +84,6 @@ dependencies:
95
84
  - !ruby/object:Gem::Dependency
96
85
  name: colorize
97
86
  requirement: !ruby/object:Gem::Requirement
98
- none: false
99
87
  requirements:
100
88
  - - ! '>='
101
89
  - !ruby/object:Gem::Version
@@ -103,7 +91,6 @@ dependencies:
103
91
  type: :runtime
104
92
  prerelease: false
105
93
  version_requirements: !ruby/object:Gem::Requirement
106
- none: false
107
94
  requirements:
108
95
  - - ! '>='
109
96
  - !ruby/object:Gem::Version
@@ -111,7 +98,6 @@ dependencies:
111
98
  - !ruby/object:Gem::Dependency
112
99
  name: rake
113
100
  requirement: !ruby/object:Gem::Requirement
114
- none: false
115
101
  requirements:
116
102
  - - ! '>='
117
103
  - !ruby/object:Gem::Version
@@ -119,7 +105,6 @@ dependencies:
119
105
  type: :development
120
106
  prerelease: false
121
107
  version_requirements: !ruby/object:Gem::Requirement
122
- none: false
123
108
  requirements:
124
109
  - - ! '>='
125
110
  - !ruby/object:Gem::Version
@@ -127,7 +112,6 @@ dependencies:
127
112
  - !ruby/object:Gem::Dependency
128
113
  name: pry
129
114
  requirement: !ruby/object:Gem::Requirement
130
- none: false
131
115
  requirements:
132
116
  - - ! '>='
133
117
  - !ruby/object:Gem::Version
@@ -135,7 +119,6 @@ dependencies:
135
119
  type: :development
136
120
  prerelease: false
137
121
  version_requirements: !ruby/object:Gem::Requirement
138
- none: false
139
122
  requirements:
140
123
  - - ! '>='
141
124
  - !ruby/object:Gem::Version
@@ -143,7 +126,6 @@ dependencies:
143
126
  - !ruby/object:Gem::Dependency
144
127
  name: pry-nav
145
128
  requirement: !ruby/object:Gem::Requirement
146
- none: false
147
129
  requirements:
148
130
  - - ! '>='
149
131
  - !ruby/object:Gem::Version
@@ -151,7 +133,6 @@ dependencies:
151
133
  type: :development
152
134
  prerelease: false
153
135
  version_requirements: !ruby/object:Gem::Requirement
154
- none: false
155
136
  requirements:
156
137
  - - ! '>='
157
138
  - !ruby/object:Gem::Version
@@ -159,7 +140,6 @@ dependencies:
159
140
  - !ruby/object:Gem::Dependency
160
141
  name: rspec
161
142
  requirement: !ruby/object:Gem::Requirement
162
- none: false
163
143
  requirements:
164
144
  - - ! '>='
165
145
  - !ruby/object:Gem::Version
@@ -167,7 +147,6 @@ dependencies:
167
147
  type: :development
168
148
  prerelease: false
169
149
  version_requirements: !ruby/object:Gem::Requirement
170
- none: false
171
150
  requirements:
172
151
  - - ! '>='
173
152
  - !ruby/object:Gem::Version
@@ -175,7 +154,6 @@ dependencies:
175
154
  - !ruby/object:Gem::Dependency
176
155
  name: timerizer
177
156
  requirement: !ruby/object:Gem::Requirement
178
- none: false
179
157
  requirements:
180
158
  - - ! '>='
181
159
  - !ruby/object:Gem::Version
@@ -183,7 +161,6 @@ dependencies:
183
161
  type: :development
184
162
  prerelease: false
185
163
  version_requirements: !ruby/object:Gem::Requirement
186
- none: false
187
164
  requirements:
188
165
  - - ! '>='
189
166
  - !ruby/object:Gem::Version
@@ -191,7 +168,6 @@ dependencies:
191
168
  - !ruby/object:Gem::Dependency
192
169
  name: travis
193
170
  requirement: !ruby/object:Gem::Requirement
194
- none: false
195
171
  requirements:
196
172
  - - ! '>='
197
173
  - !ruby/object:Gem::Version
@@ -199,7 +175,6 @@ dependencies:
199
175
  type: :development
200
176
  prerelease: false
201
177
  version_requirements: !ruby/object:Gem::Requirement
202
- none: false
203
178
  requirements:
204
179
  - - ! '>='
205
180
  - !ruby/object:Gem::Version
@@ -207,7 +182,6 @@ dependencies:
207
182
  - !ruby/object:Gem::Dependency
208
183
  name: travis-lint
209
184
  requirement: !ruby/object:Gem::Requirement
210
- none: false
211
185
  requirements:
212
186
  - - ! '>='
213
187
  - !ruby/object:Gem::Version
@@ -215,7 +189,6 @@ dependencies:
215
189
  type: :development
216
190
  prerelease: false
217
191
  version_requirements: !ruby/object:Gem::Requirement
218
- none: false
219
192
  requirements:
220
193
  - - ! '>='
221
194
  - !ruby/object:Gem::Version
@@ -250,34 +223,28 @@ files:
250
223
  - spec/resource_spec.rb
251
224
  - spec/spec_helper.rb
252
225
  homepage: http://github.com/fredjean/middleman-s3_sync
253
- licenses: []
226
+ licenses:
227
+ - MIT
228
+ metadata: {}
254
229
  post_install_message:
255
230
  rdoc_options: []
256
231
  require_paths:
257
232
  - lib
258
233
  required_ruby_version: !ruby/object:Gem::Requirement
259
- none: false
260
234
  requirements:
261
235
  - - ! '>='
262
236
  - !ruby/object:Gem::Version
263
237
  version: '0'
264
- segments:
265
- - 0
266
- hash: -2218609791572285789
267
238
  required_rubygems_version: !ruby/object:Gem::Requirement
268
- none: false
269
239
  requirements:
270
240
  - - ! '>='
271
241
  - !ruby/object:Gem::Version
272
242
  version: '0'
273
- segments:
274
- - 0
275
- hash: -2218609791572285789
276
243
  requirements: []
277
244
  rubyforge_project:
278
- rubygems_version: 1.8.23
245
+ rubygems_version: 2.1.1
279
246
  signing_key:
280
- specification_version: 3
247
+ specification_version: 4
281
248
  summary: Tries really, really hard not to push files to S3.
282
249
  test_files:
283
250
  - spec/options_spec.rb