asset_sync 2.1.0 → 2.2.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.
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