pagemaster 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/pagemaster.rb +103 -0
- metadata +58 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 85693645a299d6fdaf96300cac4bb14965a30ec8
|
4
|
+
data.tar.gz: 5ded4953bc2f0f3fb9a44766c0074dbf8b9e58e3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d684b86103dc4dbb49e5d019c6a69ae1d4b1b121fa5813ce216fb1b9d3831baa7108f2eeca0e5590967208e1a4574cf5f8583078aba54d035c8bc42ea5d2923d
|
7
|
+
data.tar.gz: 077cc16aa4c5a9b51540b88d979ab517aeff689f70720d9da1c72495d70bc29b2f185e72294241154300180d48506cdf222eb5b8834100d298d35f2770efb89a
|
data/lib/pagemaster.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'csv'
|
3
|
+
|
4
|
+
Jekyll::Hooks.register :site, :after_reset do |site| # when site is re/built
|
5
|
+
|
6
|
+
for collection in site.collections
|
7
|
+
collection = collection[1]
|
8
|
+
if collection.metadata["output"] && collection.metadata["pm_generate"]
|
9
|
+
|
10
|
+
# grab collection variables from config
|
11
|
+
@input = collection.metadata["pm_input"].to_s
|
12
|
+
@dir = collection.metadata["pm_directory"].to_s
|
13
|
+
@name_key = collection.metadata["pm_key"].to_s
|
14
|
+
@src = collection.metadata["pm_source"].to_s
|
15
|
+
@layout = collection.metadata["pm_layout"].to_s
|
16
|
+
|
17
|
+
@layout ||= @src
|
18
|
+
@src = @src + "." + @input
|
19
|
+
|
20
|
+
# check if input is csv or yaml
|
21
|
+
unless @input == 'yaml' or @input == 'csv'
|
22
|
+
raise "pagemaster :: Input must be 'csv' or 'yaml'."
|
23
|
+
end
|
24
|
+
|
25
|
+
# check usability of dir name. gsub alphanumerics to (especially) avoid leading double underscores. then make directory.
|
26
|
+
if @dir.empty?
|
27
|
+
raise "pagemaster :: Target directory is undefined or unusable. Cannot generate pages. Specify dir in config and rebuild."
|
28
|
+
else
|
29
|
+
@targetdir = "_" + @dir.downcase.gsub(/[^\0-9a-z]/, '').to_s
|
30
|
+
FileUtils::mkdir_p @targetdir
|
31
|
+
puts ">> pagemaster :: Made directory " + @targetdir + " in root."
|
32
|
+
end
|
33
|
+
|
34
|
+
# check usability of name_key, to be used later when naming generated pages
|
35
|
+
if @name_key.empty?
|
36
|
+
raise "pagemaster :: pm_key is undefined or unusable. Cannot generate pages. Specify pm_key in config and rebuild."
|
37
|
+
end
|
38
|
+
|
39
|
+
def ingest(src) # takes + opens src file
|
40
|
+
begin
|
41
|
+
puts ">> pagemaster :: Loaded " + src + "."
|
42
|
+
if @input == 'yaml'
|
43
|
+
return YAML.load_file('_data/' + src)
|
44
|
+
else
|
45
|
+
return CSV.read('_data/' + src, :headers => true).map(&:to_hash)
|
46
|
+
end
|
47
|
+
rescue
|
48
|
+
raise "pagemaster :: Cannot load " + src + ". Check for typos and rebuild."
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def uniqify(hashes, key) # takes opened src file as hash array
|
53
|
+
occurences = {} # hash list of slug names and # of occurences
|
54
|
+
hashes.each do |item|
|
55
|
+
if item[key].nil?
|
56
|
+
raise "pagemaster :: Source file has at least one missing value for pm_key='" + key + "'. Cannot generate page."
|
57
|
+
end
|
58
|
+
new_name = item[key].downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '').gsub(/-+/, '-') # gsub for slug
|
59
|
+
if occurences.has_key? new_name
|
60
|
+
occurences[new_name]+=1
|
61
|
+
safe_slug = new_name + "-" + occurences[new_name].to_s
|
62
|
+
else
|
63
|
+
occurences.store(new_name, 1)
|
64
|
+
safe_slug = new_name
|
65
|
+
end
|
66
|
+
item.store("slug", safe_slug)
|
67
|
+
end
|
68
|
+
return hashes # return changed yml array with unique, slugified names added
|
69
|
+
end
|
70
|
+
|
71
|
+
# ingest data source, sort it and generate unique titles
|
72
|
+
data = uniqify(ingest(@src), @name_key)
|
73
|
+
|
74
|
+
# keep track of (valid) pages generated vs. (untitled, nonunique) pages skipped.
|
75
|
+
untitled, nonunique, valid = 0, 0, 0
|
76
|
+
|
77
|
+
# make pages
|
78
|
+
data.each do |item|
|
79
|
+
pagename = item["slug"]
|
80
|
+
pagepath = @targetdir + "/" + pagename + ".md"
|
81
|
+
layout_str = ""
|
82
|
+
unless @layout.empty?
|
83
|
+
layout_str = "layout: " + @layout
|
84
|
+
end
|
85
|
+
if pagename.empty?
|
86
|
+
puts ">> pagemaster :: Title for item is unspecified. Cannot generate page."
|
87
|
+
untitled+=1
|
88
|
+
elsif !File.exist?(pagepath)
|
89
|
+
File.open(pagepath, 'w') { |file| file.write( item.to_yaml.to_s + layout_str + "\n---" ) }
|
90
|
+
valid+=1
|
91
|
+
else
|
92
|
+
puts ">> pagemaster :: " + pagename + ".md already exits."
|
93
|
+
nonunique+=1
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
# log outcomes
|
98
|
+
puts ">> pagemaster :: " + valid.to_s + " pages were generated from " + @src + " to " + @targetdir + " directory."
|
99
|
+
puts ">> pagemaster :: " + nonunique.to_s + " items were skipped because of non-unique names."
|
100
|
+
puts ">> pagemaster :: " + untitled.to_s + " items were skipped because of missing titles."
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
metadata
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pagemaster
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Marii Nyröp
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-10-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: jekyll
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
description: jekyll .md page generator plugin from csv or yaml files
|
28
|
+
email:
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/pagemaster.rb
|
34
|
+
homepage: https://github.com/mnyrop/pagemaster
|
35
|
+
licenses:
|
36
|
+
- MIT
|
37
|
+
metadata: {}
|
38
|
+
post_install_message:
|
39
|
+
rdoc_options: []
|
40
|
+
require_paths:
|
41
|
+
- lib
|
42
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
requirements: []
|
53
|
+
rubyforge_project:
|
54
|
+
rubygems_version: 2.6.14
|
55
|
+
signing_key:
|
56
|
+
specification_version: 4
|
57
|
+
summary: jekyll pagemaster plugin
|
58
|
+
test_files: []
|