jekyll-datapage-generator 1.2.0 → 1.3.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/lib/jekyll-datapage-generator.rb +76 -32
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c4222dd94a2eb9d6d1bfeb4720e3290cede06d8fcd5b26c5f486971ad5637eb
|
4
|
+
data.tar.gz: 5b9ede0b2e57e72530407ee918fcfab1eafee4e62d31695d1dc3643408b06bf6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a25d45ab2887639d335c0b9cd693076f6d53ad3a20f35e3beb649fee97484dd65c513271d6c740a48c075fe1549d1a078ecd09a7aaf4780e8721fb465cf93e68
|
7
|
+
data.tar.gz: 945584ac766e1b0dfbb28966a07730a2f6575686b4af130315f1aa4fa0652d1ae33545675fa5f122f3965008389dcb04ff349bdd9f9694b21eb93d9c31c3104e
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
# Generate pages from individual records in yml files
|
3
|
-
# (c) 2014-
|
3
|
+
# (c) 2014-2020 Adolfo Villafiorita
|
4
4
|
# Distributed under the conditions of the MIT License
|
5
5
|
|
6
6
|
module Jekyll
|
@@ -26,15 +26,28 @@ module Jekyll
|
|
26
26
|
#
|
27
27
|
# - `index_files` specifies if we want to generate named folders (true) or not (false)
|
28
28
|
# - `dir` is the default output directory
|
29
|
-
# - `
|
29
|
+
# - `page_data_prefix` is the prefix used to output the page data
|
30
|
+
# - `data` is the data of the record for which we are generating a page
|
30
31
|
# - `name` is the key in `data` which determines the output filename
|
31
32
|
# - `name_expr` is an expression for generating the output filename
|
33
|
+
# - `title` is the key in `data` which determines the page title
|
34
|
+
# - `title_expr` is an expression for generating the page title
|
32
35
|
# - `template` is the name of the template for generating the page
|
33
36
|
# - `extension` is the extension for the generated file
|
34
|
-
def initialize(site, base, index_files, dir, data, name, name_expr, template, extension)
|
37
|
+
def initialize(site, base, index_files, dir, page_data_prefix, data, name, name_expr, title, title_expr, template, extension, debug)
|
35
38
|
@site = site
|
36
39
|
@base = base
|
37
40
|
|
41
|
+
if debug
|
42
|
+
puts "debug (datapage-gen) Record read:"
|
43
|
+
puts ">> #{data}"
|
44
|
+
|
45
|
+
puts "debug (datapage-gen) Configuration variables:"
|
46
|
+
[:index_files, :dir, :page_data_prefix, :name, :name_expr, :title, :title_expr, :template, :extension].each do |variable|
|
47
|
+
puts ">> #{variable}: #{eval(variable.to_s)}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
38
51
|
# @dir is the directory where we want to output the page
|
39
52
|
# @name is the name of the page to generate
|
40
53
|
# @name_expr is an expression for generating the name of the page
|
@@ -45,15 +58,34 @@ module Jekyll
|
|
45
58
|
record = data
|
46
59
|
raw_filename = eval(name_expr)
|
47
60
|
if raw_filename == nil
|
48
|
-
puts "error (
|
61
|
+
puts "error (datapage-gen). name_expr '#{name_expr}' generated an empty value in record #{data}"
|
49
62
|
return
|
50
63
|
end
|
64
|
+
puts "debug (datapage-gen). using name_expr: '#{raw_filename}' (sanitized) will be used as the filename" if debug
|
51
65
|
else
|
52
66
|
raw_filename = data[name]
|
53
67
|
if raw_filename == nil
|
54
|
-
puts "error (
|
68
|
+
puts "error (datapage-gen). empty value for field '#{name}' in record #{data}"
|
69
|
+
return
|
70
|
+
end
|
71
|
+
puts "debug (datapage-gen). using name field: '#{raw_filename}' (sanitized) will be used as the filename" if debug
|
72
|
+
end
|
73
|
+
|
74
|
+
if title_expr
|
75
|
+
record = data
|
76
|
+
raw_title = eval(title_expr)
|
77
|
+
if raw_title == nil
|
78
|
+
puts "error (datapage-gen). title_expr '#{title_expr}' generated an empty value in record #{data}"
|
55
79
|
return
|
56
80
|
end
|
81
|
+
puts "debug (datapage-gen). using title_expr: '#{raw_title}' will be used the page title" if debug
|
82
|
+
else
|
83
|
+
raw_title = data[title]
|
84
|
+
if raw_title == nil
|
85
|
+
raw_title = raw_filename # for backwards compatibility
|
86
|
+
puts "debug (datapage-gen). empty title field: falling back to filename for the page title" if debug
|
87
|
+
end
|
88
|
+
puts "debug (datapage-gen). will use '#{raw_title}' as the page title" if debug
|
57
89
|
end
|
58
90
|
|
59
91
|
filename = sanitize_filename(raw_filename).to_s
|
@@ -63,47 +95,59 @@ module Jekyll
|
|
63
95
|
|
64
96
|
self.process(@name)
|
65
97
|
self.read_yaml(File.join(base, '_layouts'), template + ".html")
|
66
|
-
self.data['title'] =
|
98
|
+
self.data['title'] = raw_title
|
99
|
+
|
67
100
|
# add all the information defined in _data for the current record to the
|
68
101
|
# current page (so that we can access it with liquid tags)
|
69
|
-
|
70
|
-
|
71
|
-
|
102
|
+
if page_data_prefix
|
103
|
+
self.data[page_data_prefix] = data
|
104
|
+
else
|
105
|
+
if data.key?('name')
|
106
|
+
data['_name'] = data['name']
|
107
|
+
end
|
108
|
+
self.data.merge!(data)
|
72
109
|
end
|
73
110
|
|
74
|
-
self.data.merge!(data)
|
75
111
|
end
|
76
112
|
end
|
77
113
|
|
78
114
|
class JekyllDatapageGenerator < Generator
|
79
115
|
safe true
|
80
116
|
|
81
|
-
# the function
|
82
|
-
#
|
117
|
+
# the function =generate= loops over the =_config.yml/page_gen=
|
118
|
+
# specification, determining what sets of pages have to be generated,
|
119
|
+
# reading the data for each set and invoking the =DataPage=
|
120
|
+
# constructor for each record found in the data
|
83
121
|
|
84
122
|
def generate(site)
|
85
|
-
#
|
86
|
-
# (name/index.html) or
|
87
|
-
#
|
88
|
-
# as required by this directive
|
123
|
+
# page_gen-dirs is a global option which determines whether we want to
|
124
|
+
# generate index pages (name/index.html) or HTML files (name.html) for
|
125
|
+
# all sets
|
89
126
|
index_files = site.config['page_gen-dirs'] == true
|
90
127
|
|
91
|
-
# data contains the specification of the
|
92
|
-
#
|
128
|
+
# data contains the specification of all the datasets for which we want
|
129
|
+
# to generate individual pages (look at the README file for its documentation)
|
93
130
|
data = site.config['page_gen']
|
94
131
|
if data
|
95
132
|
data.each do |data_spec|
|
96
133
|
index_files_for_this_data = data_spec['index_files'] != nil ? data_spec['index_files'] : index_files
|
97
|
-
template
|
98
|
-
name
|
99
|
-
name_expr
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
134
|
+
template = data_spec['template'] || data_spec['data']
|
135
|
+
name = data_spec['name']
|
136
|
+
name_expr = data_spec['name_expr']
|
137
|
+
title = data_spec['title']
|
138
|
+
title_expr = data_spec['title_expr']
|
139
|
+
dir = data_spec['dir'] || data_spec['data']
|
140
|
+
extension = data_spec['extension'] || "html"
|
141
|
+
page_data_prefix = data_spec['page_data_prefix']
|
142
|
+
debug = data_spec['debug']
|
143
|
+
|
144
|
+
if not site.layouts.key? template
|
145
|
+
puts "error (datapage-gen). could not find template #{template}. Skipping dataset #{name}."
|
146
|
+
else
|
147
|
+
# records is the list of records for which we want to generate
|
148
|
+
# individual pages
|
106
149
|
records = nil
|
150
|
+
|
107
151
|
data_spec['data'].split('.').each do |level|
|
108
152
|
if records.nil?
|
109
153
|
records = site.data[level]
|
@@ -117,15 +161,15 @@ module Jekyll
|
|
117
161
|
|
118
162
|
# apply filtering conditions:
|
119
163
|
# - filter requires the name of a boolean field
|
120
|
-
# - filter_condition evals a ruby expression
|
121
|
-
records = records.select { |
|
164
|
+
# - filter_condition evals a ruby expression which can use =record= as argument
|
165
|
+
records = records.select { |record| record[data_spec['filter']] } if data_spec['filter']
|
122
166
|
records = records.select { |record| eval(data_spec['filter_condition']) } if data_spec['filter_condition']
|
123
167
|
|
168
|
+
# we now have the list of all records for which we want to generate individual pages
|
169
|
+
# iterate and call the constructor
|
124
170
|
records.each do |record|
|
125
|
-
site.pages << DataPage.new(site, site.source, index_files_for_this_data, dir, record, name, name_expr, template, extension)
|
171
|
+
site.pages << DataPage.new(site, site.source, index_files_for_this_data, dir, page_data_prefix, record, name, name_expr, title, title_expr, template, extension, debug)
|
126
172
|
end
|
127
|
-
else
|
128
|
-
puts "error (datapage_gen). could not find template #{template}" if not site.layouts.key? template
|
129
173
|
end
|
130
174
|
end
|
131
175
|
end
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-datapage-generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adolfo Villafiorita
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description:
|
13
|
+
description:
|
14
14
|
email:
|
15
15
|
- adolfo.villafiorita@ict4g.net
|
16
16
|
executables: []
|
@@ -18,12 +18,12 @@ extensions: []
|
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
20
|
- lib/jekyll-datapage-generator.rb
|
21
|
-
homepage:
|
21
|
+
homepage:
|
22
22
|
licenses:
|
23
23
|
- MIT
|
24
24
|
metadata:
|
25
25
|
source_code_uri: https://github.com/avillafiorita/jekyll-datapage_gen
|
26
|
-
post_install_message:
|
26
|
+
post_install_message:
|
27
27
|
rdoc_options: []
|
28
28
|
require_paths:
|
29
29
|
- lib
|
@@ -38,8 +38,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: '0'
|
40
40
|
requirements: []
|
41
|
-
rubygems_version: 3.
|
42
|
-
signing_key:
|
41
|
+
rubygems_version: 3.1.2
|
42
|
+
signing_key:
|
43
43
|
specification_version: 4
|
44
44
|
summary: Generate one page per yaml record in Jekyll sites.
|
45
45
|
test_files: []
|