dimples 4.3.2 → 5.0.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 +5 -5
- data/bin/dimples +11 -31
- data/lib/dimples.rb +4 -15
- data/lib/dimples/category.rb +3 -3
- data/lib/dimples/configuration.rb +32 -48
- data/lib/dimples/errors.rb +5 -7
- data/lib/dimples/frontable.rb +8 -13
- data/lib/dimples/page.rb +40 -34
- data/lib/dimples/pager.rb +80 -0
- data/lib/dimples/plugin.rb +40 -0
- data/lib/dimples/post.rb +14 -30
- data/lib/dimples/renderer.rb +48 -0
- data/lib/dimples/site.rb +180 -201
- data/lib/dimples/template.rb +10 -9
- data/lib/dimples/version.rb +1 -1
- metadata +41 -29
- data/lib/dimples/logger.rb +0 -33
- data/lib/dimples/pagination.rb +0 -112
- data/lib/dimples/renderable.rb +0 -50
data/lib/dimples/template.rb
CHANGED
@@ -1,27 +1,28 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Dimples
|
4
|
-
# A class that models a single template.
|
5
4
|
class Template
|
6
5
|
include Frontable
|
7
|
-
include Renderable
|
8
6
|
|
9
7
|
attr_accessor :path
|
10
|
-
attr_accessor :title
|
11
|
-
attr_accessor :slug
|
12
|
-
attr_accessor :layout
|
13
8
|
attr_accessor :contents
|
9
|
+
attr_accessor :metadata
|
14
10
|
|
15
11
|
def initialize(site, path)
|
16
12
|
@site = site
|
17
|
-
@slug = File.basename(path, File.extname(path))
|
18
13
|
@path = path
|
14
|
+
@contents, @metadata = read_with_front_matter(path)
|
15
|
+
end
|
19
16
|
|
20
|
-
|
17
|
+
def render(context = {}, body = nil)
|
18
|
+
context[:template] ||= Hashie::Mash.new(@metadata)
|
19
|
+
renderer.render(context, body)
|
21
20
|
end
|
22
21
|
|
23
|
-
|
24
|
-
|
22
|
+
private
|
23
|
+
|
24
|
+
def renderer
|
25
|
+
@renderer ||= Renderer.new(@site, self)
|
25
26
|
end
|
26
27
|
end
|
27
28
|
end
|
data/lib/dimples/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dimples
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Bogan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: hashie
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.5'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 3.5.7
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.5'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.5.7
|
13
33
|
- !ruby/object:Gem::Dependency
|
14
34
|
name: tilt
|
15
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -73,61 +93,53 @@ dependencies:
|
|
73
93
|
- !ruby/object:Gem::Version
|
74
94
|
version: '2.7'
|
75
95
|
- !ruby/object:Gem::Dependency
|
76
|
-
name:
|
96
|
+
name: rake
|
77
97
|
requirement: !ruby/object:Gem::Requirement
|
78
98
|
requirements:
|
79
99
|
- - "~>"
|
80
100
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
101
|
+
version: '10.0'
|
82
102
|
type: :development
|
83
103
|
prerelease: false
|
84
104
|
version_requirements: !ruby/object:Gem::Requirement
|
85
105
|
requirements:
|
86
106
|
- - "~>"
|
87
107
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
108
|
+
version: '10.0'
|
89
109
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
110
|
+
name: redcarpet
|
91
111
|
requirement: !ruby/object:Gem::Requirement
|
92
112
|
requirements:
|
93
113
|
- - "~>"
|
94
114
|
- !ruby/object:Gem::Version
|
95
|
-
version: '
|
115
|
+
version: '3.3'
|
96
116
|
type: :development
|
97
117
|
prerelease: false
|
98
118
|
version_requirements: !ruby/object:Gem::Requirement
|
99
119
|
requirements:
|
100
120
|
- - "~>"
|
101
121
|
- !ruby/object:Gem::Version
|
102
|
-
version: '
|
122
|
+
version: '3.3'
|
103
123
|
- !ruby/object:Gem::Dependency
|
104
|
-
name:
|
124
|
+
name: rspec
|
105
125
|
requirement: !ruby/object:Gem::Requirement
|
106
126
|
requirements:
|
107
127
|
- - "~>"
|
108
128
|
- !ruby/object:Gem::Version
|
109
|
-
version: '
|
110
|
-
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
113
|
-
requirements:
|
114
|
-
- - "~>"
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: '10.0'
|
117
|
-
- !ruby/object:Gem::Dependency
|
118
|
-
name: redcarpet
|
119
|
-
requirement: !ruby/object:Gem::Requirement
|
120
|
-
requirements:
|
121
|
-
- - "~>"
|
129
|
+
version: '3.7'
|
130
|
+
- - ">="
|
122
131
|
- !ruby/object:Gem::Version
|
123
|
-
version:
|
132
|
+
version: 3.7.0
|
124
133
|
type: :development
|
125
134
|
prerelease: false
|
126
135
|
version_requirements: !ruby/object:Gem::Requirement
|
127
136
|
requirements:
|
128
137
|
- - "~>"
|
129
138
|
- !ruby/object:Gem::Version
|
130
|
-
version: '3.
|
139
|
+
version: '3.7'
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 3.7.0
|
131
143
|
- !ruby/object:Gem::Dependency
|
132
144
|
name: simplecov
|
133
145
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,7 +168,7 @@ dependencies:
|
|
156
168
|
- - "~>"
|
157
169
|
- !ruby/object:Gem::Version
|
158
170
|
version: 0.9.1
|
159
|
-
description: A
|
171
|
+
description: A simple tool for building static websites.
|
160
172
|
email:
|
161
173
|
- d+dimples@waferbaby.com
|
162
174
|
executables:
|
@@ -170,11 +182,11 @@ files:
|
|
170
182
|
- lib/dimples/configuration.rb
|
171
183
|
- lib/dimples/errors.rb
|
172
184
|
- lib/dimples/frontable.rb
|
173
|
-
- lib/dimples/logger.rb
|
174
185
|
- lib/dimples/page.rb
|
175
|
-
- lib/dimples/
|
186
|
+
- lib/dimples/pager.rb
|
187
|
+
- lib/dimples/plugin.rb
|
176
188
|
- lib/dimples/post.rb
|
177
|
-
- lib/dimples/
|
189
|
+
- lib/dimples/renderer.rb
|
178
190
|
- lib/dimples/site.rb
|
179
191
|
- lib/dimples/template.rb
|
180
192
|
- lib/dimples/version.rb
|
@@ -198,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
198
210
|
version: '0'
|
199
211
|
requirements: []
|
200
212
|
rubyforge_project:
|
201
|
-
rubygems_version: 2.6
|
213
|
+
rubygems_version: 2.7.6
|
202
214
|
signing_key:
|
203
215
|
specification_version: 4
|
204
216
|
summary: A basic static site generator
|
data/lib/dimples/logger.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Dimples
|
4
|
-
# A simple Logger subclass.
|
5
|
-
class Logger < ::Logger
|
6
|
-
def initialize(*)
|
7
|
-
super
|
8
|
-
@formatter = LogFormatter
|
9
|
-
end
|
10
|
-
|
11
|
-
def debug_generation(type, count)
|
12
|
-
message = "Generating #{type} (#{count} item"
|
13
|
-
message += 's' if count != 1
|
14
|
-
message += ')...'
|
15
|
-
|
16
|
-
debug(message)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# A simple Logger formatting subclass.
|
21
|
-
class LogFormatter < Logger::Formatter
|
22
|
-
def self.call(severity, _time, _program_name, message)
|
23
|
-
case severity
|
24
|
-
when 'ERROR'
|
25
|
-
prefix = "\033[31mError:\033[0m "
|
26
|
-
when 'DEBUG'
|
27
|
-
prefix = "\033[93m- "
|
28
|
-
end
|
29
|
-
|
30
|
-
"#{prefix}#{message}\033[0m\n"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/lib/dimples/pagination.rb
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Dimples
|
4
|
-
# A module that supports pagination.
|
5
|
-
module Pagination
|
6
|
-
def paginate(site, items, path, layout, options = {})
|
7
|
-
context = options.delete(:context) || {}
|
8
|
-
url = path.sub(site.output_paths[:site], '') + '/'
|
9
|
-
per_page = options.delete(:per_page) ||
|
10
|
-
site.config[:pagination][:per_page]
|
11
|
-
|
12
|
-
pager = Pager.new(url, items, per_page, options)
|
13
|
-
|
14
|
-
pager.each do |index, page_items|
|
15
|
-
page = Dimples::Page.new(site)
|
16
|
-
|
17
|
-
page.output_directory = if index == 1
|
18
|
-
path
|
19
|
-
else
|
20
|
-
File.join(path, "page#{index}")
|
21
|
-
end
|
22
|
-
|
23
|
-
page.layout = layout
|
24
|
-
page.title = options[:title] || site.templates[layout]&.title
|
25
|
-
page.extension = options[:extension] if options[:extension]
|
26
|
-
|
27
|
-
context[:items] = page_items
|
28
|
-
context[:pagination] = pager.to_h
|
29
|
-
|
30
|
-
page.write(context)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
# A class that models the context of a single page during pagination.
|
35
|
-
class Pager
|
36
|
-
include Enumerable
|
37
|
-
|
38
|
-
attr_reader :current_page
|
39
|
-
attr_reader :previous_page
|
40
|
-
attr_reader :next_page
|
41
|
-
attr_reader :page_count
|
42
|
-
attr_reader :item_count
|
43
|
-
|
44
|
-
def initialize(url, items, per_page, options = {})
|
45
|
-
@url = url
|
46
|
-
@items = items
|
47
|
-
@per_page = per_page
|
48
|
-
@page_count = (items.length.to_f / per_page.to_i).ceil
|
49
|
-
@page_prefix = options[:page_prefix] || 'page'
|
50
|
-
|
51
|
-
step_to(1)
|
52
|
-
end
|
53
|
-
|
54
|
-
def each(&block)
|
55
|
-
(1..@page_count).each do |index|
|
56
|
-
block.yield step_to(index), items_at(index)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def step_to(page)
|
61
|
-
@current_page = (1..@page_count).cover?(page) ? page : 1
|
62
|
-
@previous_page = (@current_page - 1).positive? ? @current_page - 1 : nil
|
63
|
-
@next_page = @current_page + 1 <= @page_count ? @current_page + 1 : nil
|
64
|
-
|
65
|
-
@current_page
|
66
|
-
end
|
67
|
-
|
68
|
-
def items_at(page)
|
69
|
-
@items.slice((page - 1) * @per_page, @per_page)
|
70
|
-
end
|
71
|
-
|
72
|
-
def current_page_url
|
73
|
-
@current_page != 1 ? "#{@url}#{@page_prefix}#{@current_page}" : @url
|
74
|
-
end
|
75
|
-
|
76
|
-
def first_page_url
|
77
|
-
@url
|
78
|
-
end
|
79
|
-
|
80
|
-
def last_page_url
|
81
|
-
@page_count != 1 ? "#{@url}#{@page_prefix}#{@page_count}" : @url
|
82
|
-
end
|
83
|
-
|
84
|
-
def previous_page_url
|
85
|
-
return unless @previous_page
|
86
|
-
@previous_page != 1 ? "#{@url}#{@page_prefix}#{@previous_page}" : @url
|
87
|
-
end
|
88
|
-
|
89
|
-
def next_page_url
|
90
|
-
"#{@url}#{@page_prefix}#{@next_page}" if @next_page
|
91
|
-
end
|
92
|
-
|
93
|
-
def to_h
|
94
|
-
{
|
95
|
-
url: @url,
|
96
|
-
current_page: @current_page,
|
97
|
-
page_count: @page_count,
|
98
|
-
item_count: @items.count,
|
99
|
-
previous_page: @previous_page,
|
100
|
-
next_page: @next_page,
|
101
|
-
links: {
|
102
|
-
current_page: current_page_url,
|
103
|
-
first_page: first_page_url,
|
104
|
-
last_page: last_page_url,
|
105
|
-
previous_page: previous_page_url,
|
106
|
-
next_page: next_page_url
|
107
|
-
}
|
108
|
-
}
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
data/lib/dimples/renderable.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Dimples
|
4
|
-
# A mixin class that allows a document to render via Tilt.
|
5
|
-
module Renderable
|
6
|
-
attr_accessor :rendered_contents
|
7
|
-
|
8
|
-
def render(context = {}, body = nil)
|
9
|
-
context[:site] ||= @site
|
10
|
-
context[:this] ||= self
|
11
|
-
context[:type] ||= self.class.name.split('::').last.downcase.to_sym
|
12
|
-
|
13
|
-
output = rendering_engine.render(scope(context)) { body }.strip
|
14
|
-
@rendered_contents = output
|
15
|
-
|
16
|
-
if @site.templates[layout]
|
17
|
-
@site.templates[layout].render(context, output)
|
18
|
-
else
|
19
|
-
output
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def scope(context)
|
24
|
-
Object.new.tap do |scope|
|
25
|
-
context.each_pair do |key, value|
|
26
|
-
scope.instance_variable_set("@#{key}".to_sym, value)
|
27
|
-
end
|
28
|
-
|
29
|
-
method_name = :render_template
|
30
|
-
scope.class.send(:define_method, method_name) do |template, locals = {}|
|
31
|
-
@site.templates[template]&.render(locals)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def rendering_engine
|
37
|
-
@rendering_engine ||= begin
|
38
|
-
callback = proc { contents }
|
39
|
-
|
40
|
-
if @path
|
41
|
-
extension = File.extname(@path)[1..-1]
|
42
|
-
options = @site.config[:rendering][extension.to_sym] || {}
|
43
|
-
Tilt.new(@path, options, &callback)
|
44
|
-
else
|
45
|
-
Tilt::StringTemplate.new(&callback)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|