pagemaster 2.0.1 → 2.0.2

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pagemaster.rb +37 -31
  3. metadata +8 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 27df4bed4b0e582657fc8a230c85eccfa46374437c0d985e6b8bb6a22b7caeb4
4
- data.tar.gz: c78b9cab7ddd6cbe15f767454b099a17bedf02854606e70a3bfb1800c520e263
3
+ metadata.gz: f6cdf1de48e215acc4bc5333aaa696a5f780f60fee31215692c0a1f056086db5
4
+ data.tar.gz: 77311ef8a70474d8d9fdf0af0a6a03a2c78c8e4102bc77e3af4c58c6bf8954c3
5
5
  SHA512:
6
- metadata.gz: 7718f1fe806f588f726ef289144fc33e34810dff0fd80fcc4f127fd5aca7df8cc479916dcc67c29314cffd11e271d0ed4dcc712040ab4d6e068d5f43ebc633d3
7
- data.tar.gz: b954ed10efd104d6ed3643f4f7844033fd1f6d7f133c2798ed6b697405362635228bd79a31ed0ebfeba97be66c93b95ecd5f9b46363418adbe24b2609422e11d
6
+ metadata.gz: 68c63dc08c8246dea2a055e0c97e4be920d7547e3fbee31cae6fe25cf2086f5f50264eef2d76375b660e0a60625e64755dbcc7b7ceb27df31d7b05650b29f9ac
7
+ data.tar.gz: 3506b331595c280a8f3a3fafedf14c7c6b9d98b0c13e611b7b7cf2ee22e653bfc41264fa5420e1826a72c7df9c6c1c15eb94e1eeafb5f2993c6d781f4034297d
data/lib/pagemaster.rb CHANGED
@@ -11,70 +11,76 @@ class Pagemaster < Jekyll::Command
11
11
  prog.command(:pagemaster) do |c|
12
12
  c.syntax 'pagemaster [options] [args]'
13
13
  c.description 'Generate md pages from collection data.'
14
- c.option 'no-perma', '--no-permalink', 'Skips adding hard-coded permalink'
14
+ c.option :no_perma, '--no-permalink', 'Skips adding hard-coded permalink.'
15
+ c.option :force, '--force', 'Erases pre-existing collection before regenerating.'
15
16
  c.action { |args, options| execute(args, options) }
16
17
  end
17
18
  end
18
19
 
19
- def execute(args, options)
20
+ def execute(args, opts = {})
20
21
  config = YAML.load_file('_config.yml')
21
22
  abort 'Cannot find collections in config' unless config.key?('collections')
22
- perma = false
23
- perma = config['permalink'] == 'pretty' ? '/' : '.html' unless options.key? 'no-perma'
24
23
  args.each do |name|
25
24
  abort "Cannot find #{name} in collection config" unless config['collections'].key? name
26
25
  meta = {
27
- 'id_key' => config['collections'][name].fetch('id_key'),
28
- 'layout' => config['collections'][name].fetch('layout'),
29
- 'source' => config['collections'][name].fetch('source')
26
+ id_key: config['collections'][name].fetch('id_key'),
27
+ layout: config['collections'][name].fetch('layout'),
28
+ source: config['collections'][name].fetch('source'),
29
+ ext: config.fetch('permalink', '') == 'pretty' ? '/' : '.html'
30
30
  }
31
31
  data = ingest(meta)
32
- generate_pages(name, meta, data, perma)
32
+ generate_pages(name, meta, data, opts)
33
33
  end
34
34
  end
35
35
 
36
36
  def ingest(meta)
37
- src = '_data/' + meta['source']
37
+ src = "_data/#{meta[:source]}"
38
38
  puts "Processing #{src}...."
39
- case File.extname(src)
40
- when '.csv' then data = CSV.read(src, headers: true, encoding: 'utf-8').map(&:to_hash)
41
- when '.json' then data = JSON.parse(File.read(src).encode('UTF-8'))
42
- when '.yml' then data = YAML.load_file(src)
43
- else abort 'Collection source must have a valid extension (.csv, .yml, or .json)'
44
- end
39
+ data = case File.extname(src)
40
+ when '.csv'
41
+ CSV.read(src, headers: true).map(&:to_hash)
42
+ when '.json'
43
+ JSON.parse(File.read(src).encode('UTF-8'))
44
+ when '.yml'
45
+ YAML.load_file(src)
46
+ else
47
+ raise 'Collection source must have a valid extension (.csv, .yml, or .json)'
48
+ end
45
49
  detect_duplicates(meta, data)
46
50
  data
47
51
  rescue StandardError
48
- abort "Cannot load #{src}. check for typos and rebuild."
52
+ raise "Cannot load #{src}. check for typos and rebuild."
49
53
  end
50
54
 
51
55
  def detect_duplicates(meta, data)
52
- ids = []
53
- data.each { |d| ids << d[meta['id_key']] }
56
+ ids = data.map { |d| d[meta[:data]] }
54
57
  duplicates = ids.detect { |i| ids.count(i) > 1 } || []
55
- abort "Your collection duplicate ids: \n#{duplicates}" unless duplicates.empty?
58
+ raise "Your collection duplicate ids: \n#{duplicates}" unless duplicates.empty?
56
59
  end
57
60
 
58
- def generate_pages(name, meta, data, perma)
59
- completed = 0
60
- skipped = 0
61
- dir = '_' + name
61
+ def generate_pages(name, meta, data, opts)
62
+ dir = "_#{name}"
63
+ perma = opts.fetch(:no_perma, meta[:ext])
64
+
65
+ if opts.fetch(:force, false)
66
+ FileUtils.rm_rf(dir)
67
+ puts "Overwriting #{dir} directory with --force."
68
+ end
69
+
62
70
  mkdir_p(dir)
63
71
  data.each do |item|
64
- pagename = slug(item.fetch(meta['id_key']))
65
- pagepath = dir + '/' + pagename + '.md'
66
- item['permalink'] = '/' + name + '/' + pagename + perma if perma
67
- item['layout'] = meta['layout']
72
+ pagename = slug(item.fetch(meta[:id_key]))
73
+ pagepath = "#{dir}/#{pagename}.md"
74
+ item['permalink'] = "/#{name}/#{pagename}#{perma}" if perma
75
+ item['layout'] = meta[:layout]
68
76
  if File.exist?(pagepath)
69
77
  puts "#{pagename}.md already exits. Skipping."
70
- skipped += 1
71
78
  else
72
- File.open(pagepath, 'w') { |file| file.write(item.to_yaml.to_s + '---') }
73
- completed += 1
79
+ File.open(pagepath, 'w') { |f| f.write("#{item.to_yaml}---") }
74
80
  end
75
81
  end
76
82
  rescue StandardError
77
- abort 'Pagemaster exited for some reason, most likely a missing or invalid id_key.'
83
+ raise 'Pagemaster exited for some reason, most likely a missing or invalid id_key.'
78
84
  end
79
85
 
80
86
  def slug(str)
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pagemaster
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
- - Marii Nyröp
7
+ - Marii Nyrop
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '3.8'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.0'
26
+ version: '3.8'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,28 +44,28 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.8'
47
+ version: '1.9'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.8'
54
+ version: '1.9'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.5'
61
+ version: '3.7'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.5'
68
+ version: '3.7'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rubocop
71
71
  requirement: !ruby/object:Gem::Requirement