parklife 0.6.1 → 0.7.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/examples.yml +2 -2
- data/.github/workflows/tests.yml +79 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +1 -0
- data/Appraisals +30 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +1 -1
- data/gemfiles/rails_7.0.gemfile +13 -0
- data/gemfiles/rails_7.1.gemfile +12 -0
- data/gemfiles/rails_7.2.gemfile +12 -0
- data/gemfiles/rails_8.0.gemfile +12 -0
- data/gemfiles/sinatra_3.x.gemfile +12 -0
- data/gemfiles/sinatra_4.0.gemfile +12 -0
- data/gemfiles/sinatra_4.1.gemfile +12 -0
- data/lib/parklife/cli.rb +1 -0
- data/lib/parklife/rails.rb +22 -5
- data/lib/parklife/sinatra.rb +19 -0
- data/lib/parklife/templates/Parkfile.erb +7 -2
- data/lib/parklife/templates/github_pages.yml +4 -4
- data/lib/parklife/templates/static_build.erb +5 -2
- data/lib/parklife/utils.rb +1 -1
- data/lib/parklife/version.rb +1 -1
- metadata +12 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 716fff5f3d7ad38f43c2fd071de3a69dc58363b05fb7fd3d997311855a207f04
|
4
|
+
data.tar.gz: b153dc13fb74648185401f3a512c34eee2f0ad62659723937c0354d9c7547ecd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a1a022c68a6a7c77277440c926cd430ebf857a7757f42eab76b8233af84bdc4dd9407952a9465720a6a74e43d7706b8acb41a25705ebb3d0e34c9a75a11b441
|
7
|
+
data.tar.gz: 80af344c3209f6a57f147714c789d6c3d21a42cd3131186e9dbebb0e267d19258cdb297f13f273baefdb4bbd4bcba955c2c1e726ee9e218d8febaf50ec4c26c8
|
@@ -56,9 +56,9 @@ jobs:
|
|
56
56
|
- uses: ruby/setup-ruby@v1
|
57
57
|
with:
|
58
58
|
bundler-cache: true
|
59
|
-
ruby-version: '
|
59
|
+
ruby-version: '3.4'
|
60
60
|
working-directory: examples/sinatra
|
61
|
-
- run:
|
61
|
+
- run: bin/static-build
|
62
62
|
working-directory: examples/sinatra
|
63
63
|
- run: test -f build/index.html
|
64
64
|
working-directory: examples/sinatra
|
data/.github/workflows/tests.yml
CHANGED
@@ -3,9 +3,56 @@ name: Tests
|
|
3
3
|
on: push
|
4
4
|
|
5
5
|
jobs:
|
6
|
+
rails:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
strategy:
|
9
|
+
fail-fast: false
|
10
|
+
matrix:
|
11
|
+
rails:
|
12
|
+
- '7.0'
|
13
|
+
- '7.1'
|
14
|
+
- '7.2'
|
15
|
+
- '8.0'
|
16
|
+
ruby:
|
17
|
+
- '2.7'
|
18
|
+
- '3.0'
|
19
|
+
- '3.1'
|
20
|
+
- '3.2'
|
21
|
+
- '3.3'
|
22
|
+
- '3.4'
|
23
|
+
exclude:
|
24
|
+
# Rails 8.0 requires Ruby 3.2.
|
25
|
+
- rails: '8.0'
|
26
|
+
ruby: '3.1'
|
27
|
+
- rails: '8.0'
|
28
|
+
ruby: '3.0'
|
29
|
+
- rails: '8.0'
|
30
|
+
ruby: '2.7'
|
31
|
+
|
32
|
+
# Rails 7.2 requires Ruby 3.1.
|
33
|
+
- rails: '7.2'
|
34
|
+
ruby: '3.0'
|
35
|
+
- rails: '7.2'
|
36
|
+
ruby: '2.7'
|
37
|
+
|
38
|
+
# Rails 7.0 doesn't work out of the box with Ruby 3.4.
|
39
|
+
- rails: '7.0'
|
40
|
+
ruby: '3.4'
|
41
|
+
env:
|
42
|
+
BUNDLE_GEMFILE: gemfiles/rails_${{ matrix.rails }}.gemfile
|
43
|
+
name: Rails (Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }})
|
44
|
+
steps:
|
45
|
+
- uses: actions/checkout@v4
|
46
|
+
- uses: ruby/setup-ruby@v1
|
47
|
+
with:
|
48
|
+
bundler-cache: true
|
49
|
+
ruby-version: ${{ matrix.ruby }}
|
50
|
+
- run: bundle exec rspec --pattern "spec/**/*rails*"
|
51
|
+
|
6
52
|
rspec:
|
7
53
|
runs-on: ubuntu-latest
|
8
54
|
strategy:
|
55
|
+
fail-fast: false
|
9
56
|
matrix:
|
10
57
|
ruby:
|
11
58
|
- '2.7'
|
@@ -13,22 +60,50 @@ jobs:
|
|
13
60
|
- '3.1'
|
14
61
|
- '3.2'
|
15
62
|
- '3.3'
|
16
|
-
|
63
|
+
- '3.4'
|
64
|
+
name: RSpec (Ruby ${{ matrix.ruby }})
|
17
65
|
steps:
|
18
|
-
- uses: actions/checkout@
|
66
|
+
- uses: actions/checkout@v4
|
19
67
|
- uses: ruby/setup-ruby@v1
|
20
68
|
with:
|
21
69
|
bundler-cache: true
|
22
70
|
ruby-version: ${{ matrix.ruby }}
|
23
|
-
- run: bundle exec rspec
|
71
|
+
- run: bundle exec rspec --exclude-pattern "spec/**/*rails*,spec/**/*sinatra*"
|
24
72
|
|
25
73
|
rubocop:
|
26
74
|
runs-on: ubuntu-latest
|
27
75
|
name: RuboCop
|
28
76
|
steps:
|
29
|
-
- uses: actions/checkout@
|
77
|
+
- uses: actions/checkout@v4
|
30
78
|
- uses: ruby/setup-ruby@v1
|
31
79
|
with:
|
32
80
|
bundler-cache: true
|
33
81
|
ruby-version: '3.2'
|
34
82
|
- run: bundle exec rubocop
|
83
|
+
|
84
|
+
sinatra:
|
85
|
+
runs-on: ubuntu-latest
|
86
|
+
strategy:
|
87
|
+
fail-fast: false
|
88
|
+
matrix:
|
89
|
+
ruby:
|
90
|
+
- '2.7'
|
91
|
+
- '3.0'
|
92
|
+
- '3.1'
|
93
|
+
- '3.2'
|
94
|
+
- '3.3'
|
95
|
+
- '3.4'
|
96
|
+
sinatra:
|
97
|
+
- '3.x'
|
98
|
+
- '4.0'
|
99
|
+
- '4.1'
|
100
|
+
env:
|
101
|
+
BUNDLE_GEMFILE: gemfiles/sinatra_${{ matrix.sinatra }}.gemfile
|
102
|
+
name: Rails (Ruby ${{ matrix.ruby }} / Sinatra ${{ matrix.sinatra }})
|
103
|
+
steps:
|
104
|
+
- uses: actions/checkout@v4
|
105
|
+
- uses: ruby/setup-ruby@v1
|
106
|
+
with:
|
107
|
+
bundler-cache: true
|
108
|
+
ruby-version: ${{ matrix.ruby }}
|
109
|
+
- run: bundle exec rspec --pattern "spec/**/*sinatra*"
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/Appraisals
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
appraise 'rails_7.0' do
|
4
|
+
gem 'concurrent-ruby', '< 1.3.5'
|
5
|
+
gem 'rails', '~> 7.0.0'
|
6
|
+
end
|
7
|
+
|
8
|
+
appraise 'rails_7.1' do
|
9
|
+
gem 'rails', '~> 7.1.0'
|
10
|
+
end
|
11
|
+
|
12
|
+
appraise 'rails_7.2' do
|
13
|
+
gem 'rails', '~> 7.2.0'
|
14
|
+
end
|
15
|
+
|
16
|
+
appraise 'rails_8.0' do
|
17
|
+
gem 'rails', '~> 8.0.0'
|
18
|
+
end
|
19
|
+
|
20
|
+
appraise 'sinatra_3.x' do
|
21
|
+
gem 'sinatra', '~> 3.0'
|
22
|
+
end
|
23
|
+
|
24
|
+
appraise 'sinatra_4.0' do
|
25
|
+
gem 'sinatra', '~> 4.0.0'
|
26
|
+
end
|
27
|
+
|
28
|
+
appraise 'sinatra_4.1' do
|
29
|
+
gem 'sinatra', '~> 4.1.0'
|
30
|
+
end
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## Version 0.7.0 - 2025-02-03
|
2
|
+
|
3
|
+
- Add support for Rails 8 and add test infrastructure to ensure future compatibility with Rails 7.0, 7.1, and 8.0. <https://github.com/benpickles/parklife/pull/115>, <https://github.com/benpickles/parklife/pull/117>, <https://github.com/benpickles/parklife/pull/121>
|
4
|
+
- Improve out-of-the-box compatibility with Rails by reading `default_url_options`, `relative_url_root`, and `force_ssl` settings on boot and applying them to Parklife's `config.base` (`force_ssl` has been set to `true` in `production.rb` since Rails 7.1). <https://github.com/benpickles/parklife/pull/118>
|
5
|
+
- Improve out-of-the-box compatibility with Sinatra 4.1 which has host authorisation middleware enabled by default in development mode and would otherwise respond to Parklife requests with a 403 status. Additionally the generated Sinatra production build script now sets the environment variable `APP_ENV=production` to enable production mode. <https://github.com/benpickles/parklife/pull/123>, <https://github.com/benpickles/parklife/pull/122>
|
6
|
+
- When discovering HTML links ignore `<a>` elements without an `href`. <https://github.com/benpickles/parklife/pull/107>
|
7
|
+
|
1
8
|
## Version 0.6.1 - 2024-08-23
|
2
9
|
|
3
10
|
- Don't error when the public directory doesn't exist <https://github.com/benpickles/parklife/pull/105>
|
data/Gemfile
CHANGED
data/lib/parklife/cli.rb
CHANGED
@@ -26,6 +26,7 @@ module Parklife
|
|
26
26
|
['nested_index', application.config.nested_index],
|
27
27
|
['on_404', application.config.on_404.inspect],
|
28
28
|
['parklife/rails', defined?(::Parklife::Railtie) ? 'enabled' : '-'],
|
29
|
+
['parklife/sinatra', defined?(::Parklife::Sinatra) ? 'enabled' : '-'],
|
29
30
|
['reporter', reporter == $stdout ? '$stdout' : reporter],
|
30
31
|
])
|
31
32
|
end
|
data/lib/parklife/rails.rb
CHANGED
@@ -8,7 +8,7 @@ module Parklife
|
|
8
8
|
# default_url_options and relative_url_root to match.
|
9
9
|
def base=(value)
|
10
10
|
super.tap { |uri|
|
11
|
-
|
11
|
+
app.default_url_options = {
|
12
12
|
host: Utils.host_with_port(uri),
|
13
13
|
protocol: uri.scheme,
|
14
14
|
}
|
@@ -19,6 +19,12 @@ module Parklife
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
module RailsRouteSetRefinements
|
23
|
+
def default_url_options
|
24
|
+
Rails.application.default_url_options
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
22
28
|
class Railtie < Rails::Railtie
|
23
29
|
initializer 'parklife.disable_host_authorization' do |app|
|
24
30
|
# The offending middleware is included in Rails (6+) development mode and
|
@@ -37,16 +43,27 @@ module Parklife
|
|
37
43
|
if defined?(ActionDispatch::HostAuthorization)
|
38
44
|
app.middleware.delete(ActionDispatch::HostAuthorization)
|
39
45
|
end
|
40
|
-
end
|
41
46
|
|
42
|
-
|
43
|
-
Parklife.application.config.app = Rails.application
|
47
|
+
Parklife.application.config.app = app
|
44
48
|
|
45
49
|
# Allow use of the Rails application's route helpers when defining
|
46
50
|
# Parklife routes in the block form.
|
47
|
-
Parklife.application.routes.singleton_class.include(
|
51
|
+
Parklife.application.routes.singleton_class.include(RailsRouteSetRefinements)
|
52
|
+
Parklife.application.routes.singleton_class.include(app.routes.url_helpers)
|
48
53
|
|
49
54
|
Parklife.application.config.extend(RailsConfigRefinements)
|
50
55
|
end
|
56
|
+
|
57
|
+
config.after_initialize do |app|
|
58
|
+
# Read the Rails app's URL config and apply it to Parklife's so that the
|
59
|
+
# Rails config can be used as the single source of truth.
|
60
|
+
host, protocol = app.default_url_options.values_at(:host, :protocol)
|
61
|
+
protocol = 'https' if app.config.force_ssl
|
62
|
+
path = ActionController::Base.relative_url_root
|
63
|
+
|
64
|
+
Parklife.application.config.base.scheme = protocol if protocol
|
65
|
+
Parklife.application.config.base.host = host if host
|
66
|
+
Parklife.application.config.base.path = path if path
|
67
|
+
end
|
51
68
|
end
|
52
69
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sinatra/base'
|
4
|
+
|
5
|
+
module Parklife
|
6
|
+
module Sinatra
|
7
|
+
def self.registered(app)
|
8
|
+
# Disable Rack::Protection::HostAuthorization middleware so that fetching
|
9
|
+
# a page with Parklife works in development. It's safe to do here because
|
10
|
+
# it will only be executed when this file is explicitly required in a
|
11
|
+
# Parkfile and not in general when the app is running in a web server.
|
12
|
+
if app.settings.respond_to?(:host_authorization)
|
13
|
+
app.set(:host_authorization, permitted_hosts: [])
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Sinatra.register Parklife::Sinatra
|
@@ -2,7 +2,11 @@
|
|
2
2
|
require 'parklife/rails'
|
3
3
|
require_relative 'config/environment'
|
4
4
|
<% else -%>
|
5
|
-
|
5
|
+
<% if options[:sinatra] -%>
|
6
|
+
require 'parklife/sinatra'
|
7
|
+
|
8
|
+
<% end -%>
|
9
|
+
# Assuming your <%= options[:sinatra] ? 'Sinatra' : 'Rack' %> app lives in ./app.rb:
|
6
10
|
require_relative 'app'
|
7
11
|
<% end -%>
|
8
12
|
|
@@ -11,8 +15,9 @@ Parklife.application.configure do |config|
|
|
11
15
|
# For a Sinatra "classic" app:
|
12
16
|
config.app = Sinatra::Application
|
13
17
|
#
|
14
|
-
#
|
18
|
+
# For a modular-style Sinatra app the Parklife extension must be explicitly registered:
|
15
19
|
# config.app = App
|
20
|
+
# App.register Parklife::Sinatra
|
16
21
|
|
17
22
|
<% elsif !options[:rails] -%>
|
18
23
|
config.app = App
|
@@ -15,11 +15,11 @@ jobs:
|
|
15
15
|
build:
|
16
16
|
runs-on: ubuntu-latest
|
17
17
|
steps:
|
18
|
-
- uses: actions/checkout@
|
18
|
+
- uses: actions/checkout@v4
|
19
19
|
- uses: ruby/setup-ruby@v1
|
20
20
|
with:
|
21
21
|
bundler-cache: true
|
22
|
-
- uses: actions/configure-pages@
|
22
|
+
- uses: actions/configure-pages@v5
|
23
23
|
id: pages
|
24
24
|
|
25
25
|
# Build with Parklife and use its GitHub Pages URL (either its custom
|
@@ -27,7 +27,7 @@ jobs:
|
|
27
27
|
- run: bin/static-build --base "${{ steps.pages.outputs.base_url }}"
|
28
28
|
|
29
29
|
- name: Upload artifact
|
30
|
-
uses: actions/upload-pages-artifact@
|
30
|
+
uses: actions/upload-pages-artifact@v3
|
31
31
|
if: github.ref == 'refs/heads/main' # Only upload on main branch.
|
32
32
|
with:
|
33
33
|
path: build/
|
@@ -45,4 +45,4 @@ jobs:
|
|
45
45
|
steps:
|
46
46
|
- name: Deploy to GitHub Pages
|
47
47
|
id: deployment
|
48
|
-
uses: actions/deploy-pages@
|
48
|
+
uses: actions/deploy-pages@v4
|
@@ -3,8 +3,7 @@
|
|
3
3
|
set -eu
|
4
4
|
|
5
5
|
<% if options[:rails] -%>
|
6
|
-
#
|
7
|
-
# asset URLs are referenced.
|
6
|
+
# Run the app in production mode to ensure correct asset URLs are generated etc.
|
8
7
|
export RAILS_ENV=production
|
9
8
|
export SECRET_KEY_BASE=dummy
|
10
9
|
|
@@ -17,6 +16,10 @@ export SECRET_KEY_BASE=dummy
|
|
17
16
|
# missing assets in production.
|
18
17
|
bundle exec rails assets:precompile
|
19
18
|
|
19
|
+
<% elsif options[:sinatra] -%>
|
20
|
+
# Run the app in production mode.
|
21
|
+
export APP_ENV=production
|
22
|
+
|
20
23
|
<% end -%>
|
21
24
|
# Build with Parklife - and forward arguments sent to this script.
|
22
25
|
bundle exec parklife build "$@"
|
data/lib/parklife/utils.rb
CHANGED
data/lib/parklife/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parklife
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Pickles
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-02-03 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: nokogiri
|
@@ -52,7 +51,6 @@ dependencies:
|
|
52
51
|
- - ">="
|
53
52
|
- !ruby/object:Gem::Version
|
54
53
|
version: '0'
|
55
|
-
description:
|
56
54
|
email:
|
57
55
|
- spideryoung@gmail.com
|
58
56
|
executables:
|
@@ -65,6 +63,7 @@ files:
|
|
65
63
|
- ".gitignore"
|
66
64
|
- ".rspec"
|
67
65
|
- ".rubocop.yml"
|
66
|
+
- Appraisals
|
68
67
|
- CHANGELOG.md
|
69
68
|
- CODE_OF_CONDUCT.md
|
70
69
|
- Gemfile
|
@@ -74,6 +73,13 @@ files:
|
|
74
73
|
- bin/console
|
75
74
|
- bin/setup
|
76
75
|
- exe/parklife
|
76
|
+
- gemfiles/rails_7.0.gemfile
|
77
|
+
- gemfiles/rails_7.1.gemfile
|
78
|
+
- gemfiles/rails_7.2.gemfile
|
79
|
+
- gemfiles/rails_8.0.gemfile
|
80
|
+
- gemfiles/sinatra_3.x.gemfile
|
81
|
+
- gemfiles/sinatra_4.0.gemfile
|
82
|
+
- gemfiles/sinatra_4.1.gemfile
|
77
83
|
- lib/parklife.rb
|
78
84
|
- lib/parklife/application.rb
|
79
85
|
- lib/parklife/browser.rb
|
@@ -84,6 +90,7 @@ files:
|
|
84
90
|
- lib/parklife/rails.rb
|
85
91
|
- lib/parklife/route.rb
|
86
92
|
- lib/parklife/route_set.rb
|
93
|
+
- lib/parklife/sinatra.rb
|
87
94
|
- lib/parklife/templates/Parkfile.erb
|
88
95
|
- lib/parklife/templates/github_pages.yml
|
89
96
|
- lib/parklife/templates/static_build.erb
|
@@ -98,7 +105,6 @@ metadata:
|
|
98
105
|
homepage_uri: https://parklife.dev
|
99
106
|
rubygems_mfa_required: 'true'
|
100
107
|
source_code_uri: https://github.com/benpickles/parklife
|
101
|
-
post_install_message:
|
102
108
|
rdoc_options: []
|
103
109
|
require_paths:
|
104
110
|
- lib
|
@@ -113,8 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
119
|
- !ruby/object:Gem::Version
|
114
120
|
version: '0'
|
115
121
|
requirements: []
|
116
|
-
rubygems_version: 3.
|
117
|
-
signing_key:
|
122
|
+
rubygems_version: 3.6.2
|
118
123
|
specification_version: 4
|
119
124
|
summary: Convert a Rack app into a static HTML site.
|
120
125
|
test_files: []
|