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 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: []