jekyll-datapage-generator 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|