puppet-courseware-manager 0.5.0 → 0.5.1
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 +4 -4
- data/CHANGELOG.txt +5 -0
- data/bin/courseware +14 -1
- data/lib/courseware.rb +0 -1
- data/lib/courseware/help.rb +2 -0
- data/lib/courseware/manager.rb +11 -7
- data/lib/courseware/manager/validators.rb +6 -1
- data/lib/courseware/printer.rb +8 -7
- data/lib/courseware/utils.rb +19 -0
- data/lib/courseware/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 920d9ead0c7f53930949fc216271fd862730d3af
|
4
|
+
data.tar.gz: eacf4a3bfa5f1f90ff38e5eb1d67a80c660101a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb0b92b90e8221ca981d913a0db22c399baaf7b20b82e7b9970018d2df010ddfc6ce16d7316100596c24e2f9c19493d369a4436085ec762e01f42712bf6884e5
|
7
|
+
data.tar.gz: 3f17f6a5c3cf8977124686a9de48cefb8837129c6c3f63b54ad42c3ef4e2174415caa7b5829f80a27a33fcbbf018ad0441bf55e07ec866b551e1ea4c0daa5883
|
data/CHANGELOG.txt
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
# Courseware Manager
|
2
2
|
## Release Notes
|
3
3
|
|
4
|
+
### v0.5.1
|
5
|
+
* Support modular presentations
|
6
|
+
* Allow watermarked PDF files via metadata in showoff
|
7
|
+
* Open file storage links during release process
|
8
|
+
|
4
9
|
### v0.5.0 (Public release)
|
5
10
|
* First public release
|
6
11
|
* Not for general consumption, merely for ease of distribution.
|
data/bin/courseware
CHANGED
@@ -27,6 +27,10 @@ optparse = OptionParser.new { |opts|
|
|
27
27
|
cmdlineopts[:renderer] = opt.to_sym
|
28
28
|
end
|
29
29
|
|
30
|
+
opts.on("-f", "--file FILE", "Presentation file. Defaults to 'showoff.json'.") do |opt|
|
31
|
+
cmdlineopts[:presfile] = opt
|
32
|
+
end
|
33
|
+
|
30
34
|
opts.on("-d", "--debug", "Display debugging messages") do
|
31
35
|
cmdlineopts[:debug] = true
|
32
36
|
end
|
@@ -56,7 +60,6 @@ config.merge!(cmdlineopts)
|
|
56
60
|
config[:templates] ||= 'git@github.com:puppetlabs/courseware-templates.git'
|
57
61
|
config[:cachedir] ||= '~/.courseware'
|
58
62
|
config[:stylesheet] ||= 'courseware.css'
|
59
|
-
config[:presfile] ||= 'showoff.json'
|
60
63
|
config[:renderer] ||= :wkhtmltopdf
|
61
64
|
config[:output] ||= 'pdf'
|
62
65
|
config[:collector] ||= 'http://puppetlabs.com/training/issues?s='
|
@@ -71,6 +74,16 @@ config[:pdf][:password] ||= 'default'
|
|
71
74
|
config[:pdf][:protected] ||= true
|
72
75
|
config[:pdf][:watermark] ||= false
|
73
76
|
config[:pdf][:license] ||= nil
|
77
|
+
config[:release] ||= {}
|
78
|
+
config[:release][:links] ||= []
|
79
|
+
|
80
|
+
# Validating obsolete slides is special because we have to load all variants;
|
81
|
+
# nonetheless, we do need *something* valid there, so drop in a dummy value.
|
82
|
+
if ARGV == ['validate', 'obsolete']
|
83
|
+
config[:presfile] ||= 'showoff.json'
|
84
|
+
else
|
85
|
+
config[:presfile] ||= Courseware.choose_variant
|
86
|
+
end
|
74
87
|
|
75
88
|
# expand out all path shortcuts in one single place.
|
76
89
|
[ :cachedir ].each do |path|
|
data/lib/courseware.rb
CHANGED
@@ -45,7 +45,6 @@ class Courseware
|
|
45
45
|
:course => @manager.coursename,
|
46
46
|
:prefix => @manager.prefix,
|
47
47
|
:version => @repository.current(@manager.prefix),
|
48
|
-
:variant => Courseware.choose_variant,
|
49
48
|
}
|
50
49
|
Courseware::Printer.new(@config, opts) do |printer|
|
51
50
|
subject.each do |item|
|
data/lib/courseware/help.rb
CHANGED
@@ -49,6 +49,8 @@ class Courseware
|
|
49
49
|
obsolete: Lists all unreferenced images and slides. This reference checks
|
50
50
|
all slides and all CSS stylesheets. Case sensitive.
|
51
51
|
|
52
|
+
Note: This validator will validate all course variants.
|
53
|
+
|
52
54
|
missing: Lists all slides that are missing. Note that this does not check
|
53
55
|
for missing image files yet. Case sensitive.
|
54
56
|
|
data/lib/courseware/manager.rb
CHANGED
@@ -15,12 +15,11 @@ class Courseware::Manager
|
|
15
15
|
@warnings = 0
|
16
16
|
@errors = 0
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
18
|
+
showoff = Courseware.parse_showoff(@config[:presfile])
|
19
|
+
@coursename = showoff['name']
|
20
|
+
@prefix = showoff['name'].gsub(' ', '_')
|
21
|
+
@sections = showoff['sections']
|
22
|
+
@password = showoff['key']
|
24
23
|
end
|
25
24
|
|
26
25
|
def releasenotes
|
@@ -68,6 +67,12 @@ class Courseware::Manager
|
|
68
67
|
|
69
68
|
@repository.commit(@config[:stylesheet], "Updating for #{@coursename} release #{version}")
|
70
69
|
@repository.tag("#{@prefix}-#{version}", "Releasing #{@coursename} version #{version}")
|
70
|
+
|
71
|
+
# places the PDF files should be uploaded to
|
72
|
+
@config[:release][:links].each do |link|
|
73
|
+
system("open #{link}")
|
74
|
+
end
|
75
|
+
|
71
76
|
puts "Release shipped. Please upload PDF files to printer and break out the bubbly."
|
72
77
|
end
|
73
78
|
|
@@ -122,7 +127,6 @@ private
|
|
122
127
|
:course => @coursename,
|
123
128
|
:prefix => @prefix,
|
124
129
|
:version => version,
|
125
|
-
:variant => Courseware.choose_variant,
|
126
130
|
}
|
127
131
|
end
|
128
132
|
|
@@ -1,6 +1,11 @@
|
|
1
1
|
class Courseware::Manager
|
2
2
|
|
3
3
|
def obsolete
|
4
|
+
# We need to get all slides from all variants to determine what's obsolete.
|
5
|
+
allsections = Dir.glob('*.json').collect do |variant|
|
6
|
+
Courseware.parse_showoff(variant)['sections'] rescue nil
|
7
|
+
end.flatten.uniq
|
8
|
+
|
4
9
|
puts "Obsolete images:"
|
5
10
|
Dir.glob('**/_images/*') do |file|
|
6
11
|
next if File.symlink? file
|
@@ -16,7 +21,7 @@ class Courseware::Manager
|
|
16
21
|
next if File.symlink? file
|
17
22
|
next if File.directory? file
|
18
23
|
next if file =~ /^_.*$|^[^\/]*$/
|
19
|
-
next if
|
24
|
+
next if allsections.include? file
|
20
25
|
|
21
26
|
puts " * #{file}"
|
22
27
|
@warnings += 1
|
data/lib/courseware/printer.rb
CHANGED
@@ -6,18 +6,19 @@ class Courseware::Printer
|
|
6
6
|
@course = opts[:course] or raise 'Course is a required option'
|
7
7
|
@prefix = opts[:prefix] or raise 'Prefix is a required option'
|
8
8
|
@version = opts[:version] or raise 'Version is a required option'
|
9
|
-
|
9
|
+
raise unless can_print?
|
10
10
|
|
11
|
+
@varfile = config[:presfile] or raise 'Presentation file is not set properly!'
|
11
12
|
@variant = File.basename(@varfile, '.json') unless @varfile == 'showoff.json'
|
12
13
|
|
13
|
-
raise unless can_print?
|
14
|
-
|
15
14
|
@pdfopts = "--pdf-title '#{@course}' --pdf-author '#{@config[:pdf][:author]}' --pdf-subject '#{@config[:pdf][:subject]}'"
|
16
15
|
@pdfopts << " --disallow-modify" if @config[:pdf][:protected]
|
17
16
|
|
18
17
|
if @config[:pdf][:watermark]
|
19
|
-
|
20
|
-
|
18
|
+
showoff = Courseware.parse_showoff(@config[:presfile])
|
19
|
+
|
20
|
+
@event_id = showoff['event_id'] || Courseware.question('Enter the Event ID:')
|
21
|
+
@password = showoff['key'] || Courseware.question('Enter desired password:', (@event_id[/-?(\w*)$/, 1] rescue nil))
|
21
22
|
@watermark_style = File.join(@config[:cachedir], 'templates', 'watermark.css')
|
22
23
|
@watermark_pdf = File.join(@config[:cachedir], 'templates', 'watermark.pdf')
|
23
24
|
end
|
@@ -123,7 +124,7 @@ class Courseware::Printer
|
|
123
124
|
begin
|
124
125
|
# Until showoff static knows about -f, we have to schlup around files
|
125
126
|
if @variant
|
126
|
-
FileUtils.mv 'showoff.json', 'showoff.json.tmp'
|
127
|
+
FileUtils.mv 'showoff.json', '.showoff.json.tmp'
|
127
128
|
FileUtils.cp @varfile, 'showoff.json'
|
128
129
|
end
|
129
130
|
|
@@ -134,7 +135,7 @@ class Courseware::Printer
|
|
134
135
|
FileUtils.cp('cobrand.png', File.join('static', 'image', 'cobrand.png'))
|
135
136
|
end
|
136
137
|
ensure
|
137
|
-
FileUtils.mv('showoff.json.tmp', 'showoff.json') if File.exist? 'showoff.json.tmp'
|
138
|
+
FileUtils.mv('.showoff.json.tmp', 'showoff.json') if File.exist? '.showoff.json.tmp'
|
138
139
|
end
|
139
140
|
end
|
140
141
|
|
data/lib/courseware/utils.rb
CHANGED
@@ -87,6 +87,25 @@ class Courseware
|
|
87
87
|
variants[idx]
|
88
88
|
end
|
89
89
|
|
90
|
+
# TODO: I'm not happy with this being here, but I don't see a better place for it just now
|
91
|
+
def self.parse_showoff(filename)
|
92
|
+
showoff = JSON.parse(File.read(filename))
|
93
|
+
sections = showoff['sections'].map do |entry|
|
94
|
+
next entry if entry.is_a? String
|
95
|
+
next nil unless entry.is_a? Hash
|
96
|
+
next nil unless entry.include? 'include'
|
97
|
+
|
98
|
+
file = entry['include']
|
99
|
+
path = File.dirname(file)
|
100
|
+
data = JSON.parse(File.read(file))
|
101
|
+
|
102
|
+
data.map { |source| "#{path}/#{source}" }
|
103
|
+
end.flatten.compact
|
104
|
+
showoff['sections'] = sections
|
105
|
+
|
106
|
+
return showoff
|
107
|
+
end
|
108
|
+
|
90
109
|
def self.get_component(initial)
|
91
110
|
puts 'The component ID for this course can be found at:'
|
92
111
|
puts ' * https://tickets.puppetlabs.com/browse/COURSES/?selectedTab=com.atlassian.jira.jira-projects-plugin:components-panel'
|
data/lib/courseware/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet-courseware-manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Ford
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mdl
|