puppet-courseware-manager 0.5.0
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 +7 -0
- data/CHANGELOG.txt +60 -0
- data/LICENSE +202 -0
- data/README.txt +100 -0
- data/bin/courseware +146 -0
- data/lib/courseware.rb +165 -0
- data/lib/courseware/cache.rb +35 -0
- data/lib/courseware/composer.rb +135 -0
- data/lib/courseware/dummy.rb +5 -0
- data/lib/courseware/generator.rb +91 -0
- data/lib/courseware/help.rb +108 -0
- data/lib/courseware/manager.rb +129 -0
- data/lib/courseware/manager/validators.rb +72 -0
- data/lib/courseware/printer.rb +224 -0
- data/lib/courseware/repository.rb +189 -0
- data/lib/courseware/utils.rb +118 -0
- data/lib/courseware/version.rb +4 -0
- metadata +107 -0
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'word_wrap'
|
2
|
+
require 'word_wrap/core_ext'
|
3
|
+
|
4
|
+
class Courseware
|
5
|
+
def self.question(message, default=nil)
|
6
|
+
if default
|
7
|
+
print "#{message} [#{default}] "
|
8
|
+
else
|
9
|
+
print "#{message} "
|
10
|
+
end
|
11
|
+
|
12
|
+
answer = STDIN.gets.strip
|
13
|
+
|
14
|
+
return answer.empty? ? default : answer
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.confirm(message)
|
18
|
+
print "#{message} [Y/n]: "
|
19
|
+
[ 'y', 'yes', '' ].include? STDIN.gets.strip.downcase
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.bailout?(message)
|
23
|
+
print "#{message} Continue? [Y/n]: "
|
24
|
+
unless [ 'y', 'yes', '' ].include? STDIN.gets.strip.downcase
|
25
|
+
if block_given?
|
26
|
+
yield
|
27
|
+
end
|
28
|
+
raise "User cancelled"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.dialog(header, body=nil, width=80)
|
33
|
+
width -= 6
|
34
|
+
|
35
|
+
puts '################################################################################'
|
36
|
+
puts "## #{header[0..width].center(width)} ##"
|
37
|
+
if body
|
38
|
+
puts '##----------------------------------------------------------------------------##'
|
39
|
+
body.wrap(width).split("\n").each do |line|
|
40
|
+
printf "## %-#{width}s ##\n", line
|
41
|
+
end
|
42
|
+
end
|
43
|
+
puts '################################################################################'
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.choose(message, options, default = nil)
|
47
|
+
body = ""
|
48
|
+
options.each_with_index { |item, index| body << "\n[#{index}] #{item}" }
|
49
|
+
dialog(message, body)
|
50
|
+
|
51
|
+
ans = nil
|
52
|
+
loop do
|
53
|
+
if default
|
54
|
+
print "Choose an option by typing its number [#{default}]: "
|
55
|
+
ans = STDIN.gets.strip
|
56
|
+
ans = (ans == "") ? default : Integer(ans) rescue nil
|
57
|
+
else
|
58
|
+
print "Choose an option by typing its number: "
|
59
|
+
ans = Integer(STDIN.gets.strip) rescue nil
|
60
|
+
end
|
61
|
+
|
62
|
+
break if (0...options.size).include? ans
|
63
|
+
end
|
64
|
+
|
65
|
+
ans
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.choose_variant
|
69
|
+
variants = Dir.glob('*.json')
|
70
|
+
maxlen = variants.max { |x,y| x.size <=> y.size }.size - 4 # accomodate for the extension we're stripping
|
71
|
+
|
72
|
+
return 'showoff.json' if variants == ['showoff.json']
|
73
|
+
|
74
|
+
# Ensures that the default `showoff.json` is listed first
|
75
|
+
variants.unshift "showoff.json"
|
76
|
+
variants.uniq!
|
77
|
+
|
78
|
+
options = variants.map do |variant|
|
79
|
+
data = JSON.parse(File.read(variant))
|
80
|
+
name = (variant == 'showoff.json') ? 'default' : File.basename(variant, '.json')
|
81
|
+
desc = data['description']
|
82
|
+
|
83
|
+
"%#{maxlen}s: %s" % [name, desc]
|
84
|
+
end
|
85
|
+
|
86
|
+
idx = Courseware.choose("This course has several variants available:", options, 0)
|
87
|
+
variants[idx]
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.get_component(initial)
|
91
|
+
puts 'The component ID for this course can be found at:'
|
92
|
+
puts ' * https://tickets.puppetlabs.com/browse/COURSES/?selectedTab=com.atlassian.jira.jira-projects-plugin:components-panel'
|
93
|
+
puts
|
94
|
+
# grab the number ending the response--either the ID from the URL or the whole string
|
95
|
+
question('Please enter the component ID or copy & paste in its URL:', initial)[/(\d*)$/]
|
96
|
+
end
|
97
|
+
|
98
|
+
def self.grep(match, filename)
|
99
|
+
File.read(filename) =~ Regexp.new(match)
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.increment(version, type=:point)
|
103
|
+
major, minor, point = version.split('.')
|
104
|
+
case type
|
105
|
+
when :major
|
106
|
+
major.sub!(/^v/, '') # chop off the v if needed
|
107
|
+
"v#{major.to_i + 1}.0.0"
|
108
|
+
|
109
|
+
when :minor
|
110
|
+
"#{major}.#{minor.to_i + 1}.0"
|
111
|
+
|
112
|
+
when :point
|
113
|
+
"#{major}.#{minor}.#{point.to_i + 1}"
|
114
|
+
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
metadata
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: puppet-courseware-manager
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ben Ford
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-01-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mdl
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: showoff
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.10'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: word_wrap
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
55
|
+
description: |2
|
56
|
+
Manage the development lifecycle of Puppet courseware. This tool is not
|
57
|
+
required for presenting the material or for contributing minor updates.
|
58
|
+
|
59
|
+
This tool is not intended for general usage. If you are not a Puppet instructor
|
60
|
+
or an authorized training partner, this gem will have little interest for you.
|
61
|
+
email: education@puppetlabs.com
|
62
|
+
executables:
|
63
|
+
- courseware
|
64
|
+
extensions: []
|
65
|
+
extra_rdoc_files: []
|
66
|
+
files:
|
67
|
+
- CHANGELOG.txt
|
68
|
+
- README.txt
|
69
|
+
- LICENSE
|
70
|
+
- bin/courseware
|
71
|
+
- lib/courseware/cache.rb
|
72
|
+
- lib/courseware/composer.rb
|
73
|
+
- lib/courseware/dummy.rb
|
74
|
+
- lib/courseware/generator.rb
|
75
|
+
- lib/courseware/help.rb
|
76
|
+
- lib/courseware/manager/validators.rb
|
77
|
+
- lib/courseware/manager.rb
|
78
|
+
- lib/courseware/printer.rb
|
79
|
+
- lib/courseware/repository.rb
|
80
|
+
- lib/courseware/utils.rb
|
81
|
+
- lib/courseware/version.rb
|
82
|
+
- lib/courseware.rb
|
83
|
+
homepage: http://github.com/puppetlabs/courseware-manager
|
84
|
+
licenses:
|
85
|
+
- Apache-2.0
|
86
|
+
metadata: {}
|
87
|
+
post_install_message:
|
88
|
+
rdoc_options: []
|
89
|
+
require_paths:
|
90
|
+
- lib
|
91
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
requirements: []
|
102
|
+
rubyforge_project:
|
103
|
+
rubygems_version: 2.0.14.1
|
104
|
+
signing_key:
|
105
|
+
specification_version: 4
|
106
|
+
summary: Manage the development lifecycle of Puppet courseware. Not for general consumption.
|
107
|
+
test_files: []
|