External pipeline manifest helpers (#2528)
* Update middleman-core gemspec deps (allow activesupport 7 usage) * update lock file * fix yaml loading * fix dump for yaml * update bundler for ruby 3.1 * Array, Hash allowed in safe_load + use CLOCK_MONOTONIC * Update test deps * back contracts 0.16.0 * update mini_racer * fix corrupted cache * lock contracts gem (patch version break middleman) * add x86_64-linux platform to lock * add x86_64-linux and x86_64-darwin-20 platforms to lock * revert fix corrupted cache * disable check 3.1 - nokogiri issue * Support ruby 3.0.0 (commented some contracts) * Fix rubocop * no success for 3.1 - mini_racer build error on CI * be more specific about padrino-helpers * trying to back 3.1 * try to disable platform fetch * disable js runtime * trying to fix https://github.com/simplecov-ruby/simplecov/issues/1003 * `Trying to back min_racer * No success with min_racer * remove comments, move in correct place openssl * Support manifest json for external pipeline * Support manifest json helpers for external pipeline * Add tests for external pipeline helpers * Add tests for external pipeline helpers, more cases * Add tests for external pipeline helpers, more cases
This commit is contained in:
parent
97ddbc52ea
commit
f9f92dd52b
|
@ -10,7 +10,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu, macos]
|
||||
ruby-version: ['3.0', 2.7]
|
||||
ruby-version: ['3.1', '3.0']
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Ruby
|
||||
|
|
10
Gemfile
10
Gemfile
|
@ -8,10 +8,10 @@ gem 'yard', '~> 0.9.27', require: false
|
|||
|
||||
# Test tools
|
||||
gem 'addressable', '~> 2.8', require: false
|
||||
gem 'aruba', '~> 1.0.4', require: false
|
||||
gem 'aruba', '~> 2', require: false
|
||||
gem 'byebug'
|
||||
gem 'capybara', '~> 3.36.0', require: false
|
||||
gem 'cucumber', '~> 5.3', require: false
|
||||
gem 'cucumber', '~> 7', require: false
|
||||
gem 'rspec', '~> 3.10', require: false
|
||||
|
||||
# Pry tools
|
||||
|
@ -25,17 +25,13 @@ gem 'haml', '>= 4.0.5', require: false
|
|||
gem 'kramdown', '~> 2.3', require: false
|
||||
gem 'liquid', '>= 3.0', require: false
|
||||
gem 'redcarpet', '>= 3.1', require: false
|
||||
gem 'sassc', '~> 2.4', require: false
|
||||
gem 'sassc', '~> 2', require: false
|
||||
gem 'sinatra', '>= 2.0.0.beta2', require: false
|
||||
gem 'slim', '>= 2.0', require: false
|
||||
|
||||
# Dns server to test preview server
|
||||
gem 'rubydns', '~> 2.0.2', require: false
|
||||
|
||||
# For less, note there is no compatible JS runtime for windows
|
||||
gem 'mini_racer', '~> 0.4.0', platforms: :ruby
|
||||
gem 'therubyrhino', '>= 2.0', platforms: :jruby
|
||||
|
||||
# Code Quality
|
||||
gem 'rubocop', '~> 1.24', require: false
|
||||
gem 'rubocop-performance', '~> 1.13', require: false
|
||||
|
|
192
Gemfile.lock
192
Gemfile.lock
|
@ -9,56 +9,56 @@ PATH
|
|||
specs:
|
||||
middleman-core (5.0.0.rc.2)
|
||||
activesupport (>= 5.0.0)
|
||||
addressable (~> 2.3)
|
||||
addressable (~> 2)
|
||||
bundler
|
||||
contracts (~> 0.16.0)
|
||||
contracts (~> 0.17)
|
||||
dotenv
|
||||
erubis
|
||||
execjs (~> 2.0)
|
||||
fastimage (~> 2.0)
|
||||
hamster (~> 3.0)
|
||||
hashie (~> 4.0)
|
||||
i18n (~> 0.9.0)
|
||||
listen (~> 3.0)
|
||||
memoist (~> 0.14)
|
||||
oj (~> 3.7)
|
||||
padrino-helpers (~> 0.14.4)
|
||||
execjs (~> 2)
|
||||
fastimage (~> 2)
|
||||
hamster (~> 3)
|
||||
hashie (~> 5)
|
||||
i18n (~> 1)
|
||||
listen (~> 3)
|
||||
memoist (~> 0)
|
||||
oj (~> 3)
|
||||
padrino-helpers (~> 0.15.0)
|
||||
parallel
|
||||
rack (>= 1.4.5, < 3)
|
||||
rgl (~> 0.5.3)
|
||||
sassc (~> 2.0)
|
||||
rgl (~> 0.5)
|
||||
sassc (~> 2)
|
||||
servolux
|
||||
tilt (~> 2.0.9)
|
||||
toml
|
||||
uglifier (~> 4.1)
|
||||
uglifier (~> 4)
|
||||
webrick
|
||||
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (6.0.3.4)
|
||||
activesupport (7.0.0)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 0.7, < 2)
|
||||
minitest (~> 5.1)
|
||||
tzinfo (~> 1.1)
|
||||
zeitwerk (~> 2.2, >= 2.2.2)
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
tzinfo (~> 2.0)
|
||||
addressable (2.8.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
aruba (1.0.4)
|
||||
aruba (2.0.0)
|
||||
bundler (>= 1.17, < 3.0)
|
||||
childprocess (>= 2.0, < 5.0)
|
||||
contracts (~> 0.16.0)
|
||||
cucumber (>= 2.4, < 6.0)
|
||||
contracts (>= 0.16.0, < 0.18.0)
|
||||
cucumber (>= 4.0, < 8.0)
|
||||
rspec-expectations (~> 3.4)
|
||||
thor (~> 1.0)
|
||||
ast (2.4.2)
|
||||
async (1.28.2)
|
||||
async (1.30.1)
|
||||
console (~> 1.10)
|
||||
nio4r (~> 2.3)
|
||||
timers (~> 4.1)
|
||||
async-dns (1.2.5)
|
||||
async-dns (1.3.0)
|
||||
async-io (~> 1.15)
|
||||
async-io (1.30.1)
|
||||
async (~> 1.14)
|
||||
async-io (1.32.2)
|
||||
async
|
||||
binding_of_caller (1.0.0)
|
||||
debug_inspector (>= 0.0.1)
|
||||
builder (3.2.4)
|
||||
|
@ -72,55 +72,55 @@ GEM
|
|||
rack-test (>= 0.6.3)
|
||||
regexp_parser (>= 1.5, < 3.0)
|
||||
xpath (~> 3.2)
|
||||
childprocess (4.0.0)
|
||||
childprocess (4.1.0)
|
||||
coderay (1.1.3)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.12.2)
|
||||
concurrent-ruby (1.1.8)
|
||||
console (1.10.1)
|
||||
concurrent-ruby (1.1.9)
|
||||
console (1.14.0)
|
||||
fiber-local
|
||||
contracts (0.16.0)
|
||||
cucumber (5.3.0)
|
||||
contracts (0.17)
|
||||
cucumber (7.1.0)
|
||||
builder (~> 3.2, >= 3.2.4)
|
||||
cucumber-core (~> 8.0, >= 8.0.1)
|
||||
cucumber-create-meta (~> 2.0, >= 2.0.2)
|
||||
cucumber-cucumber-expressions (~> 10.3, >= 10.3.0)
|
||||
cucumber-gherkin (~> 15.0, >= 15.0.2)
|
||||
cucumber-html-formatter (~> 9.0, >= 9.0.0)
|
||||
cucumber-messages (~> 13.1, >= 13.1.0)
|
||||
cucumber-wire (~> 4.0, >= 4.0.1)
|
||||
cucumber-core (~> 10.1, >= 10.1.0)
|
||||
cucumber-create-meta (~> 6.0, >= 6.0.1)
|
||||
cucumber-cucumber-expressions (~> 14.0, >= 14.0.0)
|
||||
cucumber-gherkin (~> 22.0, >= 22.0.0)
|
||||
cucumber-html-formatter (~> 17.0, >= 17.0.0)
|
||||
cucumber-messages (~> 17.1, >= 17.1.1)
|
||||
cucumber-wire (~> 6.2, >= 6.2.0)
|
||||
diff-lcs (~> 1.4, >= 1.4.4)
|
||||
mime-types (~> 3.3, >= 3.3.1)
|
||||
multi_test (~> 0.1, >= 0.1.2)
|
||||
sys-uname (~> 1.2, >= 1.2.1)
|
||||
cucumber-core (8.0.1)
|
||||
cucumber-gherkin (~> 15.0, >= 15.0.2)
|
||||
cucumber-messages (~> 13.0, >= 13.0.1)
|
||||
cucumber-tag-expressions (~> 2.0, >= 2.0.4)
|
||||
cucumber-create-meta (2.0.4)
|
||||
cucumber-messages (~> 13.1, >= 13.1.0)
|
||||
sys-uname (~> 1.2, >= 1.2.1)
|
||||
cucumber-cucumber-expressions (10.3.0)
|
||||
cucumber-gherkin (15.0.2)
|
||||
cucumber-messages (~> 13.0, >= 13.0.1)
|
||||
cucumber-html-formatter (9.0.0)
|
||||
cucumber-messages (~> 13.0, >= 13.0.1)
|
||||
cucumber-messages (13.2.1)
|
||||
protobuf-cucumber (~> 3.10, >= 3.10.8)
|
||||
cucumber-tag-expressions (2.0.4)
|
||||
cucumber-wire (4.0.1)
|
||||
cucumber-core (~> 8.0, >= 8.0.1)
|
||||
cucumber-cucumber-expressions (~> 10.3, >= 10.3.0)
|
||||
cucumber-messages (~> 13.0, >= 13.0.1)
|
||||
debug_inspector (1.0.0)
|
||||
diff-lcs (1.4.4)
|
||||
docile (1.3.5)
|
||||
sys-uname (~> 1.2, >= 1.2.2)
|
||||
cucumber-core (10.1.0)
|
||||
cucumber-gherkin (~> 22.0, >= 22.0.0)
|
||||
cucumber-messages (~> 17.1, >= 17.1.1)
|
||||
cucumber-tag-expressions (~> 4.0, >= 4.0.2)
|
||||
cucumber-create-meta (6.0.4)
|
||||
cucumber-messages (~> 17.1, >= 17.1.1)
|
||||
sys-uname (~> 1.2, >= 1.2.2)
|
||||
cucumber-cucumber-expressions (14.0.0)
|
||||
cucumber-gherkin (22.0.0)
|
||||
cucumber-messages (~> 17.1, >= 17.1.1)
|
||||
cucumber-html-formatter (17.0.0)
|
||||
cucumber-messages (~> 17.1, >= 17.1.0)
|
||||
cucumber-messages (17.1.1)
|
||||
cucumber-tag-expressions (4.1.0)
|
||||
cucumber-wire (6.2.0)
|
||||
cucumber-core (~> 10.1, >= 10.1.0)
|
||||
cucumber-cucumber-expressions (~> 14.0, >= 14.0.0)
|
||||
cucumber-messages (~> 17.1, >= 17.1.1)
|
||||
debug_inspector (1.1.0)
|
||||
diff-lcs (1.5.0)
|
||||
docile (1.4.0)
|
||||
dotenv (2.7.6)
|
||||
erubis (2.7.0)
|
||||
execjs (2.7.0)
|
||||
fastimage (2.2.3)
|
||||
ffi (1.14.2)
|
||||
execjs (2.8.1)
|
||||
fastimage (2.2.6)
|
||||
ffi (1.15.4)
|
||||
fiber-local (1.0.0)
|
||||
generator (0.0.1)
|
||||
haml (5.2.2)
|
||||
|
@ -128,49 +128,43 @@ GEM
|
|||
tilt
|
||||
hamster (3.0.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
hashie (4.1.0)
|
||||
i18n (0.9.5)
|
||||
hashie (5.0.0)
|
||||
i18n (1.8.11)
|
||||
concurrent-ruby (~> 1.0)
|
||||
interception (0.5)
|
||||
kramdown (2.3.1)
|
||||
rexml
|
||||
lazy_priority_queue (0.1.1)
|
||||
libv8-node (15.14.0.1)
|
||||
liquid (5.1.0)
|
||||
listen (3.4.1)
|
||||
listen (3.7.0)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
matrix (0.4.2)
|
||||
memoist (0.16.2)
|
||||
method_source (1.0.0)
|
||||
middleware (0.1.0)
|
||||
mime-types (3.4.1)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2021.1115)
|
||||
mini_mime (1.1.2)
|
||||
mini_portile2 (2.6.1)
|
||||
mini_racer (0.4.0)
|
||||
libv8-node (~> 15.14.0.0)
|
||||
minitest (5.14.3)
|
||||
minitest (5.15.0)
|
||||
multi_test (0.1.2)
|
||||
mustermann (1.1.1)
|
||||
ruby2_keywords (~> 0.0.1)
|
||||
nio4r (2.5.4)
|
||||
nio4r (2.5.8)
|
||||
nokogiri (1.12.5)
|
||||
mini_portile2 (~> 2.6.1)
|
||||
racc (~> 1.4)
|
||||
oj (3.11.2)
|
||||
padrino-helpers (0.14.4)
|
||||
i18n (~> 0.6, >= 0.6.7)
|
||||
padrino-support (= 0.14.4)
|
||||
oj (3.13.10)
|
||||
padrino-helpers (0.15.1)
|
||||
i18n (>= 0.6.7, < 2)
|
||||
padrino-support (= 0.15.1)
|
||||
tilt (>= 1.4.1, < 3)
|
||||
padrino-support (0.14.4)
|
||||
padrino-support (0.15.1)
|
||||
parallel (1.21.0)
|
||||
parser (3.1.0.0)
|
||||
ast (~> 2.4.1)
|
||||
parslet (1.8.2)
|
||||
protobuf-cucumber (3.10.8)
|
||||
activesupport (>= 3.2)
|
||||
middleware
|
||||
thor
|
||||
thread_safe
|
||||
parslet (2.0.0)
|
||||
pry (0.14.1)
|
||||
coderay (~> 1.1)
|
||||
method_source (~> 1.0)
|
||||
|
@ -189,7 +183,7 @@ GEM
|
|||
rack (>= 1.0, < 3)
|
||||
rainbow (3.0.0)
|
||||
rake (13.0.6)
|
||||
rb-fsevent (0.10.4)
|
||||
rb-fsevent (0.11.0)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
redcarpet (3.5.1)
|
||||
|
@ -207,7 +201,7 @@ GEM
|
|||
rspec-expectations (3.10.1)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.10.0)
|
||||
rspec-mocks (3.10.1)
|
||||
rspec-mocks (3.10.2)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.10.0)
|
||||
rspec-support (3.10.2)
|
||||
|
@ -226,7 +220,7 @@ GEM
|
|||
rubocop (>= 1.7.0, < 2.0)
|
||||
rubocop-ast (>= 0.4.0)
|
||||
ruby-progressbar (1.11.0)
|
||||
ruby2_keywords (0.0.2)
|
||||
ruby2_keywords (0.0.5)
|
||||
rubydns (2.0.2)
|
||||
async-dns (~> 1.0)
|
||||
sassc (2.4.0)
|
||||
|
@ -237,7 +231,7 @@ GEM
|
|||
simplecov-html (~> 0.11)
|
||||
simplecov_json_formatter (~> 0.1)
|
||||
simplecov-html (0.12.3)
|
||||
simplecov_json_formatter (0.1.2)
|
||||
simplecov_json_formatter (0.1.3)
|
||||
sinatra (2.1.0)
|
||||
mustermann (~> 1.0)
|
||||
rack (~> 2.2)
|
||||
|
@ -252,13 +246,12 @@ GEM
|
|||
ffi (~> 1.1)
|
||||
temple (0.8.2)
|
||||
thor (1.1.0)
|
||||
thread_safe (0.3.6)
|
||||
tilt (2.0.10)
|
||||
timers (4.3.2)
|
||||
toml (0.2.0)
|
||||
parslet (~> 1.8.0)
|
||||
tzinfo (1.2.9)
|
||||
thread_safe (~> 0.1)
|
||||
timers (4.3.3)
|
||||
toml (0.3.0)
|
||||
parslet (>= 1.8.0, < 3.0.0)
|
||||
tzinfo (2.0.4)
|
||||
concurrent-ruby (~> 1.0)
|
||||
uglifier (4.2.0)
|
||||
execjs (>= 0.3.0, < 3)
|
||||
unicode-display_width (2.1.0)
|
||||
|
@ -267,24 +260,22 @@ GEM
|
|||
nokogiri (~> 1.8)
|
||||
yard (0.9.27)
|
||||
webrick (~> 1.7.0)
|
||||
zeitwerk (2.4.2)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
addressable (~> 2.8)
|
||||
aruba (~> 1.0.4)
|
||||
aruba (~> 2)
|
||||
byebug
|
||||
capybara (~> 3.36.0)
|
||||
coffee-script (~> 2.2)
|
||||
cucumber (~> 5.3)
|
||||
cucumber (~> 7)
|
||||
haml (>= 4.0.5)
|
||||
kramdown (~> 2.3)
|
||||
liquid (>= 3.0)
|
||||
middleman-cli!
|
||||
middleman-core!
|
||||
mini_racer (~> 0.4.0)
|
||||
pry
|
||||
pry-rescue
|
||||
pry-stack_explorer
|
||||
|
@ -294,12 +285,11 @@ DEPENDENCIES
|
|||
rubocop (~> 1.24)
|
||||
rubocop-performance (~> 1.13)
|
||||
rubydns (~> 2.0.2)
|
||||
sassc (~> 2.4)
|
||||
sassc (~> 2)
|
||||
simplecov (~> 0.21)
|
||||
sinatra (>= 2.0.0.beta2)
|
||||
slim (>= 2.0)
|
||||
therubyrhino (>= 2.0)
|
||||
yard (~> 0.9.27)
|
||||
|
||||
BUNDLED WITH
|
||||
2.2.3
|
||||
2.3.4
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
SimpleCov.start do
|
||||
SimpleCov.configure do
|
||||
add_filter '/fixtures/'
|
||||
add_filter '/features/'
|
||||
add_filter '/spec/'
|
||||
add_filter '/step_definitions/'
|
||||
add_filter '/lib/vendored-middleman-deps/'
|
||||
end
|
||||
end
|
||||
|
|
|
@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|||
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(fixtures|features|spec)/}) }
|
||||
s.executable = 'middleman'
|
||||
s.require_path = 'lib'
|
||||
s.required_ruby_version = '>= 2.5.0'
|
||||
s.required_ruby_version = '>= 3.0.0'
|
||||
|
||||
# CLI
|
||||
s.add_dependency('thor', ['>= 0.17.0', '< 2.0'])
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
SimpleCov.start do
|
||||
SimpleCov.configure do
|
||||
add_filter '/fixtures/'
|
||||
add_filter '/features/'
|
||||
add_filter '/spec/'
|
||||
add_filter '/step_definitions/'
|
||||
add_filter '/lib/vendored-middleman-deps/'
|
||||
end
|
||||
end
|
||||
|
|
|
@ -25,7 +25,7 @@ Feature: Alternate between multiple asset hosts
|
|||
And a file named "config.rb" with:
|
||||
"""
|
||||
activate :asset_host, host: Proc.new { |asset|
|
||||
hash = Digest::MD5.digest(asset).bytes.map!(&:ord).reduce(&:+)
|
||||
hash = Digest::SHA256.digest(asset).bytes.map!(&:ord).reduce(&:+)
|
||||
"http://assets%d.example.com" % (hash % 4)
|
||||
}
|
||||
"""
|
||||
|
|
|
@ -52,6 +52,14 @@ Feature: Builder
|
|||
When I run `middleman b`
|
||||
Then was successfully built
|
||||
|
||||
Scenario: Build external_pipeline with helpers
|
||||
Given a successfully built app at "external-pipeline-helpers"
|
||||
When I cd to "build"
|
||||
And the file "index.html" should contain '<link href="/app-553d121b3246dc3ea415.css" rel="stylesheet" media="all" />'
|
||||
And the file "index.html" should contain '<script src="/app-6427c0e37380b2306421.js" async="async"></script>'
|
||||
And the file "another-file.html" should contain '<link href="/app-553d121b3246dc3ea415.css" rel="stylesheet" />'
|
||||
And the file "another-file.html" should contain '<script src="/app-6427c0e37380b2306421.js"></script>'
|
||||
|
||||
Scenario: Builded text file(ex: html, css, xml, txt)'s permission is 0644
|
||||
Given a successfully built app at "large-build-app"
|
||||
When I cd to "build"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
data.store :static_array, ::YAML.load_file(File.expand_path('static_array.yml', File.dirname(__FILE__)))
|
||||
data.store :static_hash, ::YAML.load_file(File.expand_path('static_hash.yml', File.dirname(__FILE__)))
|
||||
data.store :static_array, ::YAML.safe_load(File.read(File.expand_path('static_array.yml', File.dirname(__FILE__))), permitted_classes: [Date, Time, DateTime, Symbol, Regexp], aliases: true)
|
||||
data.store :static_hash, ::YAML.safe_load(File.read(File.expand_path('static_hash.yml', File.dirname(__FILE__))), permitted_classes: [Date, Time, DateTime, Symbol, Regexp], aliases: true)
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
body {
|
||||
font-family: 'Courier New', Courier, monospace;
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
console.log('Hello')
|
|
@ -0,0 +1,15 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
activate :external_pipeline,
|
||||
name: :assets,
|
||||
command: 'echo "Done"',
|
||||
source: Dir.mktmpdir,
|
||||
latency: 2,
|
||||
manifest_json: File.expand_path('manifest.json', __dir__)
|
||||
|
||||
activate :external_pipeline,
|
||||
name: :different_pipeline,
|
||||
command: 'echo "Done"',
|
||||
source: Dir.mktmpdir,
|
||||
latency: 2,
|
||||
manifest_json: File.expand_path('different_manifest.json', __dir__)
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"app.js": {
|
||||
"file": "/app-6427c0e37380b2306421.js",
|
||||
"css": [
|
||||
"/app-553d121b3246dc3ea415.css"
|
||||
]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"app.css": {
|
||||
"src": "/app-553d121b3246dc3ea415.css",
|
||||
"integrity": "sha256-owU0/VSxjr/sZKK0WZQJzevzgcUEzXvPcBZFiUGzJFg="
|
||||
},
|
||||
"app.js": {
|
||||
"src": "/app-6427c0e37380b2306421.js",
|
||||
"integrity": "sha256-0PLWRauwxSW9A9b9VOa9TPyDj3gRGfxyKRhTVBKN0EM="
|
||||
}
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
<%= external_pipeline_stylesheet_tag :different_pipeline, ['app.js', 'css', 0] %>
|
||||
<%= external_pipeline_javascript_tag :different_pipeline, ['app.js', 'file'] %>
|
|
@ -0,0 +1,2 @@
|
|||
<%= external_pipeline_stylesheet_tag :assets, ['app.css', 'src'], media: 'all' %>
|
||||
<%= external_pipeline_javascript_tag :assets, ['app.js', 'src'], async: 'async' %>
|
|
@ -54,8 +54,8 @@ module Middleman
|
|||
end
|
||||
|
||||
# Needed so that method_missing makes sense
|
||||
def respond_to?(method, include_private = false)
|
||||
super || defines_setting?(method) || (method =~ /^(\w+)=$/ && defines_setting?(Regexp.last_match(1)))
|
||||
def respond_to_missing?(method, include_private = false)
|
||||
defines_setting?(method) || (method =~ /^(\w+)=$/ && defines_setting?(Regexp.last_match(1))) || super
|
||||
end
|
||||
|
||||
# Does this configuration manager know about the setting identified by key?
|
||||
|
|
|
@ -52,22 +52,18 @@ module Middleman
|
|||
@leaves.clear
|
||||
end
|
||||
|
||||
Contract Symbol, LazyCollectorStep => Any
|
||||
def register_collector(label, endpoint)
|
||||
@collectors_by_name[label] = endpoint
|
||||
end
|
||||
|
||||
Contract LazyCollectorRoot
|
||||
def sitemap_collector
|
||||
live_collector { |_, resources| resources.to_a }
|
||||
end
|
||||
|
||||
Contract LazyCollectorRoot
|
||||
def data_collector
|
||||
live_collector { |app, _| app.data }
|
||||
end
|
||||
|
||||
Contract Proc => LazyCollectorRoot
|
||||
def live_collector(&block)
|
||||
root = LazyCollectorRoot.new(self)
|
||||
|
||||
|
|
|
@ -6,6 +6,8 @@ module Middleman
|
|||
module CoreExtensions
|
||||
module Collections
|
||||
class LazyCollectorRoot < BasicObject
|
||||
DELEGATE = %i[hash eql? is_a? puts p].freeze
|
||||
|
||||
def initialize(parent)
|
||||
@data = nil
|
||||
@parent = parent
|
||||
|
@ -24,8 +26,14 @@ module Middleman
|
|||
end
|
||||
|
||||
def method_missing(name, *args, &block)
|
||||
return ::Kernel.send(name, *args, &block) if DELEGATE.include? name
|
||||
|
||||
LazyCollectorStep.new(name, args, block, self)
|
||||
end
|
||||
|
||||
def respond_to_missing?(_method_name, _include_private = false)
|
||||
true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -4,7 +4,7 @@ module Middleman
|
|||
module CoreExtensions
|
||||
module Collections
|
||||
class LazyCollectorStep < BasicObject
|
||||
DELEGATE = %i[hash eql?].freeze
|
||||
DELEGATE = %i[hash eql? is_a? puts p].freeze
|
||||
|
||||
def initialize(name, args, block, parent = nil)
|
||||
@name = name
|
||||
|
@ -46,6 +46,10 @@ module Middleman
|
|||
|
||||
LazyCollectorStep.new(name, args, block, self)
|
||||
end
|
||||
|
||||
def respond_to_missing?(_method_name, _include_private = false)
|
||||
true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -30,6 +30,12 @@ module Middleman
|
|||
@app.config_context.send(name, *args, &block)
|
||||
end
|
||||
end
|
||||
|
||||
def respond_to_missing?(method_name, include_private = false)
|
||||
return super if method_name.to_s.start_with?('_internal_')
|
||||
|
||||
respond_to?(:"_internal_#{method_name}") || super
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -94,8 +94,8 @@ module Middleman
|
|||
end
|
||||
|
||||
# Needed so that method_missing makes sense
|
||||
def respond_to?(method, include_private = false)
|
||||
super || key?(method)
|
||||
def respond_to_missing?(method, include_private = false)
|
||||
key?(method) || super
|
||||
end
|
||||
|
||||
# Convert all the data into a static hash
|
||||
|
|
|
@ -65,8 +65,8 @@ module Middleman
|
|||
end
|
||||
|
||||
# Needed so that method_missing makes sense
|
||||
def respond_to?(method, include_private = false)
|
||||
super || @ctx.internal_data_store.key?(method)
|
||||
def respond_to_missing?(method, include_private = false)
|
||||
@ctx.internal_data_store.key?(method) || super
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
require 'hamster'
|
||||
require 'set'
|
||||
require 'pathname'
|
||||
require 'date'
|
||||
require 'yaml'
|
||||
require 'fileutils'
|
||||
require 'middleman-core/contracts'
|
||||
|
@ -55,7 +56,7 @@ module Middleman
|
|||
|
||||
Contract String => Graph
|
||||
def parse_yaml(file_path)
|
||||
::YAML.load_file(file_path)
|
||||
::YAML.safe_load(File.read(file_path), permitted_classes: [Date, Time, DateTime, Symbol, Regexp], aliases: true)
|
||||
rescue StandardError, ::Psych::SyntaxError => e
|
||||
warn "YAML Exception parsing dependency graph: #{e.message}"
|
||||
end
|
||||
|
|
|
@ -9,6 +9,46 @@ class Middleman::Extensions::ExternalPipeline < ::Middleman::Extension
|
|||
option :latency, 0.25, 'Latency between refreshes of source'
|
||||
option :disable_background_execution, false, "Don't run the command in a separate background thread"
|
||||
option :ignore_exit_code, false, 'Ignore exit code for restart or stop of a command'
|
||||
option :manifest_json, nil, 'JSON file, which contain information about external assets paths'
|
||||
|
||||
helpers do
|
||||
def external_pipeline_manifest_value(pipeline_name, path = [])
|
||||
return @cached_manifest[pipeline_name].dig(*path) if build? && @cached_manifest&.key?(pipeline_name)
|
||||
|
||||
selected_extension = extensions[:external_pipeline].find { |_k, ep| ep.options[:name] == pipeline_name }&.last
|
||||
if selected_extension.nil?
|
||||
raise [
|
||||
"Couldn't find external pipeline with name #{pipeline_name}.",
|
||||
"Have only #{extensions[:external_pipeline].values.map { |ep| ep.options[:name] }.inspect}"
|
||||
].join(' ')
|
||||
end
|
||||
|
||||
manifest_json = selected_extension.options[:manifest_json]
|
||||
raise "Couldn't find manifest_json file at path #{manifest_json}" if manifest_json.nil? || !File.exist?(manifest_json)
|
||||
|
||||
manifest_content = if build?
|
||||
@cached_manifest ||= {}
|
||||
@cached_manifest[pipeline_name] ||= JSON.parse(File.read(manifest_json))
|
||||
@cached_manifest[pipeline_name]
|
||||
else
|
||||
JSON.parse(File.read(manifest_json)) # no caching for dev
|
||||
end
|
||||
manifest_content.dig(*path)
|
||||
end
|
||||
|
||||
def external_pipeline_javascript_tag(pipeline_name, path = [], options = {})
|
||||
content_tag(:script, nil, {
|
||||
src: external_pipeline_manifest_value(pipeline_name, path)
|
||||
}.update(options))
|
||||
end
|
||||
|
||||
def external_pipeline_stylesheet_tag(pipeline_name, path = [], options = {})
|
||||
tag(:link, {
|
||||
href: external_pipeline_manifest_value(pipeline_name, path),
|
||||
rel: 'stylesheet'
|
||||
}.update(options))
|
||||
end
|
||||
end
|
||||
|
||||
def initialize(app, options_hash = ::Middleman::EMPTY_HASH, &block)
|
||||
super
|
||||
|
|
|
@ -25,30 +25,30 @@
|
|||
</p>
|
||||
<h2 id="core">Core Configuration</h2>
|
||||
<ul class="settings">
|
||||
<% global_config.each do |setting| %>
|
||||
<li class="setting"><%= setting.render %></li>
|
||||
<% end %>
|
||||
<%- global_config.each do |setting| -%>
|
||||
<li class="setting"><%= setting.render %></li>
|
||||
<%- end -%>
|
||||
</ul>
|
||||
<h2 id="extensions">Extensions</h2>
|
||||
<ul class="extensions">
|
||||
<% [extension_config, auto_activated_config].each do |extensions| %>
|
||||
<% extensions.each do |ext_name, configs| %>
|
||||
<li>
|
||||
<% registered_extensions.delete(ext_name) %>
|
||||
<span class="extension active">:<%= ext_name %></span>
|
||||
<% if configs && !configs.empty? %>
|
||||
<ul class="settings">
|
||||
<% configs.each do |setting| %>
|
||||
<li class="setting"><%= setting.render %></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
</li>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% registered_extensions.keys.each do |ext_name| %>
|
||||
<li><span class="extension inactive"><%= ext_name.inspect %></span></li>
|
||||
<% end %>
|
||||
<%- [extension_config, auto_activated_config].each do |extensions| -%>
|
||||
<%- extensions.each do |ext_name, configs| -%>
|
||||
<li>
|
||||
<%- registered_extensions.delete(ext_name) -%>
|
||||
<span class="extension active">:<%= ext_name %></span>
|
||||
<%- if configs && !configs.empty? -%>
|
||||
<ul class="settings">
|
||||
<%- configs.each do |setting| -%>
|
||||
<li class="setting"><%= setting.render %></li>
|
||||
<%- end -%>
|
||||
</ul>
|
||||
<%- end -%>
|
||||
</li>
|
||||
<%- end -%>
|
||||
<%- end -%>
|
||||
<%- registered_extensions.keys.each do |ext_name| -%>
|
||||
<li><span class="extension inactive"><%= ext_name.inspect %></span></li>
|
||||
<%- end -%>
|
||||
</ul>
|
||||
</article>
|
||||
</div>
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<a href="https://middlemanapp.com/advanced/sitemap/">the sitemap</a>,
|
||||
Middleman's view of your site.
|
||||
</p>
|
||||
<%= sitemap_tree.render %>
|
||||
<%= sitemap_tree.render %>
|
||||
</article>
|
||||
</div>
|
||||
</body>
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'openssl'
|
||||
require 'middleman-core/meta_pages'
|
||||
require 'middleman-core/logger'
|
||||
require 'middleman-core/rack'
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'openssl'
|
||||
require 'webrick'
|
||||
require 'webrick/https'
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ module Middleman
|
|||
# @param [Rack::Request] req
|
||||
# @param [Rack::Response] res
|
||||
def process_request(env, req, res)
|
||||
start_time = Time.now
|
||||
start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
||||
|
||||
request_path = Addressable::URI.unencode(env['PATH_INFO'].dup)
|
||||
if request_path.respond_to? :force_encoding
|
||||
|
@ -120,7 +120,7 @@ module Middleman
|
|||
end
|
||||
|
||||
# End the request
|
||||
logger.debug "== Finishing Request: #{resource.destination_path} (#{(Time.now - start_time).round(2)}s)"
|
||||
logger.debug "== Finishing Request: #{resource.destination_path} (#{(Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time).round(2)}s)"
|
||||
halt res.finish
|
||||
end
|
||||
|
||||
|
|
|
@ -204,7 +204,7 @@ module Middleman
|
|||
|
||||
# Render this resource
|
||||
# @return [String]
|
||||
Contract Hash, Hash, Maybe[Proc] => String
|
||||
Contract Maybe[Hash], Maybe[Hash], Maybe[Proc] => String
|
||||
def render(options_hash = ::Middleman::EMPTY_HASH, locs = ::Middleman::EMPTY_HASH, &_block)
|
||||
@vertices = ::Hamster::Set.empty
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'date'
|
||||
require 'yaml'
|
||||
require 'json'
|
||||
require 'toml'
|
||||
|
@ -126,7 +127,7 @@ module Middleman
|
|||
def parse_yaml(content, full_path)
|
||||
c = begin
|
||||
::Middleman::Util.instrument 'parse.yaml' do
|
||||
::YAML.load(content)
|
||||
::YAML.safe_load(content, permitted_classes: [Date, Time, DateTime, Symbol, Regexp], aliases: true)
|
||||
end
|
||||
rescue StandardError, ::Psych::SyntaxError => e
|
||||
warn "YAML Exception parsing #{full_path}: #{e.message}"
|
||||
|
|
|
@ -15,7 +15,7 @@ Gem::Specification.new do |s|
|
|||
|
||||
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(fixtures|features|spec)/}) }
|
||||
s.require_path = 'lib'
|
||||
s.required_ruby_version = '>= 2.5.0'
|
||||
s.required_ruby_version = '>= 3.0.0'
|
||||
|
||||
# Core
|
||||
s.add_dependency('bundler')
|
||||
|
@ -25,39 +25,39 @@ Gem::Specification.new do |s|
|
|||
s.add_dependency('parallel')
|
||||
s.add_dependency('servolux')
|
||||
s.add_dependency('dotenv')
|
||||
s.add_dependency('rgl', ['~> 0.5.3'])
|
||||
s.add_dependency('rgl', ['~> 0.5'])
|
||||
s.add_dependency('toml')
|
||||
s.add_dependency('webrick')
|
||||
|
||||
# Helpers
|
||||
s.add_dependency('activesupport', ['>= 5.0.0'])
|
||||
s.add_dependency('padrino-helpers', ['~> 0.14.4'])
|
||||
s.add_dependency('addressable', ['~> 2.3'])
|
||||
s.add_dependency('memoist', ['~> 0.14'])
|
||||
s.add_dependency('padrino-helpers', ['~> 0.15.0'])
|
||||
s.add_dependency('addressable', ['~> 2'])
|
||||
s.add_dependency('memoist', ['~> 0'])
|
||||
|
||||
# Watcher
|
||||
s.add_dependency('listen', ['~> 3.0'])
|
||||
s.add_dependency('listen', ['~> 3'])
|
||||
|
||||
# i18n
|
||||
s.add_dependency('i18n', ['~> 0.9.0'])
|
||||
s.add_dependency('i18n', ['~> 1'])
|
||||
|
||||
# Automatic Image Sizes
|
||||
s.add_dependency('fastimage', ['~> 2.0'])
|
||||
s.add_dependency('fastimage', ['~> 2'])
|
||||
|
||||
# Sass and Minify CSS
|
||||
s.add_dependency('sassc', ['~> 2.0'])
|
||||
s.add_dependency('sassc', ['~> 2'])
|
||||
|
||||
# Minify JS
|
||||
s.add_dependency('uglifier', ['~> 4.1'])
|
||||
s.add_dependency('execjs', ['~> 2.0'])
|
||||
s.add_dependency('uglifier', ['~> 4'])
|
||||
s.add_dependency('execjs', ['~> 2'])
|
||||
|
||||
# Perf
|
||||
s.add_dependency('oj', ['~> 3.7'])
|
||||
s.add_dependency('oj', ['~> 3'])
|
||||
|
||||
# Testing
|
||||
s.add_dependency('contracts', ['~> 0.16.0'])
|
||||
s.add_dependency('contracts', ['~> 0.17'])
|
||||
|
||||
# Hash stuff
|
||||
s.add_dependency('hashie', ['~> 4.0'])
|
||||
s.add_dependency('hamster', ['~> 3.0'])
|
||||
s.add_dependency('hashie', ['~> 5'])
|
||||
s.add_dependency('hamster', ['~> 3'])
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
SimpleCov.start do
|
||||
SimpleCov.configure do
|
||||
add_filter '/fixtures/'
|
||||
add_filter '/features/'
|
||||
add_filter '/spec/'
|
||||
end
|
||||
end
|
||||
|
|
|
@ -16,12 +16,12 @@ Gem::Specification.new do |s|
|
|||
s.files = `git ls-files -z`.split("\0")
|
||||
s.test_files = `git ls-files -z -- {fixtures,features}/*`.split("\0")
|
||||
s.require_path = 'lib'
|
||||
s.required_ruby_version = '>= 2.5.0'
|
||||
s.required_ruby_version = '>= 3.0.0'
|
||||
|
||||
s.add_dependency('middleman-core', Middleman::VERSION)
|
||||
s.add_dependency('middleman-cli', Middleman::VERSION)
|
||||
s.add_dependency('haml', ['>= 4.0.5'])
|
||||
s.add_dependency('coffee-script', ['~> 2.2'])
|
||||
s.add_dependency('coffee-script', ['~> 2.4'])
|
||||
s.add_dependency('kramdown', ['~> 2.3'])
|
||||
s.add_dependency('webrick', ['~> 1.7'])
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue