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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bba553a47ad814f379fc05e7b454227e93e43bf4b1fe2ffa2eb95b06e46bb1d9
4
- data.tar.gz: 6aeb8866d0691fb14ff460860a7b0015f7a566042c3c56f00947cce5b691d034
3
+ metadata.gz: 2c4222dd94a2eb9d6d1bfeb4720e3290cede06d8fcd5b26c5f486971ad5637eb
4
+ data.tar.gz: 5b9ede0b2e57e72530407ee918fcfab1eafee4e62d31695d1dc3643408b06bf6
5
5
  SHA512:
6
- metadata.gz: 491b6c004362ee4e46eb7c9ac6165cd7c7c72b7b10250cf8a6a25207e8cf7a31906c8faa41c45ec07d6728d64e1d3b7aa3a1d0490c2f96d9eb83477c9c7b8fe4
7
- data.tar.gz: 02bb49160d57ea8c93d567c20413080420f4295cea46c491b36aca93e25b7d71d0bb37cdcfaec256a8c076c316479d64f957ed3e64384e026f6e32c09b710018
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-2016 Adolfo Villafiorita
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
- # - `data` is the data defined in `_data.yml` of the record for which we are generating a page
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 (datapage_gen). name_expr '#{name_expr}' generated an empty value in record #{data}"
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 (datapage_gen). empty value for field '#{name}' in record #{data}"
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'] = raw_filename
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
- if data.key?('name')
71
- data['_name'] = data['name']
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 ~generate~ loops over _config.yml/page_gen invoking the DataPage
82
- # constructor for each record for which we want to generate a page
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
- # page_gen_dirs determines whether we want to generate index pages
86
- # (name/index.html) or standard files (name.html). This information
87
- # is passed to the DataPage constructor, which sets the @dir variable
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 data for which we want to generate
92
- # the pages (look at the README file for its specification)
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 = data_spec['template'] || data_spec['data']
98
- name = data_spec['name']
99
- name_expr = data_spec['name_expr']
100
- dir = data_spec['dir'] || data_spec['data']
101
- extension = data_spec['extension'] || "html"
102
-
103
- if site.layouts.key? template
104
- # records is the list of records defined in _data.yml
105
- # for which we want to generate different pages
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 { |r| r[data_spec['filter']] } if data_spec['filter']
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.2.0
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-04-16 00:00:00.000000000 Z
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.0.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: []