sitepress-rails 3.2.2 → 4.0.0.beta1
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/compiler.rb +96 -46
- data/lib/sitepress/rendition.rb +3 -3
- data/rails/app/controllers/concerns/sitepress/site_pages.rb +17 -8
- data/spec/dummy/log/test.log +36452 -5879
- data/spec/sitepress/compiler_spec.rb +2 -2
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c12aa71c76b0e53a1ddf4ca1b6be9e0e097218bc76f801038b35d390bf509d3c
|
4
|
+
data.tar.gz: '02858bb77cd06f142c9a19cc9c8a072d11491b97175757ad0f8daf8859c230a8'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a31246d3285899bea7595cde279624bc2e3894a211a274c491e834054a9d00ffbd53389a5fcd6e8c7d9c7539405df785289a4438cd7c5ca09a879c005f763185
|
7
|
+
data.tar.gz: a11e604a709e8dbea31410df7f6be34690bd61dc05aa22cee2c6d8dcc57008a75d1c0a02ce2f07a0483dc5b8b2ed3177f54cf27c90aca4f20cc19861488fb24b
|
data/lib/sitepress/compiler.rb
CHANGED
@@ -2,67 +2,117 @@ require "pathname"
|
|
2
2
|
require "fileutils"
|
3
3
|
|
4
4
|
module Sitepress
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
5
|
+
module Compiler
|
6
|
+
class Abstract
|
7
|
+
include Enumerable
|
8
|
+
|
9
|
+
attr_reader :site, :failed, :succeeded
|
10
|
+
|
11
|
+
# If a resource can't render, it will raise an exception and stop the compiler. Sometimes
|
12
|
+
# its useful to turn off errors so you can get through a full compilation and see how many
|
13
|
+
# errors you encounter along the way. To do that, you'd set `fail_on_error` to
|
14
|
+
# `false` and the compile will get through all the resources.
|
15
|
+
attr_accessor :fail_on_error
|
16
|
+
|
17
|
+
def initialize(site:, stdout: $stdout, fail_on_error: false)
|
18
|
+
@site = site
|
19
|
+
@stdout = stdout
|
20
|
+
@fail_on_error = fail_on_error
|
21
|
+
@failed = []
|
22
|
+
@succeeded = []
|
23
|
+
end
|
24
|
+
|
25
|
+
# Iterates through all pages and writes them to disk
|
26
|
+
def compile
|
27
|
+
before_compile
|
28
|
+
each do |resource, *args, **kwargs|
|
29
|
+
if resource.renderable?
|
30
|
+
render_resource(resource, *args, **kwargs)
|
31
|
+
else
|
32
|
+
copy_resource(resource, *args, **kwargs)
|
33
|
+
end
|
34
|
+
@succeeded << resource
|
35
|
+
rescue
|
36
|
+
status "Error building #{resource.inspect}"
|
37
|
+
@failed << resource
|
38
|
+
raise if fail_on_error
|
39
|
+
end
|
40
|
+
after_compile
|
41
|
+
end
|
42
|
+
|
43
|
+
def each(&block)
|
44
|
+
site.resources.each(&block)
|
45
|
+
end
|
46
|
+
|
47
|
+
protected
|
48
|
+
def copy_resource(resource, *args, **kwargs)
|
49
|
+
raise NotImplementedError
|
50
|
+
end
|
51
|
+
|
52
|
+
def render_resource(resource, *args, **kwargs)
|
53
|
+
raise NotImplementedError
|
54
|
+
end
|
55
|
+
|
56
|
+
def before_compile
|
57
|
+
status "Building #{site.root_path.expand_path}"
|
58
|
+
end
|
59
|
+
|
60
|
+
def after_compile
|
61
|
+
status "Built #{site.root_path.expand_path}"
|
62
|
+
end
|
63
|
+
|
64
|
+
def render(resource)
|
65
|
+
Renderers::Server.new(resource).render
|
66
|
+
end
|
67
|
+
|
68
|
+
def status(message)
|
69
|
+
@stdout.puts message
|
70
|
+
end
|
22
71
|
end
|
23
72
|
|
24
|
-
#
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
73
|
+
# Compile all resources from a Sitepress site into static pages.
|
74
|
+
class Files < Abstract
|
75
|
+
include FileUtils
|
76
|
+
|
77
|
+
attr_reader :root_path
|
78
|
+
|
79
|
+
def initialize(*args, root_path:, **kwargs, &block)
|
80
|
+
super(*args, **kwargs, &block)
|
81
|
+
@root_path = Pathname.new(root_path)
|
82
|
+
end
|
83
|
+
|
84
|
+
protected
|
85
|
+
def render_resource(resource, path)
|
29
86
|
status "Rendering #{path}"
|
30
87
|
File.open(path.expand_path, "w"){ |f| f.write render resource }
|
31
|
-
|
88
|
+
end
|
89
|
+
|
90
|
+
def copy_resource(resource, path)
|
32
91
|
status "Copying #{path}"
|
33
92
|
cp resource.asset.path, path.expand_path
|
34
93
|
end
|
35
|
-
rescue
|
36
|
-
status "Error building #{resource.inspect}"
|
37
|
-
raise if raise_exception_on_error
|
38
|
-
end
|
39
|
-
status "Successful build to #{root_path.expand_path}"
|
40
|
-
end
|
41
94
|
|
42
|
-
|
43
|
-
def resources
|
44
|
-
Enumerator.new do |y|
|
95
|
+
def before_compile
|
45
96
|
mkdir_p root_path
|
97
|
+
status "Building #{site.root_path.expand_path} to #{root_path.expand_path}"
|
98
|
+
end
|
46
99
|
|
100
|
+
def after_compile
|
101
|
+
status "Build at #{root_path.expand_path}"
|
102
|
+
end
|
103
|
+
|
104
|
+
def each
|
47
105
|
site.resources.each do |resource|
|
48
106
|
path = build_path resource
|
49
107
|
mkdir_p path.dirname
|
50
|
-
|
108
|
+
yield resource, path
|
51
109
|
end
|
52
110
|
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def build_path(resource)
|
56
|
-
path_builder = resource.node.root? ? BuildPaths::RootPath : BuildPaths::DirectoryIndexPath
|
57
|
-
root_path.join path_builder.new(resource).path
|
58
|
-
end
|
59
111
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
@stdout.puts message
|
66
|
-
end
|
112
|
+
def build_path(resource)
|
113
|
+
path_builder = resource.node.root? ? BuildPaths::RootPath : BuildPaths::DirectoryIndexPath
|
114
|
+
root_path.join path_builder.new(resource).path
|
115
|
+
end
|
116
|
+
end
|
67
117
|
end
|
68
118
|
end
|
data/lib/sitepress/rendition.rb
CHANGED
@@ -3,9 +3,9 @@ module Sitepress
|
|
3
3
|
# lets us keep the functions in the controller more functional, which makes them
|
4
4
|
# easier to override by the end users.
|
5
5
|
class Rendition
|
6
|
-
attr_accessor :resource, :output, :
|
6
|
+
attr_accessor :resource, :output, :layout
|
7
7
|
|
8
|
-
def initialize(resource)
|
8
|
+
def initialize(resource, layout: nil)
|
9
9
|
@resource = resource
|
10
10
|
end
|
11
11
|
|
@@ -22,7 +22,7 @@ module Sitepress
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def layout
|
25
|
-
resource.data.fetch("layout",
|
25
|
+
resource.data.fetch("layout", @layout)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -17,7 +17,7 @@ module Sitepress
|
|
17
17
|
included do
|
18
18
|
rescue_from Sitepress::ResourceNotFound, with: :resource_not_found
|
19
19
|
helper Sitepress::Engine.helpers
|
20
|
-
helper_method :current_page, :site
|
20
|
+
helper_method :current_page, :site, :page_rendition
|
21
21
|
before_action :append_relative_partial_path, only: :show
|
22
22
|
around_action :ensure_site_reload, only: :show
|
23
23
|
end
|
@@ -41,16 +41,25 @@ module Sitepress
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
# Renders the markup within a resource that can be rendered.
|
45
|
+
def page_rendition(resource, layout: nil)
|
46
|
+
Rendition.new(resource).tap do |rendition|
|
47
|
+
rendition.layout = layout
|
48
|
+
pre_render rendition
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
44
52
|
# If a resource has a handler (e.g. erb, haml, etc.) we use the Rails renderer to
|
45
53
|
# process templates, layouts, partials, etc. To keep the whole rendering process
|
46
54
|
# contained in a way that the end user can override, we coupled the resource, source
|
47
55
|
# and output within a `Rendition` object so that it may be processed via hooks.
|
48
56
|
def render_resource_with_handler(resource)
|
49
|
-
rendition =
|
50
|
-
rendition.controller_layout = controller_layout
|
57
|
+
rendition = page_rendition(resource, layout: controller_layout)
|
51
58
|
|
52
|
-
|
59
|
+
# Fire a callback in the controller in case anybody needs it.
|
53
60
|
process_rendition rendition
|
61
|
+
|
62
|
+
# Now we finally render the output of the processed rendition to the client.
|
54
63
|
post_render rendition
|
55
64
|
end
|
56
65
|
|
@@ -162,13 +171,13 @@ module Sitepress
|
|
162
171
|
# and the current page's node formats. If nothing intersects, HTML is returned
|
163
172
|
# as a default.
|
164
173
|
def current_resource_rails_formats
|
165
|
-
|
166
|
-
|
174
|
+
node_formats = current_resource.node.formats
|
175
|
+
supported_formats = node_formats & Mime::EXTENSION_LOOKUP.keys
|
167
176
|
|
168
|
-
if
|
177
|
+
if supported_formats.empty?
|
169
178
|
DEFAULT_PAGE_RAILS_FORMATS
|
170
179
|
else
|
171
|
-
|
180
|
+
supported_formats.map?(&:to_sym)
|
172
181
|
end
|
173
182
|
end
|
174
183
|
|