sitepress-server 0.1.20 → 0.1.21
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/lib/sitepress/helper_loader.rb +37 -0
- data/lib/sitepress/server.rb +31 -0
- data/lib/sitepress-server.rb +46 -32
- data/sitepress-server.gemspec +2 -2
- metadata +11 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ea1399d159fbe7092f1437667333bd5c4c8ceb2
|
4
|
+
data.tar.gz: e5d09019b47a63bd1a3259f07450983432374872
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d742e3d1a6e299ba9ed30836223307a97a897986e04a831e2a5104dbdf86a490d73c36584ebf41a84a53f725e6920de68c60942e936ca995716f4094b252b7c
|
7
|
+
data.tar.gz: 371cbf55936e26d057062e05d395f1ed115db2b2d3ffe360df6a11336a87cb02d49f549c6602b0ef5caae1632ca95bc6dd7e3b751f44a4cc7792b0d96101785b
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Sitepress
|
2
|
+
# Loads modules into an isolated namespace that will be
|
3
|
+
# used for the rendering context. This loader is designed to
|
4
|
+
# be immutable so that it throws away the constants and modules
|
5
|
+
# on each load.
|
6
|
+
#
|
7
|
+
# TODO: Rename this to a RenderingContext, or something.
|
8
|
+
class HelperLoader
|
9
|
+
def initialize(paths:)
|
10
|
+
@paths = Array(paths)
|
11
|
+
end
|
12
|
+
|
13
|
+
def context(locals: {})
|
14
|
+
modules = helpers
|
15
|
+
Object.new.tap do |object|
|
16
|
+
# Locals of rendering context that are accessible from the
|
17
|
+
# helper modules.
|
18
|
+
locals.each do |name, value|
|
19
|
+
object.define_singleton_method(name) { value }
|
20
|
+
end
|
21
|
+
# Include the helper modules of the rendering context.
|
22
|
+
modules.constants.each do |module_name|
|
23
|
+
object.send(:extend, modules.const_get(module_name))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def helpers
|
30
|
+
Module.new.tap do |m|
|
31
|
+
@paths.each do |path|
|
32
|
+
m.module_eval File.read(path)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Sitepress
|
2
|
+
# Run a Sitepress site as a rack app.
|
3
|
+
class Server
|
4
|
+
def initialize(site: )
|
5
|
+
@site = site
|
6
|
+
# TODO: This is in the wrong place. Needs to be configurable by
|
7
|
+
# Sitepress::Site.
|
8
|
+
@helper_paths = Dir.glob(@site.root_path.join("helpers/**.rb"))
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
req = Rack::Request.new(env)
|
13
|
+
resource = @site.get req.path
|
14
|
+
|
15
|
+
if resource
|
16
|
+
# TODO: Lets slim this down a bit.
|
17
|
+
helpers = HelperLoader.new paths: @helper_paths
|
18
|
+
context = helpers.context locals: {
|
19
|
+
current_page: resource, site: @site }
|
20
|
+
renderer = ResourceRenderer.new resource: resource
|
21
|
+
|
22
|
+
mime_type = resource.mime_type.to_s
|
23
|
+
body = renderer.render context: context
|
24
|
+
|
25
|
+
[ 200, {"Content-Type" => mime_type}, Array(body) ]
|
26
|
+
else
|
27
|
+
[ 404, {"Content-Type" => "text/plain"}, ["Not Found"]]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/sitepress-server.rb
CHANGED
@@ -1,52 +1,66 @@
|
|
1
|
-
require "sitepress"
|
1
|
+
require "sitepress-core"
|
2
2
|
require "tilt"
|
3
|
-
require "pathname"
|
4
3
|
|
5
4
|
module Sitepress
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
# TODO: These renderers are confusing. They need to render
|
6
|
+
# a resource, be able to wrap a resource with another resource,
|
7
|
+
# and have rendering partial from within the context of the resource redender.
|
8
|
+
class AssetRenderer
|
9
|
+
def initialize(asset)
|
10
|
+
@asset = asset
|
9
11
|
end
|
10
12
|
|
11
|
-
def render(locals: {}, layout:
|
12
|
-
template = engine.new { @
|
13
|
-
|
13
|
+
def render(locals: {}, layout: nil, context: , &block)
|
14
|
+
template = engine.new { @asset.body }
|
15
|
+
with_layout layout: layout, context: context do
|
16
|
+
template.render(context, **locals, &block)
|
17
|
+
end
|
14
18
|
end
|
15
19
|
|
16
20
|
private
|
21
|
+
def with_layout(layout: , **args, &block)
|
22
|
+
if layout
|
23
|
+
layout_renderer = AssetRenderer.new(layout)
|
24
|
+
layout_renderer.render **args, &block
|
25
|
+
else
|
26
|
+
block.call
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
17
30
|
def engine
|
18
|
-
Tilt[@
|
31
|
+
Tilt[@asset.path]
|
19
32
|
end
|
20
33
|
end
|
21
34
|
|
22
|
-
#
|
23
|
-
class
|
24
|
-
|
35
|
+
# Renders a resource
|
36
|
+
class ResourceRenderer
|
37
|
+
def initialize(resource:)
|
38
|
+
@resource = resource
|
39
|
+
end
|
25
40
|
|
26
|
-
def
|
27
|
-
|
28
|
-
|
41
|
+
def render(context:)
|
42
|
+
if renderable_resource?
|
43
|
+
renderer.render layout: layout, context: context
|
44
|
+
else
|
45
|
+
@resource.body
|
46
|
+
end
|
29
47
|
end
|
30
48
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
49
|
+
private
|
50
|
+
# TODO: Add layout_path to Site#layout_path.
|
51
|
+
def layout
|
52
|
+
@resource.data.has_key?("layout") ? Asset.new(path: @resource.data["layout"]) : nil
|
53
|
+
end
|
36
54
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
# serves this up (or just take that, maybe mount it as a cascading middleware.)
|
41
|
-
resource.body
|
42
|
-
else
|
43
|
-
TiltResourceRenderer.new(resource).render(locals: {resources: resources})
|
44
|
-
end
|
55
|
+
def renderer
|
56
|
+
AssetRenderer.new(@resource.asset)
|
57
|
+
end
|
45
58
|
|
46
|
-
|
47
|
-
|
48
|
-
[ 404, {"Content-Type" => "text/plain"}, ["Not Found"]]
|
49
|
-
end
|
59
|
+
def renderable_resource?
|
60
|
+
@resource.asset.template_extensions.any?
|
50
61
|
end
|
51
62
|
end
|
63
|
+
|
64
|
+
autoload :HelperLoader, "sitepress/helper_loader"
|
65
|
+
autoload :Server, "sitepress/server"
|
52
66
|
end
|
data/sitepress-server.gemspec
CHANGED
@@ -21,6 +21,6 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "rack-test"
|
22
22
|
spec.add_development_dependency "rack"
|
23
23
|
|
24
|
-
spec.add_runtime_dependency "sitepress", spec.version
|
25
|
-
spec.add_runtime_dependency "tilt"
|
24
|
+
spec.add_runtime_dependency "sitepress-core", spec.version
|
25
|
+
spec.add_runtime_dependency "tilt", "~> 2.0"
|
26
26
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sitepress-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brad Gessler
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: haml
|
@@ -53,33 +53,33 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name: sitepress
|
56
|
+
name: sitepress-core
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.1.
|
61
|
+
version: 0.1.21
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.1.
|
68
|
+
version: 0.1.21
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: tilt
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
75
|
+
version: '2.0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
82
|
+
version: '2.0'
|
83
83
|
description:
|
84
84
|
email:
|
85
85
|
- bradgessler@gmail.com
|
@@ -88,6 +88,8 @@ extensions: []
|
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
90
|
- lib/sitepress-server.rb
|
91
|
+
- lib/sitepress/helper_loader.rb
|
92
|
+
- lib/sitepress/server.rb
|
91
93
|
- sitepress-server.gemspec
|
92
94
|
homepage: https://github.com/sitepress/sitepress
|
93
95
|
licenses: []
|