asset_sync 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5ea1bceb8cfa4d10954bac53e96fe5bd2129b47c
4
- data.tar.gz: d0396ac1587c86f5ab9a192bdd847e95f45e1cdf
3
+ metadata.gz: 5b188551b31d31cea82d0a2daa66ea13611526bf
4
+ data.tar.gz: 8dc71ab706a8da82c83030d1c0bcabe88d44e4d4
5
5
  SHA512:
6
- metadata.gz: adb609d088e1e7a92105739ebcedd35cb2dd0dabd64bdca483e27ffe5a448fff99135d8cc6af5eae5a3ee0568147eb1927d317c9ef278eccf6dc7e23e33f1624
7
- data.tar.gz: fa9dea180a9a7394e8a56f31dc646e138070b3d2af40ed17c858d1ef3e48c4ddecac381d17641397576477ee7d37cec26d2076e46963f2013837cb259ee0c6b0
6
+ metadata.gz: 4666031ff720620d925adbfee0e5213abd28c96e2df89f37af6e88dfd96d76e3b439e4a0e52c373243ea5452078218b07afaacc86f4b35f8fdeed8fa660c37f9
7
+ data.tar.gz: bef8d1ecde9c3bb946016db35ec7f558b9dea0f51a96bb19a727f03d2560688b48901720a3d2e102cf1aad2e5b3a617021e1cdc2e37bb502912dbbb36c9ef422
@@ -0,0 +1,7 @@
1
+ # EditorConfig is awesome: http://EditorConfig.org
2
+
3
+ # top-most EditorConfig file
4
+ root = true
5
+
6
+ [*.{md,markdown}]
7
+ trim_trailing_whitespace = false
@@ -18,6 +18,23 @@ This project adheres to [Semantic Versioning](http://semver.org/).
18
18
  - Nothing
19
19
 
20
20
 
21
+ ## [2.2.0] - 2016-07-12
22
+
23
+ ### Added
24
+
25
+ - Add method `add_local_file_paths` to config for uploading additional files, like webpacker
26
+ (https://github.com/AssetSync/asset_sync/pull/347)
27
+
28
+ ### Changed
29
+
30
+ - Nothing
31
+
32
+ ### Fixed
33
+
34
+ - Fix too many files open when uploading local files
35
+ (https://github.com/AssetSync/asset_sync/pull/351)
36
+
37
+
21
38
  ## [2.1.0] - 2016-05-19
22
39
 
23
40
  ### Added
@@ -813,7 +830,8 @@ Changes:
813
830
  * Merge branch 'sinatra'
814
831
 
815
832
 
816
- [Unreleased]: https://github.com/AssetSync/asset_sync/compare/v2.1.0...HEAD
833
+ [Unreleased]: https://github.com/AssetSync/asset_sync/compare/v2.2.0...HEAD
834
+ [2.2.0]: https://github.com/AssetSync/asset_sync/compare/v2.1.0...v2.2.0
817
835
  [2.1.0]: https://github.com/AssetSync/asset_sync/compare/v2.0.0...v2.1.0
818
836
  [2.0.0]: https://github.com/AssetSync/asset_sync/compare/v1.3.0...v2.0.0
819
837
  [1.3.0]: https://github.com/AssetSync/asset_sync/compare/v1.2.1...v1.3.0
data/README.md CHANGED
@@ -253,7 +253,7 @@ production:
253
253
 
254
254
  ### Available Configuration Options
255
255
 
256
- All AssetSync configuration can be modified directly using environment variables with the **Built-in initializer**. e.g.
256
+ Most AssetSync configuration can be modified directly using environment variables with the **Built-in initializer**. e.g.
257
257
 
258
258
  ```ruby
259
259
  AssetSync.config.fog_provider == ENV['FOG_PROVIDER']
@@ -274,6 +274,19 @@ AssetSync.config.gzip_compression == ENV['ASSET_SYNC_GZIP_COMPRESSION']
274
274
  * **ignored\_files**: an array of files to ignore e.g. `['ignore_me.js', %r(ignore_some/\d{32}\.css)]` Useful if there are some files that are created dynamically on the server and you don't want to upload on deploy **default**: `[]`
275
275
  * **cache\_asset\_regexps**: an array of files to add cache headers e.g. `['cache_me.js', %r(cache_some\.\d{8}\.css)]` Useful if there are some files that are added to sprockets assets list and need to be set as 'Cacheable' on uploaded server. Only rails compiled regexp is matched internally **default**: `[]`
276
276
 
277
+ ##### Config Method `add_local_file_paths`
278
+ Adding local files by providing a block:
279
+ ```ruby
280
+ AssetSync.configure do |config|
281
+ # The block should return an array of file paths
282
+ config.add_local_file_paths do
283
+ # Any code that returns paths of local asset files to be uploaded
284
+ # Like Webpacker
285
+ Dir[File.join(Webpacker::Configuration.fetch(:public_output_path), '/**/**')]
286
+ end
287
+ end
288
+ ```
289
+ The blocks are run when local files are being scanned and uploaded
277
290
 
278
291
  #### Fog (Required)
279
292
  * **fog\_provider**: your storage provider *AWS* (S3) or *Rackspace* (Cloud Files) or *Google* (Google Storage)
@@ -67,6 +67,8 @@ module AssetSync
67
67
  self.cdn_distribution_id = nil
68
68
  self.invalidate = []
69
69
  self.cache_asset_regexps = []
70
+ @additional_local_file_paths_procs = []
71
+
70
72
  load_yml! if defined?(::Rails) && yml_exists?
71
73
  end
72
74
 
@@ -220,8 +222,30 @@ module AssetSync
220
222
  return options
221
223
  end
222
224
 
225
+ # @api
226
+ def add_local_file_paths(&block)
227
+ @additional_local_file_paths_procs =
228
+ additional_local_file_paths_procs + [block]
229
+ end
230
+
231
+ # @api private
232
+ # This is to be called in Storage
233
+ # Not to be called by user
234
+ def additional_local_file_paths
235
+ return [] if additional_local_file_paths_procs.empty?
236
+
237
+ # Using `Array()` to ensure it works when single value is returned
238
+ additional_local_file_paths_procs.each_with_object([]) do |proc, paths|
239
+ paths.concat(Array(proc.call))
240
+ end
241
+ end
242
+
223
243
  private
224
244
 
245
+ # This is a proc to get additional local files paths
246
+ # Since this is a proc it won't be able to be configured by a YAML file
247
+ attr_reader :additional_local_file_paths_procs
248
+
225
249
  def default_manifest_directory
226
250
  File.join(::Rails.public_path, assets_prefix)
227
251
  end
@@ -42,7 +42,8 @@ module AssetSync
42
42
  end
43
43
 
44
44
  def local_files
45
- @local_files ||= get_local_files.uniq
45
+ @local_files ||=
46
+ (get_local_files + config.additional_local_file_paths).uniq
46
47
  end
47
48
 
48
49
  def always_upload_files
@@ -120,9 +121,11 @@ module AssetSync
120
121
  one_year = 31557600
121
122
  ext = File.extname(f)[1..-1]
122
123
  mime = MultiMime.lookup(ext)
124
+ gzip_file_handle = nil
125
+ file_handle = File.open("#{path}/#{f}")
123
126
  file = {
124
127
  :key => f,
125
- :body => File.open("#{path}/#{f}"),
128
+ :body => file_handle,
126
129
  :public => true,
127
130
  :content_type => mime
128
131
  }
@@ -167,9 +170,10 @@ module AssetSync
167
170
 
168
171
  if gzipped_size < original_size
169
172
  percentage = ((gzipped_size.to_f/original_size.to_f)*100).round(2)
173
+ gzip_file_handle = File.open(gzipped)
170
174
  file.merge!({
171
175
  :key => f,
172
- :body => File.open(gzipped),
176
+ :body => gzip_file_handle,
173
177
  :content_encoding => 'gzip'
174
178
  })
175
179
  log "Uploading: #{gzipped} in place of #{f} saving #{percentage}%"
@@ -198,7 +202,9 @@ module AssetSync
198
202
  })
199
203
  end
200
204
 
201
- file = bucket.files.create( file ) unless ignore
205
+ bucket.files.create( file ) unless ignore
206
+ file_handle.close
207
+ gzip_file_handle.close if gzip_file_handle
202
208
  end
203
209
 
204
210
  def upload_files
@@ -1,3 +1,3 @@
1
1
  module AssetSync
2
- VERSION = "2.1.0"
2
+ VERSION = "2.2.0".freeze
3
3
  end
@@ -3,6 +3,10 @@ require File.dirname(__FILE__) + '/../spec_helper'
3
3
  describe AssetSync::Storage do
4
4
  include_context "mock Rails without_yml"
5
5
 
6
+ let(:file_like_object) do
7
+ double("file like object").as_null_object
8
+ end
9
+
6
10
  describe '#upload_files' do
7
11
  before(:each) do
8
12
  @local_files = ["local_image2.jpg", "local_image1.jpg", "local_stylesheet1.css", "local_stylesheet2.css"]
@@ -13,7 +17,7 @@ describe AssetSync::Storage do
13
17
  it 'should overwrite all remote files if set to ignore' do
14
18
  @config.existing_remote_files = 'ignore'
15
19
  storage = AssetSync::Storage.new(@config)
16
- allow(storage).to receive(:local_files).and_return(@local_files)
20
+ allow(storage).to receive(:get_local_files).and_return(@local_files)
17
21
  allow(File).to receive(:file?).and_return(true) # Pretend they all exist
18
22
 
19
23
  @local_files.each do |file|
@@ -26,7 +30,7 @@ describe AssetSync::Storage do
26
30
  @config.always_upload = ['local_image.jpg', /local_image\d\.svg/]
27
31
 
28
32
  storage = AssetSync::Storage.new(@config)
29
- allow(storage).to receive(:local_files).and_return(@local_files)
33
+ allow(storage).to receive(:get_local_files).and_return(@local_files)
30
34
  allow(storage).to receive(:get_remote_files).and_return(@remote_files)
31
35
  allow(File).to receive(:file?).and_return(true) # Pretend they all exist
32
36
 
@@ -40,7 +44,7 @@ describe AssetSync::Storage do
40
44
  @config.ignored_files = ['local_image1.jpg', /local_stylesheet\d\.css/]
41
45
 
42
46
  storage = AssetSync::Storage.new(@config)
43
- allow(storage).to receive(:local_files).and_return(@local_files)
47
+ allow(storage).to receive(:get_local_files).and_return(@local_files)
44
48
  allow(storage).to receive(:get_remote_files).and_return(@remote_files)
45
49
  allow(File).to receive(:file?).and_return(true) # Pretend they all exist
46
50
 
@@ -68,7 +72,78 @@ describe AssetSync::Storage do
68
72
  ]
69
73
 
70
74
  storage = AssetSync::Storage.new(@config)
71
- allow(storage).to receive(:local_files).and_return(@local_files)
75
+ allow(storage).to receive(:get_local_files).and_return(@local_files)
76
+ allow(storage).to receive(:get_remote_files).and_return(@remote_files)
77
+ allow(File).to receive(:file?).and_return(true) # Pretend they all exist
78
+
79
+ updated_nonfingerprinted_files = [
80
+ 'public/image.png',
81
+ 'public/application.js',
82
+ ]
83
+ (@local_files - @remote_files + updated_nonfingerprinted_files).each do |file|
84
+ expect(storage).to receive(:upload_file).with(file)
85
+ end
86
+ storage.upload_files
87
+ end
88
+
89
+ context "when config #add_local_file_paths is called" do
90
+ let(:additional_local_file_paths) do
91
+ ["webpack/example_asset.jpg"]
92
+ end
93
+
94
+ before(:each) do
95
+ @config.add_local_file_paths do
96
+ additional_local_file_paths
97
+ end
98
+ end
99
+
100
+ let(:storage) do
101
+ AssetSync::Storage.new(@config)
102
+ end
103
+
104
+ let(:file_paths_should_be_uploaded) do
105
+ @local_files -
106
+ @remote_files -
107
+ storage.ignored_files +
108
+ storage.always_upload_files +
109
+ additional_local_file_paths
110
+ end
111
+
112
+ before do
113
+ # Stubbing
114
+ allow(storage).to receive(:get_local_files).and_return(@local_files)
115
+ allow(storage).to receive(:get_remote_files).and_return(@remote_files)
116
+ # Pretend the files all exist
117
+ allow(File).to receive(:file?).and_return(true)
118
+ end
119
+
120
+ it "uploads additional files in additional to local files" do
121
+ file_paths_should_be_uploaded.each do |file|
122
+ expect(storage).to receive(:upload_file).with(file)
123
+ end
124
+ storage.upload_files
125
+ end
126
+ end
127
+
128
+ it 'should upload additonal files' do
129
+ @local_files = [
130
+ 'public/image.png',
131
+ 'public/image-82389298328.png',
132
+ 'public/image-a8389f9h324.png',
133
+ 'public/application.js',
134
+ 'public/application-b3389d983k1.js',
135
+ 'public/application-ac387d53f31.js',
136
+ 'public',
137
+ ]
138
+ @remote_files = [
139
+ 'public/image.png',
140
+ 'public/image-a8389f9h324.png',
141
+ 'public/application.js',
142
+ 'public/application-b3389d983k1.js',
143
+ ]
144
+
145
+ storage = AssetSync::Storage.new(@config)
146
+ allow(storage).to receive(:get_local_files).and_return(@local_files)
72
147
  allow(storage).to receive(:get_remote_files).and_return(@remote_files)
73
148
  allow(File).to receive(:file?).and_return(true) # Pretend they all exist
74
149
 
@@ -110,10 +185,10 @@ describe AssetSync::Storage do
110
185
  remote_files = []
111
186
  @config.cache_asset_regexps = [/\.[a-f0-9]{6}$/i, /\.[a-f0-9]{8}$/i]
112
187
  storage = AssetSync::Storage.new(@config)
113
- allow(storage).to receive(:local_files).and_return(local_files)
188
+ allow(storage).to receive(:get_local_files).and_return(local_files)
114
189
  allow(storage).to receive(:get_remote_files).and_return(remote_files)
115
190
  allow(File).to receive(:file?).and_return(true)
116
- allow(File).to receive(:open).and_return(nil)
191
+ allow(File).to receive(:open).and_return(file_like_object)
117
192
 
118
193
  def check_file(file)
119
194
  case file[:key]
@@ -155,7 +230,7 @@ describe AssetSync::Storage do
155
230
  @config.fog_provider = 'AWS'
156
231
 
157
232
  storage = AssetSync::Storage.new(@config)
158
- allow(storage).to receive(:local_files).and_return(@local_files)
233
+ allow(storage).to receive(:get_local_files).and_return(@local_files)
159
234
  allow(storage).to receive(:get_remote_files).and_return(@remote_files)
160
235
  allow(storage).to receive(:upload_file).and_return(true)
161
236
 
@@ -193,9 +268,10 @@ describe AssetSync::Storage do
193
268
  }
194
269
  }
195
270
  storage = AssetSync::Storage.new(@config)
196
- allow(storage).to receive(:local_files).and_return(@local_files)
271
+ allow(storage).to receive(:get_local_files).and_return(@local_files)
197
272
  allow(storage).to receive(:get_remote_files).and_return(@remote_files)
198
- allow(File).to receive(:open).and_return('file') # Pretend they all exist
273
+ # Pretend they all exist
274
+ allow(File).to receive(:open).and_return(file_like_object)
199
275
 
200
276
  bucket = double
201
277
  files = double
@@ -216,9 +292,10 @@ describe AssetSync::Storage do
216
292
  }
217
293
  }
218
294
  storage = AssetSync::Storage.new(@config)
219
- allow(storage).to receive(:local_files).and_return(@local_files)
295
+ allow(storage).to receive(:get_local_files).and_return(@local_files)
220
296
  allow(storage).to receive(:get_remote_files).and_return(@remote_files)
221
- allow(File).to receive(:open).and_return('file') # Pretend they all exist
297
+ # Pretend they all exist
298
+ allow(File).to receive(:open).and_return(file_like_object)
222
299
  bucket = double
223
300
  files = double
224
301
  allow(storage).to receive(:bucket).and_return(bucket)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asset_sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Hamilton
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2017-05-19 00:00:00.000000000 Z
14
+ date: 2017-07-12 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: fog-core
@@ -164,6 +164,7 @@ executables: []
164
164
  extensions: []
165
165
  extra_rdoc_files: []
166
166
  files:
167
+ - ".editorconfig"
167
168
  - ".gitignore"
168
169
  - ".travis.yml"
169
170
  - Appraisals