manifester 0.1.2 → 0.1.7
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/README.md +5 -1
- data/lib/manifester.rb +6 -5
- data/lib/manifester/configuration.rb +16 -38
- data/lib/manifester/engine.rb +0 -10
- data/{app/helpers/manifester/application_helper.rb → lib/manifester/helper.rb} +26 -4
- data/lib/manifester/instance.rb +8 -10
- data/lib/manifester/version.rb +1 -1
- metadata +8 -18
- data/app/assets/config/manifester_manifest.js +0 -1
- data/app/assets/stylesheets/manifester/application.css +0 -15
- data/app/controllers/manifester/application_controller.rb +0 -4
- data/app/jobs/manifester/application_job.rb +0 -4
- data/app/mailers/manifester/application_mailer.rb +0 -6
- data/app/models/manifester/application_record.rb +0 -5
- data/app/views/layouts/manifester/application.html.erb +0 -15
- data/config/routes.rb +0 -2
- data/lib/manifester/env.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29824867c809881b67054ed4b5afe7da25f2522c8942c2a97ffabc3cb77e318e
|
4
|
+
data.tar.gz: 0f7e32d8feaf9d0808b4c280ca3ea8b480b2f43ef449e6294f1c2071498df8e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43ec8577fc3597f5ee45875c6d057c8c08da99f437a817fd8239f069925e47dbca35409420a6cf0905ea3928059ed662835ac3192413d937b8723a53516269f3
|
7
|
+
data.tar.gz: b582bb945ae72312d85ac10ecd117e07faf4061511818281d13d57718e2d1e904a1e89c8c17b976cb10104ccbc8682a56917a9be56d2a9fb8721974bcb65ad4a
|
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Manifester
|
2
|
-
|
2
|
+
Manifester was born from the need to ship webpacker generated assets without webpacker.
|
3
|
+
|
4
|
+
When we first shipped [Avo](https://github.com/avo-hq/avo) we shipped it with the whole Webpacker pipeline. That meant rebuilding the assets on every deploy of the parent app and other nasty unwanted behaviors (conflicting pipelines, etc.).
|
5
|
+
|
6
|
+
We just needed something that would take the packed files when we and
|
3
7
|
|
4
8
|
## Usage
|
5
9
|
How to use my plugin.
|
data/lib/manifester.rb
CHANGED
@@ -2,8 +2,14 @@ require "zeitwerk"
|
|
2
2
|
require "manifester/version"
|
3
3
|
|
4
4
|
loader = Zeitwerk::Loader.for_gem
|
5
|
+
loader.push_dir("#{__dir__}/manifester", namespace: Manifester)
|
5
6
|
loader.setup
|
6
7
|
|
8
|
+
require "manifester/helper"
|
9
|
+
require "manifester/instance"
|
10
|
+
require "manifester/configuration"
|
11
|
+
require "manifester/manifest"
|
12
|
+
|
7
13
|
module Manifester
|
8
14
|
extend self
|
9
15
|
|
@@ -16,9 +22,4 @@ module Manifester
|
|
16
22
|
end
|
17
23
|
end
|
18
24
|
|
19
|
-
require "manifester/instance"
|
20
|
-
require "manifester/env"
|
21
|
-
require "manifester/configuration"
|
22
|
-
require "manifester/manifest"
|
23
|
-
|
24
25
|
require "manifester/engine" if defined?(Rails)
|
@@ -1,22 +1,24 @@
|
|
1
|
-
require "yaml"
|
2
|
-
require "active_support/core_ext/hash/keys"
|
3
|
-
require "active_support/core_ext/hash/indifferent_access"
|
4
|
-
|
5
1
|
class Manifester::Configuration
|
6
|
-
attr_reader :root_path
|
2
|
+
attr_reader :root_path
|
3
|
+
attr_reader :public_root_dir
|
4
|
+
attr_reader :public_output_dir
|
5
|
+
attr_reader :cache_manifest
|
6
|
+
attr_reader :fallback_to_webpacker
|
7
7
|
|
8
|
-
def initialize(root_path:,
|
8
|
+
def initialize(root_path:, public_root_dir:, public_output_dir:, cache_manifest:, fallback_to_webpacker:)
|
9
9
|
@root_path = root_path
|
10
|
-
@
|
11
|
-
@
|
10
|
+
@public_root_dir = public_root_dir
|
11
|
+
@public_output_dir = public_output_dir
|
12
|
+
@cache_manifest = cache_manifest
|
13
|
+
@fallback_to_webpacker = fallback_to_webpacker
|
12
14
|
end
|
13
15
|
|
14
16
|
def public_path
|
15
|
-
root_path.join(
|
17
|
+
root_path.join(@public_root_dir)
|
16
18
|
end
|
17
19
|
|
18
20
|
def public_output_path
|
19
|
-
public_path.join(
|
21
|
+
public_path.join(@public_output_dir)
|
20
22
|
end
|
21
23
|
|
22
24
|
def public_manifest_path
|
@@ -24,34 +26,10 @@ class Manifester::Configuration
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def cache_manifest?
|
27
|
-
|
29
|
+
@cache_manifest
|
28
30
|
end
|
29
31
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
def data
|
36
|
-
@data ||= load
|
37
|
-
end
|
38
|
-
|
39
|
-
def load
|
40
|
-
YAML.load(config_path.read)[env].deep_symbolize_keys
|
41
|
-
|
42
|
-
rescue Errno::ENOENT => e
|
43
|
-
raise "Manifester configuration file not found #{config_path}. " \
|
44
|
-
"Please run rails manifester:install " \
|
45
|
-
"Error: #{e.message}"
|
46
|
-
|
47
|
-
rescue Psych::SyntaxError => e
|
48
|
-
raise "YAML syntax error occurred while parsing #{config_path}. " \
|
49
|
-
"Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
|
50
|
-
"Error: #{e.message}"
|
51
|
-
end
|
52
|
-
|
53
|
-
def defaults
|
54
|
-
@defaults ||= \
|
55
|
-
HashWithIndifferentAccess.new(YAML.load_file(File.expand_path("../../install/config/manifester.yml", __FILE__))[env])
|
56
|
-
end
|
32
|
+
def fallback_to_webpacker?
|
33
|
+
fallback_to_webpacker.call
|
34
|
+
end
|
57
35
|
end
|
data/lib/manifester/engine.rb
CHANGED
@@ -1,15 +1,5 @@
|
|
1
1
|
module Manifester
|
2
2
|
class Engine < ::Rails::Engine
|
3
3
|
isolate_namespace Manifester
|
4
|
-
|
5
|
-
initializer "manifester.helper" do
|
6
|
-
ActiveSupport.on_load :action_controller do
|
7
|
-
ActionController::Base.helper Manifester::ApplicationHelper
|
8
|
-
end
|
9
|
-
|
10
|
-
ActiveSupport.on_load :action_view do
|
11
|
-
include Manifester::ApplicationHelper
|
12
|
-
end
|
13
|
-
end
|
14
4
|
end
|
15
5
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Manifester
|
2
|
-
module
|
2
|
+
module Helper
|
3
3
|
def current_manifester_instance
|
4
4
|
Manifester.instance
|
5
5
|
end
|
@@ -12,6 +12,8 @@ module Manifester
|
|
12
12
|
#
|
13
13
|
# <%= asset_manifest_path 'calendar.css' %> # => "/packs/calendar-1016838bab065ae1e122.css"
|
14
14
|
def asset_manifest_path(name, **options)
|
15
|
+
return asset_pack_path(name, **options) if fallback_to_webpacker?
|
16
|
+
|
15
17
|
path_to_asset(current_manifester_instance.manifest.lookup!(name), options)
|
16
18
|
end
|
17
19
|
|
@@ -23,6 +25,8 @@ module Manifester
|
|
23
25
|
#
|
24
26
|
# <%= asset_manifest_url 'calendar.css' %> # => "http://example.com/packs/calendar-1016838bab065ae1e122.css"
|
25
27
|
def asset_manifest_url(name, **options)
|
28
|
+
return asset_pack_url(name, **options) if fallback_to_webpacker?
|
29
|
+
|
26
30
|
url_to_asset(current_manifester_instance.manifest.lookup!(name), options)
|
27
31
|
end
|
28
32
|
|
@@ -30,6 +34,8 @@ module Manifester
|
|
30
34
|
# Returns the relative path using manifest.json and passes it to path_to_asset helper.
|
31
35
|
# This will use path_to_asset internally, so most of their behaviors will be the same.
|
32
36
|
def image_manifest_path(name, **options)
|
37
|
+
return image_pack_path(name, **options) if fallback_to_webpacker?
|
38
|
+
|
33
39
|
resolve_path_to_image(name, **options)
|
34
40
|
end
|
35
41
|
|
@@ -38,6 +44,8 @@ module Manifester
|
|
38
44
|
# and passes it to path_to_asset helper. This will use path_to_asset internally,
|
39
45
|
# so most of their behaviors will be the same.
|
40
46
|
def image_manifest_url(name, **options)
|
47
|
+
return image_pack_url(name, **options) if fallback_to_webpacker?
|
48
|
+
|
41
49
|
resolve_path_to_image(name, **options.merge(protocol: :request))
|
42
50
|
end
|
43
51
|
|
@@ -51,6 +59,8 @@ module Manifester
|
|
51
59
|
# <%= image_manifest_tag 'picture.png', srcset: { 'picture-2x.png' => '2x' } %>
|
52
60
|
# <img srcset= "/packs/picture-2x-7cca48e6cae66ec07b8e.png 2x" src="/packs/picture-c38deda30895059837cf.png" >
|
53
61
|
def image_manifest_tag(name, **options)
|
62
|
+
return image_pack_tag(name, **options) if fallback_to_webpacker?
|
63
|
+
|
54
64
|
if options[:srcset] && !options[:srcset].is_a?(String)
|
55
65
|
options[:srcset] = options[:srcset].map do |src_name, size|
|
56
66
|
"#{resolve_path_to_image(src_name)} #{size}"
|
@@ -67,6 +77,8 @@ module Manifester
|
|
67
77
|
# <%= favicon_manifest_tag 'mb-icon.png', rel: 'apple-touch-icon', type: 'image/png' %>
|
68
78
|
# <link href="/packs/mb-icon-k344a6d59eef8632c9d1.png" rel="apple-touch-icon" type="image/png" />
|
69
79
|
def favicon_manifest_tag(name, **options)
|
80
|
+
return favicon_pack_tag(name, **options) if fallback_to_webpacker?
|
81
|
+
|
70
82
|
favicon_link_tag(resolve_path_to_image(name), options)
|
71
83
|
end
|
72
84
|
|
@@ -94,7 +106,9 @@ module Manifester
|
|
94
106
|
# <%= javascript_manifest_tag 'calendar' %>
|
95
107
|
# <%= javascript_manifest_tag 'map' %>
|
96
108
|
def javascript_manifest_tag(*names, **options)
|
97
|
-
|
109
|
+
return javascript_pack_tag(*names, **options) if fallback_to_webpacker?
|
110
|
+
|
111
|
+
javascript_include_tag(*manifester_sources_from_manifest_entrypoints(names, type: :javascript), **options)
|
98
112
|
end
|
99
113
|
|
100
114
|
# Creates a link tag, for preloading, that references a given Manifester asset.
|
@@ -106,6 +120,8 @@ module Manifester
|
|
106
120
|
# <%= preload_manifest_asset 'fonts/fa-regular-400.woff2' %> # =>
|
107
121
|
# <link rel="preload" href="/packs/fonts/fa-regular-400-944fb546bd7018b07190a32244f67dc9.woff2" as="font" type="font/woff2" crossorigin="anonymous">
|
108
122
|
def preload_manifest_asset(name, **options)
|
123
|
+
return preload_pack_asset(name, **options) if fallback_to_webpacker?
|
124
|
+
|
109
125
|
if self.class.method_defined?(:preload_link_tag)
|
110
126
|
preload_link_tag(current_manifester_instance.manifest.lookup!(name), options)
|
111
127
|
else
|
@@ -135,12 +151,14 @@ module Manifester
|
|
135
151
|
# <%= stylesheet_manifest_tag 'calendar' %>
|
136
152
|
# <%= stylesheet_manifest_tag 'map' %>
|
137
153
|
def stylesheet_manifest_tag(*names, **options)
|
138
|
-
|
154
|
+
return stylesheet_pack_tag(*names, **options) if fallback_to_webpacker?
|
155
|
+
|
156
|
+
stylesheet_link_tag(*manifester_sources_from_manifest_entrypoints(names, type: :stylesheet), **options)
|
139
157
|
end
|
140
158
|
|
141
159
|
private
|
142
160
|
|
143
|
-
def
|
161
|
+
def manifester_sources_from_manifest_entrypoints(names, type:)
|
144
162
|
names.map { |name| current_manifester_instance.manifest.lookup_manifest_with_chunks!(name.to_s, type: type) }.flatten.uniq
|
145
163
|
end
|
146
164
|
|
@@ -150,5 +168,9 @@ module Manifester
|
|
150
168
|
rescue
|
151
169
|
path_to_asset(current_manifester_instance.manifest.lookup!(name), options)
|
152
170
|
end
|
171
|
+
|
172
|
+
def fallback_to_webpacker?
|
173
|
+
current_manifester_instance.config.fallback_to_webpacker?
|
174
|
+
end
|
153
175
|
end
|
154
176
|
end
|
data/lib/manifester/instance.rb
CHANGED
@@ -1,21 +1,19 @@
|
|
1
1
|
class Manifester::Instance
|
2
2
|
cattr_accessor(:logger) { ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT)) }
|
3
3
|
|
4
|
-
attr_reader :root_path
|
4
|
+
attr_reader :root_path
|
5
5
|
|
6
|
-
def initialize(root_path: Rails.root,
|
7
|
-
@root_path, @
|
8
|
-
end
|
9
|
-
|
10
|
-
def env
|
11
|
-
@env ||= Manifester::Env.inquire self
|
6
|
+
def initialize(root_path: Rails.root, public_root_dir: "public", public_output_dir: "packs", cache_manifest: false, fallback_to_webpacker: -> {})
|
7
|
+
@root_path, @public_root_dir, @public_output_dir, @cache_manifest, @fallback_to_webpacker = root_path, public_root_dir, public_output_dir, cache_manifest, fallback_to_webpacker
|
12
8
|
end
|
13
9
|
|
14
10
|
def config
|
15
11
|
@config ||= Manifester::Configuration.new(
|
16
|
-
root_path: root_path,
|
17
|
-
|
18
|
-
|
12
|
+
root_path: @root_path,
|
13
|
+
public_root_dir: @public_root_dir,
|
14
|
+
public_output_dir: @public_output_dir,
|
15
|
+
cache_manifest: @cache_manifest,
|
16
|
+
fallback_to_webpacker: @fallback_to_webpacker
|
19
17
|
)
|
20
18
|
end
|
21
19
|
|
data/lib/manifester/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: manifester
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adrian Marin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-04-
|
11
|
+
date: 2021-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -38,8 +38,8 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
description: Manifester loads
|
42
|
-
file.
|
41
|
+
description: Manifester loads your webpacker generated javascript and stylesheets
|
42
|
+
assets from your manifest.json file.
|
43
43
|
email:
|
44
44
|
- adrian@adrianthedev.com
|
45
45
|
executables: []
|
@@ -49,29 +49,20 @@ files:
|
|
49
49
|
- MIT-LICENSE
|
50
50
|
- README.md
|
51
51
|
- Rakefile
|
52
|
-
- app/assets/config/manifester_manifest.js
|
53
|
-
- app/assets/stylesheets/manifester/application.css
|
54
|
-
- app/controllers/manifester/application_controller.rb
|
55
|
-
- app/helpers/manifester/application_helper.rb
|
56
|
-
- app/jobs/manifester/application_job.rb
|
57
|
-
- app/mailers/manifester/application_mailer.rb
|
58
|
-
- app/models/manifester/application_record.rb
|
59
|
-
- app/views/layouts/manifester/application.html.erb
|
60
|
-
- config/routes.rb
|
61
52
|
- lib/install/config/manifester.yml
|
62
53
|
- lib/manifester.rb
|
63
54
|
- lib/manifester/configuration.rb
|
64
55
|
- lib/manifester/engine.rb
|
65
|
-
- lib/manifester/
|
56
|
+
- lib/manifester/helper.rb
|
66
57
|
- lib/manifester/instance.rb
|
67
58
|
- lib/manifester/manifest.rb
|
68
59
|
- lib/manifester/version.rb
|
69
60
|
- lib/tasks/manifester_tasks.rake
|
70
|
-
homepage: https://
|
61
|
+
homepage: https://github.com/avo-hq/manifester
|
71
62
|
licenses:
|
72
63
|
- MIT
|
73
64
|
metadata:
|
74
|
-
homepage_uri: https://
|
65
|
+
homepage_uri: https://github.com/avo-hq/manifester
|
75
66
|
source_code_uri: https://github.com/avo-hq/manifester
|
76
67
|
changelog_uri: https://github.com/avo-hq/manifester
|
77
68
|
post_install_message:
|
@@ -92,6 +83,5 @@ requirements: []
|
|
92
83
|
rubygems_version: 3.0.3
|
93
84
|
signing_key:
|
94
85
|
specification_version: 4
|
95
|
-
summary: Manifester loads
|
96
|
-
file.
|
86
|
+
summary: Manifester loads your webpacker generated assets.
|
97
87
|
test_files: []
|
@@ -1 +0,0 @@
|
|
1
|
-
//= link_directory ../stylesheets/manifester .css
|
@@ -1,15 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
-
* listed below.
|
4
|
-
*
|
5
|
-
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
-
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
-
*
|
8
|
-
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
-
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
|
10
|
-
* files in this directory. Styles in this file should be added after the last require_* statement.
|
11
|
-
* It is generally better to create a new file per style scope.
|
12
|
-
*
|
13
|
-
*= require_tree .
|
14
|
-
*= require_self
|
15
|
-
*/
|
data/config/routes.rb
DELETED
data/lib/manifester/env.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
class Manifester::Env
|
2
|
-
DEFAULT = "production".freeze
|
3
|
-
|
4
|
-
delegate :config_path, :logger, to: :@manifester
|
5
|
-
|
6
|
-
def self.inquire(manifester)
|
7
|
-
new(manifester).inquire
|
8
|
-
end
|
9
|
-
|
10
|
-
def initialize(manifester)
|
11
|
-
@manifester = manifester
|
12
|
-
end
|
13
|
-
|
14
|
-
def inquire
|
15
|
-
fallback_env_warning if config_path.exist? && !current
|
16
|
-
current || DEFAULT.inquiry
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
def current
|
21
|
-
Rails.env.presence_in(available_environments)
|
22
|
-
end
|
23
|
-
|
24
|
-
def fallback_env_warning
|
25
|
-
logger.info "RAILS_ENV=#{Rails.env} environment is not defined in config/manifester.yml, falling back to #{DEFAULT} environment"
|
26
|
-
end
|
27
|
-
|
28
|
-
def available_environments
|
29
|
-
if config_path.exist?
|
30
|
-
YAML.load(config_path.read).keys
|
31
|
-
else
|
32
|
-
[].freeze
|
33
|
-
end
|
34
|
-
rescue Psych::SyntaxError => e
|
35
|
-
raise "YAML syntax error occurred while parsing #{config_path}. " \
|
36
|
-
"Please note that YAML must be consistently indented using spaces. Tabs are not allowed. " \
|
37
|
-
"Error: #{e.message}"
|
38
|
-
end
|
39
|
-
end
|