parklife 0.4.0 → 0.5.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/tests.yml +13 -2
- data/.rubocop.yml +30 -0
- data/CHANGELOG.md +22 -13
- data/Gemfile +7 -0
- data/README.md +9 -3
- data/Rakefile +2 -0
- data/bin/console +1 -0
- data/exe/parklife +2 -0
- data/lib/parklife/application.rb +2 -0
- data/lib/parklife/browser.rb +13 -5
- data/lib/parklife/cli.rb +33 -12
- data/lib/parklife/config.rb +2 -0
- data/lib/parklife/crawler.rb +8 -2
- data/lib/parklife/errors.rb +6 -13
- data/lib/parklife/rails.rb +25 -3
- data/lib/parklife/route.rb +2 -0
- data/lib/parklife/route_set.rb +2 -0
- data/lib/parklife/templates/Parkfile.erb +48 -0
- data/lib/parklife/templates/github_pages.yml +48 -0
- data/lib/parklife/templates/static_build.erb +28 -0
- data/lib/parklife/utils.rb +7 -0
- data/lib/parklife/version.rb +3 -1
- data/lib/parklife.rb +2 -0
- data/parklife.gemspec +6 -5
- metadata +8 -106
- data/examples/rack/.gitignore +0 -2
- data/examples/rack/Gemfile +0 -4
- data/examples/rack/Parkfile +0 -21
- data/examples/rails/.gitignore +0 -28
- data/examples/rails/Gemfile +0 -5
- data/examples/rails/Parkfile +0 -6
- data/examples/rails/Rakefile +0 -6
- data/examples/rails/app/assets/config/manifest.js +0 -2
- data/examples/rails/app/assets/images/.keep +0 -0
- data/examples/rails/app/assets/stylesheets/application.css +0 -15
- data/examples/rails/app/assets/stylesheets/global.css +0 -4
- data/examples/rails/app/controllers/application_controller.rb +0 -2
- data/examples/rails/app/controllers/posts_controller.rb +0 -9
- data/examples/rails/app/helpers/application_helper.rb +0 -2
- data/examples/rails/app/jobs/application_job.rb +0 -2
- data/examples/rails/app/models/application_record.rb +0 -3
- data/examples/rails/app/models/post.rb +0 -5
- data/examples/rails/app/views/layouts/application.html.erb +0 -14
- data/examples/rails/app/views/posts/index.html.erb +0 -7
- data/examples/rails/app/views/posts/show.html.erb +0 -3
- data/examples/rails/bin/bundle +0 -3
- data/examples/rails/bin/rails +0 -4
- data/examples/rails/bin/rake +0 -4
- data/examples/rails/bin/setup +0 -33
- data/examples/rails/bin/update +0 -28
- data/examples/rails/config/application.rb +0 -35
- data/examples/rails/config/boot.rb +0 -3
- data/examples/rails/config/database.yml +0 -25
- data/examples/rails/config/environment.rb +0 -5
- data/examples/rails/config/environments/development.rb +0 -53
- data/examples/rails/config/environments/production.rb +0 -79
- data/examples/rails/config/environments/test.rb +0 -36
- data/examples/rails/config/initializers/application_controller_renderer.rb +0 -8
- data/examples/rails/config/initializers/assets.rb +0 -12
- data/examples/rails/config/initializers/backtrace_silencers.rb +0 -7
- data/examples/rails/config/initializers/content_security_policy.rb +0 -25
- data/examples/rails/config/initializers/cookies_serializer.rb +0 -5
- data/examples/rails/config/initializers/filter_parameter_logging.rb +0 -4
- data/examples/rails/config/initializers/inflections.rb +0 -16
- data/examples/rails/config/initializers/mime_types.rb +0 -4
- data/examples/rails/config/initializers/wrap_parameters.rb +0 -14
- data/examples/rails/config/locales/en.yml +0 -33
- data/examples/rails/config/routes.rb +0 -5
- data/examples/rails/config.ru +0 -5
- data/examples/rails/data/1-hello-from-parklife.txt +0 -3
- data/examples/rails/data/2-hello-again.txt +0 -3
- data/examples/rails/data/3-magic-number.txt +0 -3
- data/examples/rails/db/migrate/20190507172823_create_posts.rb +0 -11
- data/examples/rails/db/schema.rb +0 -24
- data/examples/rails/db/seeds.rb +0 -10
- data/examples/rails/parklife-build +0 -25
- data/examples/rails/public/404.html +0 -67
- data/examples/rails/public/422.html +0 -67
- data/examples/rails/public/500.html +0 -66
- data/examples/rails/public/apple-touch-icon-precomposed.png +0 -0
- data/examples/rails/public/apple-touch-icon.png +0 -0
- data/examples/rails/public/favicon.ico +0 -0
- data/examples/rails/public/robots.txt +0 -1
- data/examples/sinatra/.gitignore +0 -2
- data/examples/sinatra/Gemfile +0 -4
- data/examples/sinatra/Parkfile +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6faa171e9fe5ae60f6285af884bbd5b19b96942dc5fefb106912c89137a2ff78
|
4
|
+
data.tar.gz: 8ffe432c9e9e5f374c61d4f3c3a6123532e699c9d4d9cfc5be87524d778e8008
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48d14b37c34b2ed4c35fd73f7d53628962440ede84b0b64b65b33d1e02d3db787aa321ff45b637d4f9e3d80386c09ebaada5cd27fd78165beeaf09ce4c8a10ef
|
7
|
+
data.tar.gz: 6b30a2348133bd7ca05c19740f4cd73a8bf3de59b05f8a34d1c04d8008df79df3c2a8a42f5c66bf2376030c96413c5b99075e0ef17489685b229fdff6511436c
|
data/.github/workflows/tests.yml
CHANGED
@@ -26,9 +26,9 @@ jobs:
|
|
26
26
|
- uses: ruby/setup-ruby@v1
|
27
27
|
with:
|
28
28
|
bundler-cache: true
|
29
|
-
ruby-version: '2
|
29
|
+
ruby-version: '3.2'
|
30
30
|
working-directory: examples/rails
|
31
|
-
- run:
|
31
|
+
- run: bin/static-build
|
32
32
|
working-directory: examples/rails
|
33
33
|
- run: test -f build/index.html
|
34
34
|
working-directory: examples/rails
|
@@ -65,3 +65,14 @@ jobs:
|
|
65
65
|
bundler-cache: true
|
66
66
|
ruby-version: ${{ matrix.ruby }}
|
67
67
|
- run: bundle exec rspec
|
68
|
+
|
69
|
+
rubocop:
|
70
|
+
runs-on: ubuntu-latest
|
71
|
+
name: RuboCop
|
72
|
+
steps:
|
73
|
+
- uses: actions/checkout@v3
|
74
|
+
- uses: ruby/setup-ruby@v1
|
75
|
+
with:
|
76
|
+
bundler-cache: true
|
77
|
+
ruby-version: '3.2'
|
78
|
+
- run: bundle exec rubocop
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
AllCops:
|
2
|
+
NewCops: enable
|
3
|
+
Exclude:
|
4
|
+
- examples/**/*
|
5
|
+
- vendor/**/*
|
6
|
+
SuggestExtensions: false
|
7
|
+
TargetRubyVersion: 2.5
|
8
|
+
|
9
|
+
Layout:
|
10
|
+
Enabled: false
|
11
|
+
|
12
|
+
Layout/EmptyLineAfterMagicComment:
|
13
|
+
Enabled: true
|
14
|
+
|
15
|
+
Lint/AmbiguousBlockAssociation:
|
16
|
+
Enabled: false
|
17
|
+
|
18
|
+
Metrics:
|
19
|
+
Enabled: false
|
20
|
+
|
21
|
+
Naming:
|
22
|
+
Enabled: false
|
23
|
+
|
24
|
+
Style:
|
25
|
+
Enabled: false
|
26
|
+
|
27
|
+
Style/FrozenStringLiteralComment:
|
28
|
+
Enabled: true
|
29
|
+
Exclude:
|
30
|
+
- spec/**/*
|
data/CHANGELOG.md
CHANGED
@@ -1,25 +1,34 @@
|
|
1
|
+
## Version 0.5.0 - 2023-03-12
|
2
|
+
|
3
|
+
- RuboCop. <https://github.com/benpickles/parklife/pull/87>
|
4
|
+
- Allow passing a --base to all `parklife` commands. <https://github.com/benpickles/parklife/pull/85>
|
5
|
+
- Configure Rails default_url_options and relative_url_root when setting Parklife base. <https://github.com/benpickles/parklife/pull/85>
|
6
|
+
- Add `parklife get PATH` command to fetch and output a path. <https://github.com/benpickles/parklife/pull/83>
|
7
|
+
- Add a `parklife init` command to create a starter Parkfile and friends. <https://github.com/benpickles/parklife/pull/82>
|
8
|
+
- Fix the HOST header for a non-standard port. <https://github.com/benpickles/parklife/pull/81>
|
9
|
+
|
1
10
|
## Version 0.4.0 - 2023-03-01
|
2
11
|
|
3
|
-
- Add a `parklife --version` command.
|
4
|
-
- No need to `require parklife` from the Parkfile.
|
12
|
+
- Add a `parklife --version` command. <https://github.com/benpickles/parklife/pull/80>
|
13
|
+
- No need to `require parklife` from the Parkfile. <https://github.com/benpickles/parklife/pull/79>
|
5
14
|
|
6
15
|
## Version 0.3.0 - 2023-02-26
|
7
16
|
|
8
|
-
- Allow overriding `config.base` from the CLI build command with the `--base` option.
|
9
|
-
- Support mounting the app at a path.
|
10
|
-
- Remove Capybara and use Rack::Test directly.
|
11
|
-
- Rename `config.rack_app` to `config.app`.
|
12
|
-
- Don't save the response when `on_404=:skip`.
|
13
|
-
- More accurate progress dots.
|
14
|
-
- Default `build_dir` to `build`.
|
15
|
-
- Fix build paths when `build_dir` isn't a full path.
|
16
|
-
- Ignore pathless links - for instance #fragments and mailto.
|
17
|
+
- Allow overriding `config.base` from the CLI build command with the `--base` option. <https://github.com/benpickles/parklife/pull/78>
|
18
|
+
- Support mounting the app at a path. <https://github.com/benpickles/parklife/pull/78>
|
19
|
+
- Remove Capybara and use Rack::Test directly. <https://github.com/benpickles/parklife/pull/78>
|
20
|
+
- Rename `config.rack_app` to `config.app`. <https://github.com/benpickles/parklife/pull/78>
|
21
|
+
- Don't save the response when `on_404=:skip`. <https://github.com/benpickles/parklife/pull/77>
|
22
|
+
- More accurate progress dots. <https://github.com/benpickles/parklife/pull/75>
|
23
|
+
- Default `build_dir` to `build`. <https://github.com/benpickles/parklife/pull/73>
|
24
|
+
- Fix build paths when `build_dir` isn't a full path. <https://github.com/benpickles/parklife/pull/73>
|
25
|
+
- Ignore pathless links - for instance #fragments and mailto. <https://github.com/benpickles/parklife/pull/72>
|
17
26
|
|
18
27
|
## Version 0.2.0 - 2023-02-21
|
19
28
|
|
20
29
|
- First official version hosted on [RubyGems.org](https://rubygems.org/gems/parklife).
|
21
|
-
- Provide alternatives to blowing up if a 404 is encountered.
|
22
|
-
- Add the ability to crawl a route by adding `crawl: true` to it.
|
30
|
+
- Provide alternatives to blowing up if a 404 is encountered. <https://github.com/benpickles/parklife/pull/70>
|
31
|
+
- Add the ability to crawl a route by adding `crawl: true` to it. <https://github.com/benpickles/parklife/pull/65>
|
23
32
|
|
24
33
|
## Version 0.1.0 - 2019-04-26
|
25
34
|
|
data/Gemfile
CHANGED
@@ -1,6 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source 'https://rubygems.org'
|
2
4
|
|
3
5
|
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
4
6
|
|
5
7
|
# Specify your gem's dependencies in parklife.gemspec
|
6
8
|
gemspec
|
9
|
+
|
10
|
+
gem 'bundler'
|
11
|
+
gem 'rake'
|
12
|
+
gem 'rspec'
|
13
|
+
gem 'rubocop'
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
[Parklife](https://github.com/benpickles/parklife) is a Ruby library to render a Rack app (Rails/Sinatra/etc) to a static site so it can be served by [Netlify](https://www.netlify.com), [Now](https://zeit.co/now), [GitHub Pages](https://pages.github.com), S3, or another static server.
|
6
6
|
|
7
|
-
##
|
7
|
+
## Getting started
|
8
8
|
|
9
9
|
Add Parklife to your application's Gemfile and run bundle install.
|
10
10
|
|
@@ -12,6 +12,12 @@ Add Parklife to your application's Gemfile and run bundle install.
|
|
12
12
|
gem 'parklife'
|
13
13
|
```
|
14
14
|
|
15
|
+
Now generate a Parkfile configuration file and build script. Include some Rails- or Sinatra-specific settings by passing `--rails` or `--sinatra`, create a GitHub Actions workflow to generate your Parklife build and push it to GitHub Pages by passing `--github-pages`.
|
16
|
+
|
17
|
+
```
|
18
|
+
$ bundle exec parklife init
|
19
|
+
```
|
20
|
+
|
15
21
|
## How to use Parklife with Rails
|
16
22
|
|
17
23
|
Parklife is configured with a file called `Parkfile` in the root of your project, here's an example `Parkfile` for an imaginary Rails app:
|
@@ -45,10 +51,10 @@ Listing the routes included in the above Parklife application with `parklife rou
|
|
45
51
|
|
46
52
|
```
|
47
53
|
$ bundle exec parklife routes
|
48
|
-
/
|
54
|
+
/ crawl=true
|
49
55
|
/feed.atom
|
50
56
|
/sitemap.xml
|
51
|
-
/easter_egg
|
57
|
+
/easter_egg crawl=true
|
52
58
|
/404.html
|
53
59
|
```
|
54
60
|
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
data/exe/parklife
CHANGED
data/lib/parklife/application.rb
CHANGED
data/lib/parklife/browser.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'parklife/utils'
|
1
4
|
require 'rack/test'
|
2
5
|
|
3
6
|
module Parklife
|
@@ -7,16 +10,21 @@ module Parklife
|
|
7
10
|
def initialize(app, base)
|
8
11
|
@app = app
|
9
12
|
@base = base
|
10
|
-
@env = {
|
11
|
-
'HTTP_HOST' => base.host,
|
12
|
-
'HTTPS' => base.scheme == 'https' ? 'on' : 'off',
|
13
|
-
script_name: base.path.chomp('/'),
|
14
|
-
}
|
15
13
|
@session = Rack::Test::Session.new(app)
|
14
|
+
set_env
|
16
15
|
end
|
17
16
|
|
18
17
|
def get(path)
|
19
18
|
session.get(path, nil, env)
|
20
19
|
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def set_env
|
23
|
+
@env = {
|
24
|
+
'HTTP_HOST' => Utils.host_with_port(base),
|
25
|
+
'HTTPS' => base.scheme == 'https' ? 'on' : 'off',
|
26
|
+
script_name: base.path.chomp('/'),
|
27
|
+
}
|
28
|
+
end
|
21
29
|
end
|
22
30
|
end
|
data/lib/parklife/cli.rb
CHANGED
@@ -1,28 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'parklife'
|
2
4
|
require 'thor'
|
3
5
|
|
4
6
|
module Parklife
|
5
7
|
class CLI < Thor
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
application.config.base = options[:base] if options[:base]
|
8
|
+
include Thor::Actions
|
9
|
+
source_root File.expand_path('templates', __dir__)
|
10
|
+
|
11
|
+
class_option :base, desc: 'Override config.base configured in the Parkfile'
|
11
12
|
|
13
|
+
desc 'build', 'Create a production build'
|
14
|
+
def build
|
12
15
|
application.build
|
13
16
|
end
|
14
17
|
|
15
|
-
desc '
|
18
|
+
desc 'get PATH', 'Fetch PATH from the app and output its contents'
|
19
|
+
def get(path)
|
20
|
+
puts application.crawler.get(path).body
|
21
|
+
end
|
22
|
+
|
23
|
+
desc 'init', 'Generate a starter Parkfile and friends'
|
24
|
+
option :github_pages, desc: 'Generate a GitHub Actions workflow to deploy to GitHub Pages', type: :boolean
|
25
|
+
option :rails, desc: 'Include some Rails-specific settings', type: :boolean
|
26
|
+
option :sinatra, desc: 'Include some Sinatra-specific settings', type: :boolean
|
27
|
+
def init
|
28
|
+
template('Parkfile.erb', 'Parkfile')
|
29
|
+
template('static_build.erb', 'bin/static-build', mode: 0755)
|
30
|
+
copy_file('github_pages.yml', '.github/workflows/parklife.yml') if options[:github_pages]
|
31
|
+
end
|
32
|
+
|
33
|
+
desc 'routes', 'List all defined routes'
|
16
34
|
def routes
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
35
|
+
shell.print_table(
|
36
|
+
application.routes.map { |route|
|
37
|
+
[route.path, route.crawl ? "crawl=true" : nil]
|
38
|
+
}
|
39
|
+
)
|
22
40
|
end
|
23
41
|
|
24
42
|
map '--version' => :version
|
25
|
-
desc 'version', '
|
43
|
+
desc 'version', 'Output the current version of Parklife'
|
26
44
|
def version
|
27
45
|
puts Parklife::VERSION
|
28
46
|
end
|
@@ -36,6 +54,9 @@ module Parklife
|
|
36
54
|
# Reach inside the consuming app's directory to apply its Parklife
|
37
55
|
# config.
|
38
56
|
app.load_Parkfile(File.join(Dir.pwd, 'Parkfile'))
|
57
|
+
|
58
|
+
# Runtime overrides.
|
59
|
+
app.config.base = options[:base] if options[:base]
|
39
60
|
}
|
40
61
|
end
|
41
62
|
end
|
data/lib/parklife/config.rb
CHANGED
data/lib/parklife/crawler.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'parklife/browser'
|
2
4
|
require 'parklife/route'
|
3
5
|
require 'parklife/utils'
|
@@ -13,11 +15,15 @@ module Parklife
|
|
13
15
|
@browser = Browser.new(config.app, config.base)
|
14
16
|
end
|
15
17
|
|
18
|
+
def get(path)
|
19
|
+
browser.get(path)
|
20
|
+
end
|
21
|
+
|
16
22
|
def start
|
17
23
|
@routes = route_set.to_a
|
18
24
|
@visited = Set.new
|
19
25
|
|
20
|
-
while route = @routes.shift
|
26
|
+
while (route = @routes.shift)
|
21
27
|
processed = process_route(route)
|
22
28
|
config.reporter.print('.') if processed
|
23
29
|
end
|
@@ -40,7 +46,7 @@ module Parklife
|
|
40
46
|
|
41
47
|
return false if already_processed
|
42
48
|
|
43
|
-
response =
|
49
|
+
response = get(route.path)
|
44
50
|
|
45
51
|
case response.status
|
46
52
|
when 200
|
data/lib/parklife/errors.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Parklife
|
2
4
|
Error = Class.new(StandardError)
|
3
5
|
BuildDirNotDefinedError = Class.new(Error)
|
@@ -5,28 +7,19 @@ module Parklife
|
|
5
7
|
|
6
8
|
class HTTPError < Error
|
7
9
|
def initialize(status, path)
|
8
|
-
|
9
|
-
@path = path
|
10
|
-
end
|
11
|
-
|
12
|
-
def message
|
13
|
-
%Q(#{@status} response from path "#{@path}")
|
10
|
+
super %Q(#{status} response from path "#{path}")
|
14
11
|
end
|
15
12
|
end
|
16
13
|
|
17
14
|
class ParkfileLoadError < Error
|
18
15
|
def initialize(path)
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
def message
|
23
|
-
%Q(Cannot load Parkfile "#{@path}")
|
16
|
+
super %Q(Cannot load Parkfile "#{path}")
|
24
17
|
end
|
25
18
|
end
|
26
19
|
|
27
20
|
class RailsNotDefinedError < Error
|
28
|
-
def
|
29
|
-
|
21
|
+
def initialize(msg = 'Expected Rails to be defined, require config/environment before parklife')
|
22
|
+
super
|
30
23
|
end
|
31
24
|
end
|
32
25
|
end
|
data/lib/parklife/rails.rb
CHANGED
@@ -1,7 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
raise Parklife::RailsNotDefinedError unless defined?(Rails)
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
-
Parklife
|
5
|
+
module Parklife
|
6
|
+
module RailsConfigRefinements
|
7
|
+
# When setting Parklife's base also configure the Rails app's
|
8
|
+
# default_url_options and relative_url_root to match.
|
9
|
+
def base=(value)
|
10
|
+
super.tap { |uri|
|
11
|
+
Rails.application.default_url_options = {
|
12
|
+
host: Utils.host_with_port(uri),
|
13
|
+
protocol: uri.scheme,
|
14
|
+
}
|
15
|
+
|
16
|
+
base_path = !uri.path.empty? && uri.path != '/' ? uri.path : nil
|
17
|
+
ActionController::Base.relative_url_root = base_path
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
6
22
|
|
7
23
|
Parklife.application.config.app = Rails.application
|
24
|
+
|
25
|
+
# Allow use of the Rails application's route helpers when defining Parklife
|
26
|
+
# routes in the block form.
|
27
|
+
Parklife.application.routes.singleton_class.include(Rails.application.routes.url_helpers)
|
28
|
+
|
29
|
+
Parklife.application.config.extend(Parklife::RailsConfigRefinements)
|
data/lib/parklife/route.rb
CHANGED
data/lib/parklife/route_set.rb
CHANGED
@@ -0,0 +1,48 @@
|
|
1
|
+
<% if options[:rails] -%>
|
2
|
+
require_relative 'config/environment'
|
3
|
+
require 'parklife/rails'
|
4
|
+
<% else -%>
|
5
|
+
# Assuming your Rack app lives in ./app.rb:
|
6
|
+
require_relative 'app'
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
Parklife.application.configure do |config|
|
10
|
+
<% if options[:sinatra] -%>
|
11
|
+
# For a Sinatra "classic" app:
|
12
|
+
config.app = Sinatra::Application
|
13
|
+
#
|
14
|
+
# Or for Sinatra modular style:
|
15
|
+
# config.app = App
|
16
|
+
|
17
|
+
<% elsif !options[:rails] -%>
|
18
|
+
config.app = App
|
19
|
+
|
20
|
+
<% end -%>
|
21
|
+
<% if options[:github_pages] -%>
|
22
|
+
# Serve trailing slash-less URLs from GitHub Pages.
|
23
|
+
config.nested_index = false
|
24
|
+
|
25
|
+
<% end -%>
|
26
|
+
# See configuration options here:
|
27
|
+
# https://github.com/benpickles/parklife#configuration
|
28
|
+
end
|
29
|
+
|
30
|
+
Parklife.application.routes do
|
31
|
+
root crawl: true
|
32
|
+
|
33
|
+
<% if options[:rails] -%>
|
34
|
+
# Add further paths not discovered by crawling from the root - Parklife's
|
35
|
+
# Rails integration lets you use the app's route helpers:
|
36
|
+
#
|
37
|
+
# get hidden_pages_path, crawl: true
|
38
|
+
# get feed_path(format: :atom)
|
39
|
+
<% else -%>
|
40
|
+
# Add further paths not discovered by crawling from the root:
|
41
|
+
#
|
42
|
+
# get '/hidden/pages', crawl: true
|
43
|
+
# get '/feed.atom'
|
44
|
+
<% end -%>
|
45
|
+
|
46
|
+
# Services typically allow a custom 404 page.
|
47
|
+
# get '/404.html'
|
48
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
name: Parklife
|
2
|
+
|
3
|
+
on:
|
4
|
+
# Run on every push.
|
5
|
+
push:
|
6
|
+
# Allow manually triggering a build.
|
7
|
+
workflow_dispatch:
|
8
|
+
|
9
|
+
permissions:
|
10
|
+
contents: read
|
11
|
+
pages: write
|
12
|
+
id-token: write
|
13
|
+
|
14
|
+
jobs:
|
15
|
+
build:
|
16
|
+
runs-on: ubuntu-latest
|
17
|
+
steps:
|
18
|
+
- uses: actions/checkout@v3
|
19
|
+
- uses: ruby/setup-ruby@v1
|
20
|
+
with:
|
21
|
+
bundler-cache: true
|
22
|
+
- uses: actions/configure-pages@v3
|
23
|
+
id: pages
|
24
|
+
|
25
|
+
# Build with Parklife and use its GitHub Pages URL (either its custom
|
26
|
+
# domain or username.github.io/repository).
|
27
|
+
- run: bin/static-build --base "${{ steps.pages.outputs.base_url }}"
|
28
|
+
|
29
|
+
- name: Upload artifact
|
30
|
+
uses: actions/upload-pages-artifact@v1
|
31
|
+
if: github.ref == 'refs/heads/main' # Only upload on main branch.
|
32
|
+
with:
|
33
|
+
path: build/
|
34
|
+
|
35
|
+
deploy:
|
36
|
+
environment:
|
37
|
+
name: github-pages
|
38
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
39
|
+
runs-on: ubuntu-latest
|
40
|
+
needs: build
|
41
|
+
if: github.ref == 'refs/heads/main' # Only deploy on main branch.
|
42
|
+
concurrency:
|
43
|
+
group: deploy
|
44
|
+
cancel-in-progress: true
|
45
|
+
steps:
|
46
|
+
- name: Deploy to GitHub Pages
|
47
|
+
id: deployment
|
48
|
+
uses: actions/deploy-pages@v1
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env sh
|
2
|
+
|
3
|
+
set -eu
|
4
|
+
|
5
|
+
<% if options[:rails] -%>
|
6
|
+
# You probably need to run the app in production mode to ensure the correct
|
7
|
+
# asset URLs are referenced.
|
8
|
+
export RAILS_ENV=production
|
9
|
+
export SECRET_KEY_BASE=dummy
|
10
|
+
|
11
|
+
# If your Rails app uses ActiveRecord then this is a good point to create and
|
12
|
+
# seed the database from db/seeds.rb.
|
13
|
+
# bundle exec rails db:setup
|
14
|
+
|
15
|
+
# Generate production-optimised assets with Sprockets and friends. This must be
|
16
|
+
# done before generating the Parklife build as Rails will blow up if it detects
|
17
|
+
# missing assets in production.
|
18
|
+
bundle exec rails assets:precompile
|
19
|
+
|
20
|
+
<% end -%>
|
21
|
+
# Build with Parklife - and forward arguments sent to this script.
|
22
|
+
bundle exec parklife build "$@"
|
23
|
+
|
24
|
+
# Copy all public resources to ./build.
|
25
|
+
cp -R public/* build
|
26
|
+
|
27
|
+
# List all files in the build (useful for debugging).
|
28
|
+
find build -type f | sort
|
data/lib/parklife/utils.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'fileutils'
|
2
4
|
require 'nokogiri'
|
3
5
|
|
@@ -21,6 +23,11 @@ module Parklife
|
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
26
|
+
def host_with_port(uri)
|
27
|
+
default_port = uri.scheme == 'https' ? 443 : 80
|
28
|
+
uri.port == default_port ? uri.host : "#{uri.host}:#{uri.port}"
|
29
|
+
end
|
30
|
+
|
24
31
|
def save_page(path, content, config)
|
25
32
|
build_path = File.join(
|
26
33
|
config.build_dir,
|
data/lib/parklife/version.rb
CHANGED
data/lib/parklife.rb
CHANGED
data/parklife.gemspec
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
lib = File.expand_path('../lib', __FILE__)
|
2
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
5
|
require 'parklife/version'
|
@@ -16,13 +18,16 @@ Gem::Specification.new do |spec|
|
|
16
18
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
17
19
|
spec.metadata = {
|
18
20
|
'changelog_uri' => 'https://github.com/benpickles/parklife/blob/main/CHANGELOG.md',
|
21
|
+
'rubygems_mfa_required' => 'true',
|
19
22
|
'source_code_uri' => 'https://github.com/benpickles/parklife',
|
20
23
|
}
|
21
24
|
|
25
|
+
spec.required_ruby_version = '>= 2.5.0'
|
26
|
+
|
22
27
|
# Specify which files should be added to the gem when it is released.
|
23
28
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
24
29
|
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
25
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(
|
30
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(examples|spec)/}) }
|
26
31
|
end
|
27
32
|
spec.bindir = 'exe'
|
28
33
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
@@ -31,8 +36,4 @@ Gem::Specification.new do |spec|
|
|
31
36
|
spec.add_dependency 'nokogiri'
|
32
37
|
spec.add_dependency 'rack-test'
|
33
38
|
spec.add_dependency 'thor'
|
34
|
-
|
35
|
-
spec.add_development_dependency 'bundler'
|
36
|
-
spec.add_development_dependency 'rake'
|
37
|
-
spec.add_development_dependency 'rspec'
|
38
39
|
end
|