external_asset_pipeline 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/external_asset_pipeline/configuration.rb +36 -0
- data/lib/external_asset_pipeline/helper.rb +21 -0
- data/lib/external_asset_pipeline/manifest.rb +34 -0
- data/lib/external_asset_pipeline/origin.rb +62 -0
- data/lib/external_asset_pipeline/railtie.rb +27 -0
- data/lib/external_asset_pipeline/version.rb +5 -0
- data/lib/external_asset_pipeline.rb +12 -0
- metadata +78 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f0c608c4887f1a6584bec569e7ea1bd31c1baf0617a1a71e2a33d5340a9a233d
|
4
|
+
data.tar.gz: 8acdec2d61b41b47644b1c66dbc99705fd615adeb03428b7d852f905e33b8f6c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ca18e90fc4093746261daa6a02d778658d266f3ea2140f3096292f06753de7f7030548630ba38f011481a834c5849721082bacab4027ad66e490b237af4ed5da
|
7
|
+
data.tar.gz: 6e8f2be51af359e08821858e03c2004277ae5a1fcd00ba9c62ad6c7f4e0b368f74422e36e556a503e260868910a402791ab3da112f392ce39b707c7e393da95b
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ExternalAssetPipeline
|
4
|
+
class Configuration
|
5
|
+
attr_accessor :assets_prefix,
|
6
|
+
:cache_manifest,
|
7
|
+
:fall_back_to_sprockets,
|
8
|
+
:manifest_filename,
|
9
|
+
:public_path
|
10
|
+
|
11
|
+
alias cache_manifest? cache_manifest
|
12
|
+
alias fall_back_to_sprockets? fall_back_to_sprockets
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@assets_prefix = '/packs'
|
16
|
+
@cache_manifest = true
|
17
|
+
@fall_back_to_sprockets = false
|
18
|
+
@manifest_filename = 'manifest.json'
|
19
|
+
end
|
20
|
+
|
21
|
+
def configure
|
22
|
+
yield self
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
def manifest_path
|
27
|
+
@public_path.join(public_subdirectory, @manifest_filename)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def public_subdirectory
|
33
|
+
@assets_prefix[1..-1]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'external_asset_pipeline'
|
4
|
+
|
5
|
+
module ExternalAssetPipeline
|
6
|
+
module Helper
|
7
|
+
# Overrides the built-in
|
8
|
+
# `ActionView::Helpers::AssetUrlHelper#compute_asset_path` to use the
|
9
|
+
# external asset pipeline, in the same manner that sprockets-rails does:
|
10
|
+
# https://github.com/rails/sprockets-rails/blob/v3.2.1/lib/sprockets/rails/helper.rb#L74-L96
|
11
|
+
def compute_asset_path(source, _options = {})
|
12
|
+
value_in_asset_manifest = ExternalAssetPipeline.manifest.find(source)
|
13
|
+
|
14
|
+
return value_in_asset_manifest if value_in_asset_manifest
|
15
|
+
return super if ExternalAssetPipeline.manifest.fall_back_to_sprockets?
|
16
|
+
|
17
|
+
raise AssetNotFound,
|
18
|
+
"The asset #{source.inspect} is not present in the asset manifest"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module ExternalAssetPipeline
|
6
|
+
class Manifest
|
7
|
+
def initialize(config)
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def find(name)
|
12
|
+
value = data[name.to_s]
|
13
|
+
"#{@config.assets_prefix}/#{value}" if value
|
14
|
+
end
|
15
|
+
|
16
|
+
def fall_back_to_sprockets?
|
17
|
+
@config.fall_back_to_sprockets?
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def data
|
23
|
+
if @config.cache_manifest?
|
24
|
+
@data ||= load
|
25
|
+
else
|
26
|
+
load
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def load
|
31
|
+
JSON.parse(@config.manifest_path.read)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
# rubocop:disable all
|
6
|
+
module ExternalAssetPipeline
|
7
|
+
class Origin
|
8
|
+
def initialize(server:, fallback:)
|
9
|
+
@server = server
|
10
|
+
@fallback = fallback
|
11
|
+
end
|
12
|
+
|
13
|
+
# USE THIS VERSION IF IT WORKS!
|
14
|
+
# Run some tests in the demo app with different asset_host procs
|
15
|
+
# _Might_ need to define this proc inside a module that includes
|
16
|
+
# ActionView::Helpers::AssetUrlHelper in order for
|
17
|
+
# compute_asset_host to be available - not sure.
|
18
|
+
def call(source, request = nil)
|
19
|
+
if @server.running?
|
20
|
+
@server.origin
|
21
|
+
else
|
22
|
+
ComputeAssetHostProxy.new(request).call(source, host: @fallback)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class ComputeAssetHostProxy
|
27
|
+
include ActionView::Helpers::AssetUrlHelper
|
28
|
+
|
29
|
+
attr_reader :request
|
30
|
+
|
31
|
+
def initialize(request:)
|
32
|
+
@request = request
|
33
|
+
end
|
34
|
+
|
35
|
+
def call(source, host:)
|
36
|
+
compute_asset_host(source, host: host)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def ugly_call(source, request)
|
41
|
+
# Ugh, this is so ugly
|
42
|
+
# the logic in the elsif branch is copied from
|
43
|
+
# https://github.com/rails/rails/blob/b13a5cb83ea00d6a3d71320fd276ca21049c2544/actionview/lib/action_view/helpers/asset_url_helper.rb#L280-L284
|
44
|
+
if server.running?
|
45
|
+
server.origin
|
46
|
+
elsif fallback.respond_to?(:call)
|
47
|
+
arity =
|
48
|
+
if fallback.respond_to?(:arity)
|
49
|
+
host.arity
|
50
|
+
else
|
51
|
+
host.method(:call).arity
|
52
|
+
end
|
53
|
+
args = [source]
|
54
|
+
args << request if request && (arity > 1 || arity < 0)
|
55
|
+
fallback.call(*args)
|
56
|
+
else
|
57
|
+
fallback
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
# rubocop:enable all
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/railtie'
|
4
|
+
|
5
|
+
require 'external_asset_pipeline'
|
6
|
+
require 'external_asset_pipeline/configuration'
|
7
|
+
require 'external_asset_pipeline/helper'
|
8
|
+
require 'external_asset_pipeline/manifest'
|
9
|
+
|
10
|
+
module ExternalAssetPipeline
|
11
|
+
class Railtie < ::Rails::Railtie
|
12
|
+
config.before_configuration do
|
13
|
+
config.external_asset_pipeline = Configuration.new.configure do |c|
|
14
|
+
c.public_path = ::Rails.root.join('public')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
config.after_initialize do
|
19
|
+
ExternalAssetPipeline.manifest =
|
20
|
+
Manifest.new(config.external_asset_pipeline)
|
21
|
+
|
22
|
+
ActiveSupport.on_load(:action_view) do
|
23
|
+
include ExternalAssetPipeline::Helper
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: external_asset_pipeline
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Richard Macklin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-04-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: railties
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 5.0.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '7.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 5.0.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '7.0'
|
33
|
+
description: |
|
34
|
+
This gem provides a thin layer to connect an externally-managed asset
|
35
|
+
pipeline to ActionView's AssetUrlHelper and AssetTagHelper methods. This is
|
36
|
+
useful if you are comfortable leveraging other programs to produce an asset
|
37
|
+
manifest and you just want it to integrate with ActionView's helper methods
|
38
|
+
(e.g. `asset_path`, `javascript_include_tag`, etc.)
|
39
|
+
email:
|
40
|
+
- 1863540+rmacklin@users.noreply.github.com
|
41
|
+
executables: []
|
42
|
+
extensions: []
|
43
|
+
extra_rdoc_files: []
|
44
|
+
files:
|
45
|
+
- lib/external_asset_pipeline.rb
|
46
|
+
- lib/external_asset_pipeline/configuration.rb
|
47
|
+
- lib/external_asset_pipeline/helper.rb
|
48
|
+
- lib/external_asset_pipeline/manifest.rb
|
49
|
+
- lib/external_asset_pipeline/origin.rb
|
50
|
+
- lib/external_asset_pipeline/railtie.rb
|
51
|
+
- lib/external_asset_pipeline/version.rb
|
52
|
+
homepage: https://github.com/rails-front-end/external_asset_pipeline
|
53
|
+
licenses:
|
54
|
+
- MIT
|
55
|
+
metadata:
|
56
|
+
homepage_uri: https://github.com/rails-front-end/external_asset_pipeline
|
57
|
+
source_code_uri: https://github.com/rails-front-end/external_asset_pipeline/tree/v0.1.0
|
58
|
+
changelog_uri: https://github.com/rails-front-end/external_asset_pipeline/blob/v0.1.0/CHANGELOG.md
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
requirements: []
|
74
|
+
rubygems_version: 3.0.1
|
75
|
+
signing_key:
|
76
|
+
specification_version: 4
|
77
|
+
summary: Integrate an externally-managed asset pipeline with ActionView
|
78
|
+
test_files: []
|