webpacker-remote 0.1.0 → 0.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 +4 -4
- data/.github/workflows/branch.yml +1 -1
- data/.github/workflows/ci.yml +1 -1
- data/.gitignore +1 -0
- data/README.md +2 -1
- data/lib/webpacker/remote.rb +12 -4
- data/lib/webpacker/remote/helper.rb +30 -0
- data/lib/webpacker/remote/manifest.rb +12 -0
- data/webpacker-remote.gemspec +2 -3
- metadata +7 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 635f4710cb86e3d78d8ae1da64807ae12f0bf97e7e3b476fb87a58098c9370f5
|
4
|
+
data.tar.gz: 0aa52bce7bfcf825119c82aa1cc215274c929fe3572c8e4e54523555693504ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 823dab789035d9160449e109532bac324ee377ed8afd8caea5d4a72395d625cc1826902d2554ac5f7ee8930f3232d759f0276b79e7b703ba033bd62b439fb34e
|
7
|
+
data.tar.gz: 799fc8946cdc5a09b83ebe58ec6f7a244041b3e9607a0a33436feb1755fe0a3db7e3ae32ba0c00c2c6029023568e0b960f1ec5d6b75305e108691b321539afea
|
data/.github/workflows/ci.yml
CHANGED
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -13,13 +13,14 @@
|
|
13
13
|
- in `config/initializers/remote_webpacker.rb`
|
14
14
|
|
15
15
|
```rb
|
16
|
-
REMOTE_WEBPACKER = Webpacker::Remote.new(
|
16
|
+
REMOTE_WEBPACKER = Webpacker::Remote.new(root_path: 'https://asset_host/build/', config_path: 'manifest.json')
|
17
17
|
```
|
18
18
|
|
19
19
|
- in `app/views/layouts/application.html.erb` (**not** `javascript_pack_tag`)
|
20
20
|
|
21
21
|
```rb
|
22
22
|
<%= javascript_packs_with_chunks_tag 'main', webpacker: REMOTE_WEBPACKER %>
|
23
|
+
#=> <script src='https://asset_host/build/static/js/main.2e302672.chunk.js'>
|
23
24
|
```
|
24
25
|
|
25
26
|
Of course, you can use as many build as you like and do blue-green deployments using gems like `rollout`
|
data/lib/webpacker/remote.rb
CHANGED
@@ -8,6 +8,7 @@ require 'webpacker'
|
|
8
8
|
class Webpacker::Remote < Webpacker::Instance
|
9
9
|
require 'webpacker/remote/manifest'
|
10
10
|
require 'webpacker/remote/configuration'
|
11
|
+
require 'webpacker/remote/helper'
|
11
12
|
|
12
13
|
VERSION = '0.1.0'
|
13
14
|
|
@@ -16,13 +17,20 @@ class Webpacker::Remote < Webpacker::Instance
|
|
16
17
|
attr_reader :public_manifest_content
|
17
18
|
|
18
19
|
# fetch early, fail fast
|
19
|
-
|
20
|
-
|
20
|
+
# rubocop:disable Lint/MissingSuper
|
21
|
+
def initialize(root_path: nil, config_path: nil)
|
22
|
+
uri = File.join(root_path.to_s, config_path.to_s)
|
21
23
|
@public_manifest_content = JSON.parse(self.class.get_http_response(uri))
|
22
|
-
|
24
|
+
# deliberately not calling `super` just emulating what's done there
|
25
|
+
@config_path = config_path
|
26
|
+
@root_path = root_path
|
23
27
|
rescue StandardError => e
|
24
|
-
raise Error,
|
28
|
+
raise Error, <<~MSG
|
29
|
+
having {root_path: #{root_path.inspect}, config_path: #{config_path.inspect}}
|
30
|
+
#{e.class}: #{e.message}
|
31
|
+
MSG
|
25
32
|
end
|
33
|
+
# rubocop:enable Lint/MissingSuper
|
26
34
|
|
27
35
|
def manifest
|
28
36
|
@manifest ||= Webpacker::Remote::Manifest.new(self)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# better version of https://github.com/rails/webpacker/issues/2054#issuecomment-564173103
|
4
|
+
# rewrite all methods by accept direct injection instead of calling `current_webpacker_instance`
|
5
|
+
# because we can have same layout with script/link tags from different webpackers
|
6
|
+
module Webpacker::Remote::Helper
|
7
|
+
METHODS = %i[
|
8
|
+
javascript_pack_tag
|
9
|
+
javascript_packs_with_chunks_tag
|
10
|
+
stylesheet_pack_tag
|
11
|
+
stylesheet_packs_with_chunks_tag
|
12
|
+
].freeze
|
13
|
+
|
14
|
+
METHODS.each do |meth|
|
15
|
+
define_method meth do |*names, **options|
|
16
|
+
return super(*names, **options) unless options[:webpacker]
|
17
|
+
|
18
|
+
new_helper = dup
|
19
|
+
new_helper.define_singleton_method(:current_webpacker_instance) do
|
20
|
+
options[:webpacker]
|
21
|
+
end
|
22
|
+
new_helper.send(meth, *names, **options.except(:webpacker))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
unless ENV['SKIP_WEBPACKER_HELPER_OVERRIDE']
|
28
|
+
require 'webpacker/helper'
|
29
|
+
Webpacker::Helper.prepend Webpacker::Remote::Helper
|
30
|
+
end
|
@@ -6,4 +6,16 @@ class Webpacker::Remote::Manifest < Webpacker::Manifest
|
|
6
6
|
def load
|
7
7
|
@webpacker.public_manifest_content
|
8
8
|
end
|
9
|
+
|
10
|
+
def lookup_pack_with_chunks(name, pack_type = {})
|
11
|
+
return unless (paths = super)
|
12
|
+
|
13
|
+
paths.map { |p| File.join(config.root_path.to_s, p) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def lookup(name, pack_type = {})
|
17
|
+
return unless (path = super)
|
18
|
+
|
19
|
+
File.join(config.root_path.to_s, path)
|
20
|
+
end
|
9
21
|
end
|
data/webpacker-remote.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'webpacker-remote'
|
5
|
-
spec.version = '0.
|
5
|
+
spec.version = '0.2.0'
|
6
6
|
spec.authors = ['Vlad Bokov']
|
7
7
|
spec.email = ['vlad@lunatic.cat']
|
8
8
|
spec.license = 'MIT'
|
@@ -20,9 +20,8 @@ Gem::Specification.new do |spec|
|
|
20
20
|
end
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
|
-
spec.add_dependency('webpacker', ENV.fetch('WEBPACKER_GEM_VERSION', '
|
23
|
+
spec.add_dependency('webpacker', ENV.fetch('WEBPACKER_GEM_VERSION', '< 6'))
|
24
24
|
|
25
25
|
spec.add_development_dependency('rspec', '~> 3.0')
|
26
|
-
spec.add_development_dependency('rspec-expectations', '~> 3.0')
|
27
26
|
spec.add_development_dependency('simplecov', '~> 0.19')
|
28
27
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webpacker-remote
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vlad Bokov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-01-
|
11
|
+
date: 2021-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: webpacker
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "<"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '6'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "<"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rspec-expectations
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '3.0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '3.0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: simplecov
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,6 +69,7 @@ files:
|
|
83
69
|
- Rakefile
|
84
70
|
- lib/webpacker/remote.rb
|
85
71
|
- lib/webpacker/remote/configuration.rb
|
72
|
+
- lib/webpacker/remote/helper.rb
|
86
73
|
- lib/webpacker/remote/manifest.rb
|
87
74
|
- webpacker-remote.gemspec
|
88
75
|
homepage: https://github.com/lunatic-cat/webpacker-remote
|