pagemaster 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
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