asset_sync 2.4.0 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0ca689aa3521a19cb98a52f5c4319cc1e69ef0091b5ba8a2076745ec536f4cc9
4
- data.tar.gz: 2fb823e7bd97003a447521bc1640dd1a0ee934e4692bfc6c0c4f8d8aa46545e2
3
+ metadata.gz: 8f0a301ff99d58cacb580c68586d0dd58ccea76c4368e605cfec7c97f1ec8207
4
+ data.tar.gz: 62b5f062c8eec2f700961aa3c1f3b375a5c700c20fd5b795d034a76dda0bc3bf
5
5
  SHA512:
6
- metadata.gz: a15f3c71c845ae310f8ea1ed20a38dcd652832d7952ace0db544c6269810701bb0217242696018a7eb0c5a4dd839e5cb018714c2a623106cd3662a1e4b95e02f
7
- data.tar.gz: 7b9b929264f61d277248956a29132c969f1c8402bc4f0e606f3e273a7a6b835ea166b45b8f75c9264fce1f224dcd7e8ab7ae99a6f3396be56c7444fd7e266bef
6
+ metadata.gz: ac1d44af84bbfca4a10dcc6d03346337f90a4944d364b5b4721b20c5e2acd8c21187de149510452f97897b0b36c0351f8647ccfc3fc8da533c275db7d82e6502
7
+ data.tar.gz: c99b77189e305fab78cb03a0493b85056f707858f5703c27a5a4045a8a174e388c749d50ce9127d23abeddd855b7eff1501b2313c8adf84dbfb815ce52f7ab33
data/Appraisals CHANGED
@@ -1,8 +1,4 @@
1
1
 
2
- appraise "rails_4_1" do
3
- gem "rails", "~> 4.1.0"
4
- end
5
-
6
2
  appraise "rails_4_2" do
7
3
  gem "rails", "~> 4.2.0"
8
4
  end
@@ -14,3 +10,7 @@ end
14
10
  appraise "rails_5_1" do
15
11
  gem "rails", "~> 5.1.0"
16
12
  end
13
+
14
+ appraise "rails_5_2" do
15
+ gem "rails", "~> 5.2.0"
16
+ end
@@ -18,6 +18,25 @@ This project adheres to [Semantic Versioning](http://semver.org/).
18
18
  - Nothing
19
19
 
20
20
 
21
+ ## [2.5.0] - 2018-10-25
22
+
23
+ ### Added
24
+
25
+ - Add ruby only option `file_ext_to_mime_type_overrides`
26
+ (https://github.com/AssetSync/asset_sync/pull/374)
27
+
28
+ ### Changed
29
+
30
+ - Start testing against rails 5.2, stop testing against rails 4.2
31
+
32
+ ### Fixed
33
+
34
+ - Only enhance rake task assets:precompile if it's defined
35
+ (https://github.com/AssetSync/asset_sync/commit/e1eb1a16b06fd39def1759428a2d94733915bbff)
36
+ - Avoid ruby warning due to "method redefined"
37
+ (https://github.com/AssetSync/asset_sync/pull/371)
38
+
39
+
21
40
  ## [2.4.0] - 2017-12-20
22
41
 
23
42
  ### Added
@@ -861,7 +880,8 @@ Changes:
861
880
  * Merge branch 'sinatra'
862
881
 
863
882
 
864
- [Unreleased]: https://github.com/AssetSync/asset_sync/compare/v2.4.0...HEAD
883
+ [Unreleased]: https://github.com/AssetSync/asset_sync/compare/v2.5.0...HEAD
884
+ [2.5.0]: https://github.com/AssetSync/asset_sync/compare/v2.4.0...v2.5.0
865
885
  [2.4.0]: https://github.com/AssetSync/asset_sync/compare/v2.3.0...v2.4.0
866
886
  [2.3.0]: https://github.com/AssetSync/asset_sync/compare/v2.2.0...v2.3.0
867
887
  [2.2.0]: https://github.com/AssetSync/asset_sync/compare/v2.1.0...v2.2.0
data/README.md CHANGED
@@ -344,6 +344,24 @@ end
344
344
  ```
345
345
  The blocks are run when local files are being scanned and uploaded
346
346
 
347
+ ##### Config Method `file_ext_to_mime_type_overrides`
348
+ It's reported that `mime-types` 3.x returns `application/ecmascript` instead of `application/javascript`
349
+ Such change of mime type might cause some CDN to disable asset compression
350
+ So this gem has defined a default override for file ext `js` to be mapped to `application/javascript` by default
351
+
352
+ To customize the overrides:
353
+ ```ruby
354
+ AssetSync.configure do |config|
355
+ # Clear the default overrides
356
+ config.file_ext_to_mime_type_overrides.clear
357
+
358
+ # Add/Edit overrides
359
+ # Will call `#to_s` for inputs
360
+ config.file_ext_to_mime_type_overrides.add(:js, :"application/x-javascript")
361
+ end
362
+ ```
363
+ The blocks are run when local files are being scanned and uploaded
364
+
347
365
  #### Fog (Required)
348
366
  * **fog\_provider**: your storage provider *AWS* (S3) or *Rackspace* (Cloud Files) or *Google* (Google Storage) or *AzureRM* (Azure Blob)
349
367
  * **fog\_directory**: your bucket name
@@ -523,6 +541,37 @@ namespace :assets do
523
541
  end
524
542
  ```
525
543
 
544
+ ## Webpacker (> 2.0) support
545
+
546
+ 1. Add webpacker files and disable `run_on_precompile`:
547
+ ```ruby
548
+ AssetSync.configure do |config|
549
+ # Disable automatic run on precompile in order to attach to webpacker rake task
550
+ config.run_on_precompile = false
551
+ # The block should return an array of file paths
552
+ config.add_local_file_paths do
553
+ # Support webpacker assets
554
+ public_root = Rails.root.join("public")
555
+ Dir.chdir(public_root) do
556
+ packs_dir = Webpacker.config.public_output_path.relative_path_from(public_root)
557
+ Dir[File.join(packs_dir, '/**/**')]
558
+ end
559
+ end
560
+ end
561
+ ```
562
+
563
+ 2. Add a `asset_sync.rake` in your `lib/tasks` directory that enhances the correct task, otherwise asset_sync runs before `webpacker:compile` does:
564
+ ```
565
+ if defined?(AssetSync)
566
+ Rake::Task['webpacker:compile'].enhance do
567
+ Rake::Task["assets:sync"].invoke
568
+ end
569
+ end
570
+ ```
571
+
572
+ ### Caveat
573
+ By adding local files outside the normal Rails `assets` directory, the uploading part works, however checking that the asset was previously uploaded is not working because asset_sync is only fetching the files in the `assets` directory on the remote bucket. This will mean additional time used to upload the same assets again on every precompilation.
574
+
526
575
  ## Running the specs
527
576
 
528
577
  Make sure you have a .env file with these details:-
@@ -24,7 +24,8 @@ Gem::Specification.new do |s|
24
24
 
25
25
  s.add_development_dependency "rspec"
26
26
  s.add_development_dependency "bundler"
27
- s.add_development_dependency "jeweler"
27
+
28
+ s.add_development_dependency('mime-types', ">= 3.0")
28
29
 
29
30
  s.add_development_dependency "fog-aws"
30
31
  s.add_development_dependency "fog-azure-rm"
@@ -5,6 +5,6 @@ source "https://rubygems.org"
5
5
  gem "rcov", platforms: :mri_18, group: [:development, :test]
6
6
  gem "simplecov", platforms: [:jruby, :mri_19, :ruby_19, :mri_20, :rbx], group: [:development, :test], require: false
7
7
  gem "jruby-openssl", platform: :jruby
8
- gem "rails", "~> 4.1.0"
8
+ gem "rails", "~> 5.2.0"
9
9
 
10
10
  gemspec path: "../"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "active_model"
2
4
  require "erb"
3
5
  require "yaml"
@@ -17,7 +19,6 @@ module AssetSync
17
19
  attr_accessor :always_upload
18
20
  attr_accessor :ignored_files
19
21
  attr_accessor :prefix
20
- attr_accessor :public_path
21
22
  attr_accessor :enabled
22
23
  attr_accessor :custom_headers
23
24
  attr_accessor :run_on_precompile
@@ -25,6 +26,7 @@ module AssetSync
25
26
  attr_accessor :cdn_distribution_id
26
27
  attr_accessor :cache_asset_regexps
27
28
  attr_accessor :include_manifest
29
+ attr_writer :public_path
28
30
 
29
31
  # FOG configuration
30
32
  attr_accessor :fog_provider # Currently Supported ['AWS', 'Rackspace']
@@ -268,6 +270,11 @@ module AssetSync
268
270
  end
269
271
  end
270
272
 
273
+ #@api
274
+ def file_ext_to_mime_type_overrides
275
+ @file_ext_to_mime_type_overrides ||= FileExtToMimeTypeOverrides.new
276
+ end
277
+
271
278
  private
272
279
 
273
280
  # This is a proc to get additional local files paths
@@ -277,5 +284,43 @@ module AssetSync
277
284
  def default_manifest_directory
278
285
  File.join(::Rails.public_path, assets_prefix)
279
286
  end
287
+
288
+
289
+ # @api private
290
+ class FileExtToMimeTypeOverrides
291
+ def initialize
292
+ # The default is to prevent new mime type `application/ecmascript` to be returned
293
+ # which disables compression on some CDNs
294
+ @overrides = {
295
+ "js" => "application/javascript",
296
+ }
297
+ end
298
+
299
+ # @api
300
+ def add(ext, mime_type)
301
+ # Symbol / Mime type object might be passed in
302
+ # But we want strings only
303
+ @overrides.store(
304
+ ext.to_s, mime_type.to_s,
305
+ )
306
+ end
307
+
308
+ # @api
309
+ def clear
310
+ @overrides = {}
311
+ end
312
+
313
+
314
+ # @api private
315
+ def key?(key)
316
+ @overrides.key?(key)
317
+ end
318
+
319
+ # @api private
320
+ def fetch(key)
321
+ @overrides.fetch(key)
322
+ end
323
+
324
+ end
280
325
  end
281
326
  end
@@ -4,6 +4,11 @@ module AssetSync
4
4
  class MultiMime
5
5
 
6
6
  def self.lookup(ext)
7
+ overrides =
8
+ ::AssetSync.config.file_ext_to_mime_type_overrides
9
+ if overrides.key?(ext)
10
+ return overrides.fetch(ext)
11
+ end
7
12
 
8
13
  if defined?(::MIME::Types)
9
14
  ::MIME::Types.type_for(ext).first
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AssetSync
4
- VERSION = "2.4.0".freeze
4
+ VERSION = "2.5.0".freeze
5
5
  end
@@ -19,7 +19,7 @@ if Rake::Task.task_defined?("assets:precompile:nondigest")
19
19
  # will get executed before yaml or Rails initializers.
20
20
  Rake::Task["assets:sync"].invoke if defined?(AssetSync) && AssetSync.config.run_on_precompile
21
21
  end
22
- else
22
+ elsif Rake::Task.task_defined?("assets:precompile")
23
23
  Rake::Task["assets:precompile"].enhance do
24
24
  # rails 3.1.1 will clear out Rails.application.config if the env vars
25
25
  # RAILS_GROUP and RAILS_ENV are not defined. We need to reload the
@@ -27,4 +27,6 @@ else
27
27
  # Rake::Task["assets:environment"].invoke if Rake::Task.task_defined?("assets:environment")
28
28
  Rake::Task["assets:sync"].invoke if defined?(AssetSync) && AssetSync.config.run_on_precompile
29
29
  end
30
+ else
31
+ # Nothing to be enhanced
30
32
  end
@@ -36,6 +36,8 @@ describe AssetSync::MultiMime do
36
36
  $".grep(/mime\//).each do |file_path|
37
37
  $".delete(file_path)
38
38
  end
39
+
40
+ AssetSync.config = AssetSync::Config.new
39
41
  end
40
42
 
41
43
  after(:all) do
@@ -69,4 +71,49 @@ describe AssetSync::MultiMime do
69
71
 
70
72
  end
71
73
 
74
+ describe "use of option file_ext_to_mime_type_overrides" do
75
+ before(:each) do
76
+ require 'mime/types'
77
+ end
78
+
79
+ context "with default value" do
80
+ it "should return default value set by gem" do
81
+ expect(
82
+ AssetSync::MultiMime.lookup("js").to_s,
83
+ ).to eq("application/javascript")
84
+ end
85
+ end
86
+ context "with empty value" do
87
+ before(:each) do
88
+ AssetSync.config = AssetSync::Config.new
89
+ AssetSync.configure do |config|
90
+ config.file_ext_to_mime_type_overrides.clear
91
+ end
92
+ end
93
+
94
+ it "should return value from mime-types gem" do
95
+ expect(
96
+ AssetSync::MultiMime.lookup("js").to_s,
97
+ ).to eq(::MIME::Types.type_for("js").first.to_s)
98
+ end
99
+ end
100
+ context "with custom value" do
101
+ before(:each) do
102
+ AssetSync.config = AssetSync::Config.new
103
+ AssetSync.configure do |config|
104
+ config.file_ext_to_mime_type_overrides.add(
105
+ :js,
106
+ :"application/x-javascript",
107
+ )
108
+ end
109
+ end
110
+
111
+ it "should return custom value" do
112
+ expect(
113
+ AssetSync::MultiMime.lookup("js").to_s,
114
+ ).to eq("application/x-javascript")
115
+ end
116
+ end
117
+ end
118
+
72
119
  end
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.4.0
4
+ version: 2.5.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-12-20 00:00:00.000000000 Z
14
+ date: 2018-10-25 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: fog-core
@@ -98,19 +98,19 @@ dependencies:
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
100
  - !ruby/object:Gem::Dependency
101
- name: jeweler
101
+ name: mime-types
102
102
  requirement: !ruby/object:Gem::Requirement
103
103
  requirements:
104
104
  - - ">="
105
105
  - !ruby/object:Gem::Version
106
- version: '0'
106
+ version: '3.0'
107
107
  type: :development
108
108
  prerelease: false
109
109
  version_requirements: !ruby/object:Gem::Requirement
110
110
  requirements:
111
111
  - - ">="
112
112
  - !ruby/object:Gem::Version
113
- version: '0'
113
+ version: '3.0'
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: fog-aws
116
116
  requirement: !ruby/object:Gem::Requirement
@@ -189,10 +189,10 @@ files:
189
189
  - UPGRADING.md
190
190
  - asset_sync.gemspec
191
191
  - docs/heroku.md
192
- - gemfiles/rails_4_1.gemfile
193
192
  - gemfiles/rails_4_2.gemfile
194
193
  - gemfiles/rails_5_0.gemfile
195
194
  - gemfiles/rails_5_1.gemfile
195
+ - gemfiles/rails_5_2.gemfile
196
196
  - lib/asset_sync.rb
197
197
  - lib/asset_sync/asset_sync.rb
198
198
  - lib/asset_sync/config.rb
@@ -242,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
242
242
  version: '0'
243
243
  requirements: []
244
244
  rubyforge_project: asset_sync
245
- rubygems_version: 2.7.3
245
+ rubygems_version: 2.7.7
246
246
  signing_key:
247
247
  specification_version: 4
248
248
  summary: Synchronises Assets in a Rails 3 application and Amazon S3/Cloudfront and