middleman-s3_sync 3.0.16 → 3.0.17

Sign up to get free protection for your applications and to get access to all the features.
@@ -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