inert 0.1.0 → 0.2.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/README.md +99 -0
- data/exe/inert +8 -1
- data/lib/inert.rb +15 -6
- data/lib/inert/builder.rb +2 -1
- data/lib/inert/config.rb +67 -0
- data/lib/inert/middleware.rb +14 -4
- data/lib/inert/page.rb +13 -4
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f79a5379e8bc3c2efef1112aa3594a0d21c5ebd2
|
4
|
+
data.tar.gz: dac79be86b3228b75c50344d97a1af2131efa962
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 958d318d85847d81d45b76d7e2a42f2e6b8d437b0dc1fa896676ddd0e4ae4603fa9aac2bdf575fd53cc02f2751276d5374bb3aebfdbaae83165c9c79ef4a3194
|
7
|
+
data.tar.gz: 96b3d288ead98c0e282eddec337bcd01de90d32a8c1eff0ad11b86ea09d5860c6dd28fe01b4eb621e47b6c2b6cd24ffe0e472248a254e82102d0b5761bcf5552
|
data/README.md
CHANGED
@@ -8,6 +8,105 @@ An experimental static site builder with unambitious goals.
|
|
8
8
|
- Allow reading of YAML frontmatter
|
9
9
|
- Allow queueing of manual URLs for preservation
|
10
10
|
|
11
|
+
|
12
|
+
## Usage
|
13
|
+
|
14
|
+
Install the gem:
|
15
|
+
|
16
|
+
gem install inert
|
17
|
+
|
18
|
+
Create a few folders:
|
19
|
+
|
20
|
+
mkdir static views
|
21
|
+
|
22
|
+
And a layout file:
|
23
|
+
|
24
|
+
echo "<%= yield %>" > views/layout.erb
|
25
|
+
|
26
|
+
And then start the Inert server:
|
27
|
+
|
28
|
+
inert
|
29
|
+
|
30
|
+
When you're ready to deploy, build the site:
|
31
|
+
|
32
|
+
inert build
|
33
|
+
|
34
|
+
## Configuring
|
35
|
+
|
36
|
+
By default, Inert expects a few things, and should work without configuration.
|
37
|
+
Because it's built on top of Roda, it's very easily extendable, and Inert
|
38
|
+
provides hooks to do this via the `Inertfile` it will read from your project
|
39
|
+
root at runtime.
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
# Inertfile
|
43
|
+
Inert.config do |inert|
|
44
|
+
inert.helpers do
|
45
|
+
def generator
|
46
|
+
"Inert v#{Inert::VERSION}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
inert.app do
|
51
|
+
plugin :h
|
52
|
+
end
|
53
|
+
|
54
|
+
inert.routes do |r|
|
55
|
+
r.on "employees.html" do
|
56
|
+
@employees = [] # Read in actual data here
|
57
|
+
view("employees.html.erb")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
```
|
62
|
+
|
63
|
+
## Asset Fingerprinting
|
64
|
+
|
65
|
+
Use asset fingerprinting to enable max-cache times on all your static assets.
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
# Inertfile
|
69
|
+
Inert.config do |inert|
|
70
|
+
inert.app do
|
71
|
+
plugin :timestamp_public
|
72
|
+
end
|
73
|
+
|
74
|
+
inert.routes do |r|
|
75
|
+
r.timestamp_public
|
76
|
+
end
|
77
|
+
end
|
78
|
+
```
|
79
|
+
|
80
|
+
And inside your views, use the `timestamp_path` helper with the name of the file
|
81
|
+
in `static/` wherever you'd just use the filename itself:
|
82
|
+
|
83
|
+
```ruby
|
84
|
+
<img src="<%= timestamp_path "some_image_in_static_folder.png" %>">
|
85
|
+
```
|
86
|
+
|
87
|
+
## Live Reloads
|
88
|
+
|
89
|
+
Use the `roda-live_reload` gem to enable live reloads:
|
90
|
+
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
# Gemfile
|
94
|
+
gem "roda-live_reload"
|
95
|
+
gem "puma" # Webrick wont' currently work with roda-live_reload
|
96
|
+
|
97
|
+
|
98
|
+
# Inertfile
|
99
|
+
Inert.config do |inert|
|
100
|
+
inert.app do
|
101
|
+
plugin :live_reload if ENV["RACK_ENV"] == "development"
|
102
|
+
end
|
103
|
+
|
104
|
+
inert.routes do |r|
|
105
|
+
r.live_reload if ENV["RACK_ENV"] == "development"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
```
|
109
|
+
|
11
110
|
## Contributing
|
12
111
|
|
13
112
|
Bug reports and pull requests are welcome on GitHub at https://github.com/adam12/inert.
|
data/exe/inert
CHANGED
@@ -1,11 +1,18 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require "inert"
|
2
|
+
require "inert/config"
|
3
|
+
|
4
|
+
inertfile = File.join(Dir.pwd, "Inertfile")
|
5
|
+
if File.exist?(inertfile)
|
6
|
+
load inertfile
|
7
|
+
end
|
3
8
|
|
4
9
|
case ARGV[0]
|
5
10
|
when "build"
|
6
11
|
ENV["RACK_ENV"] = "production"
|
12
|
+
require "inert"
|
7
13
|
Inert.build
|
8
14
|
else
|
9
15
|
ENV["RACK_ENV"] = "development"
|
16
|
+
require "inert"
|
10
17
|
Inert.start
|
11
18
|
end
|
data/lib/inert.rb
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require_relative "inert/
|
3
|
-
require_relative "inert/builder"
|
4
|
-
require_relative "inert/middleware"
|
2
|
+
require_relative "inert/config"
|
5
3
|
|
6
4
|
module Inert
|
7
5
|
module_function
|
8
6
|
|
9
7
|
def start
|
10
|
-
app =
|
8
|
+
app = Rack::Builder.app do
|
9
|
+
if ENV["RACK_ENV"] != "production"
|
10
|
+
use Rack::ShowExceptions
|
11
|
+
use Rack::CommonLogger
|
12
|
+
end
|
11
13
|
|
12
|
-
|
13
|
-
app = Rack::ShowExceptions.new(app)
|
14
|
+
run Inert::Middleware
|
14
15
|
end
|
15
16
|
|
16
17
|
Rack::Server.start(app: app)
|
@@ -19,4 +20,12 @@ module Inert
|
|
19
20
|
def build
|
20
21
|
Inert::Builder.new(Inert::Middleware).call("/")
|
21
22
|
end
|
23
|
+
|
24
|
+
def view_path
|
25
|
+
File.expand_path(Inert.config.views, Dir.pwd)
|
26
|
+
end
|
22
27
|
end
|
28
|
+
|
29
|
+
require_relative "inert/page"
|
30
|
+
require_relative "inert/builder"
|
31
|
+
require_relative "inert/middleware"
|
data/lib/inert/builder.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require "fileutils"
|
3
3
|
require "set"
|
4
4
|
require "oga"
|
5
|
+
require "uri"
|
5
6
|
|
6
7
|
module Inert
|
7
8
|
class Builder
|
@@ -30,7 +31,7 @@ module Inert
|
|
30
31
|
warn "Saving #{url}"
|
31
32
|
request = Rack::MockRequest.new(app)
|
32
33
|
|
33
|
-
dest = url.dup
|
34
|
+
dest = URI(url.dup).path
|
34
35
|
dest << "index.html" if dest.end_with?("/")
|
35
36
|
dest << ".html" unless dest =~ /\.\w+$/
|
36
37
|
dest = File.expand_path(dest[1..-1], build_path)
|
data/lib/inert/config.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Inert
|
3
|
+
# Configure your Inert build by creating an Inertfile in the project root,
|
4
|
+
# and call Inert.config with a block which receives the inert config instance.
|
5
|
+
#
|
6
|
+
# This config instance allows you to access the Roda application underneath,
|
7
|
+
# configuring plugins, helpers, and adding routes that run prior to the catch-all.
|
8
|
+
#
|
9
|
+
# Inert.config do |inert|
|
10
|
+
# inert.helpers do
|
11
|
+
# def generator
|
12
|
+
# "Inert v#{Inert::VERSION}"
|
13
|
+
# end
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# inert.app do
|
17
|
+
# plugin :h
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# inert.routes do |r|
|
21
|
+
# r.on "employees.html" do
|
22
|
+
# @employees = [] # Read in actual data here
|
23
|
+
# view("employees.html.erb")
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
class Config
|
28
|
+
# Folder containing your pages or view files.
|
29
|
+
attr_accessor :views
|
30
|
+
|
31
|
+
def initialize
|
32
|
+
@app = proc{}
|
33
|
+
@helpers = proc{}
|
34
|
+
@routes = proc{}
|
35
|
+
@views = "views"
|
36
|
+
end
|
37
|
+
|
38
|
+
# Helpers to make available in your views.
|
39
|
+
# Pass a module to be included, or a block to be evaluates.
|
40
|
+
def helpers(value=nil, &block)
|
41
|
+
@helpers = ->{ include value } if value
|
42
|
+
@helpers = block if block_given?
|
43
|
+
@helpers
|
44
|
+
end
|
45
|
+
|
46
|
+
# Configuration changes on the underlying Roda app.
|
47
|
+
# Pass a block which will be class evaled.
|
48
|
+
def app(&block)
|
49
|
+
return @app unless block_given?
|
50
|
+
@app = block
|
51
|
+
end
|
52
|
+
|
53
|
+
# Extra routes that run before the catch-all route (but after the assets route).
|
54
|
+
# Pass a block which will be instance evaluated.
|
55
|
+
def routes(&block)
|
56
|
+
return @routes unless block_given?
|
57
|
+
@routes = block
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
module_function
|
62
|
+
def config
|
63
|
+
@config ||= Config.new
|
64
|
+
yield @config if block_given?
|
65
|
+
@config
|
66
|
+
end
|
67
|
+
end
|
data/lib/inert/middleware.rb
CHANGED
@@ -3,31 +3,41 @@ require "roda"
|
|
3
3
|
|
4
4
|
module Inert
|
5
5
|
class Middleware < Roda
|
6
|
-
plugin :render,
|
6
|
+
plugin :render,
|
7
|
+
cache: ENV["RACK_ENV"] == "production",
|
8
|
+
views: Inert.config.views
|
9
|
+
|
7
10
|
plugin :partials
|
8
11
|
plugin :public, root: "static"
|
12
|
+
plugin :content_for
|
13
|
+
|
14
|
+
class_exec &Inert.config.app
|
9
15
|
|
10
16
|
attr_reader :page
|
11
17
|
|
12
18
|
route do |r|
|
13
19
|
r.public
|
14
20
|
|
21
|
+
Inert.config.routes.call(r)
|
22
|
+
|
15
23
|
view_file = r.remaining_path.dup
|
16
24
|
view_file << "index.html" if view_file.end_with?("/")
|
17
25
|
|
18
26
|
begin
|
19
|
-
page = Page.load_from_file(
|
27
|
+
page = Page.load_from_file(File.join(Inert.view_path, view_file))
|
20
28
|
rescue Errno::ENOENT
|
21
29
|
r.halt([404, {}, ["Not found"]])
|
22
30
|
end
|
23
31
|
|
24
32
|
@page = page.frontmatter
|
25
33
|
|
26
|
-
view(inline: page.body, layout: page.layout)
|
34
|
+
view(inline: page.body, layout: page.layout, template_class: Tilt[page.filename])
|
27
35
|
end
|
28
36
|
|
37
|
+
class_exec &Inert.config.helpers
|
38
|
+
|
29
39
|
def inline(file)
|
30
|
-
File.read(
|
40
|
+
File.read(File.join(Inert.view_path, file))
|
31
41
|
end
|
32
42
|
end
|
33
43
|
end
|
data/lib/inert/page.rb
CHANGED
@@ -4,17 +4,22 @@ require "ostruct"
|
|
4
4
|
|
5
5
|
module Inert
|
6
6
|
class Page
|
7
|
-
attr_reader :body, :frontmatter, :layout
|
7
|
+
attr_reader :body, :frontmatter, :layout, :filename
|
8
8
|
|
9
|
-
def initialize(body: "", frontmatter: {})
|
9
|
+
def initialize(body: "", frontmatter: {}, filename: nil)
|
10
10
|
@body = body
|
11
11
|
@frontmatter = frontmatter
|
12
|
-
@layout = @frontmatter.delete(
|
12
|
+
@layout = @frontmatter.delete("layout") || "layout"
|
13
|
+
@filename = filename
|
13
14
|
|
14
15
|
@frontmatter = OpenStruct.new(@frontmatter)
|
15
16
|
end
|
16
17
|
|
17
18
|
def self.load_from_file(filename)
|
19
|
+
filename = find_file(filename)
|
20
|
+
|
21
|
+
raise Errno::ENOENT if filename.nil?
|
22
|
+
|
18
23
|
body = File.read(filename)
|
19
24
|
frontmatter = {}
|
20
25
|
|
@@ -23,7 +28,11 @@ module Inert
|
|
23
28
|
""
|
24
29
|
end.lstrip
|
25
30
|
|
26
|
-
new(body: body, frontmatter: frontmatter)
|
31
|
+
new(body: body, frontmatter: frontmatter, filename: filename)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.find_file(filename)
|
35
|
+
Dir[filename + ".*"].first
|
27
36
|
end
|
28
37
|
end
|
29
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inert
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Daniels
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: roda
|
@@ -81,6 +81,7 @@ files:
|
|
81
81
|
- exe/inert
|
82
82
|
- lib/inert.rb
|
83
83
|
- lib/inert/builder.rb
|
84
|
+
- lib/inert/config.rb
|
84
85
|
- lib/inert/middleware.rb
|
85
86
|
- lib/inert/page.rb
|
86
87
|
homepage: https://github.com/adam12/inert
|