Class: Courseware::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/courseware/generator.rb

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ Generator

Returns a new instance of Generator.



7
8
9
# File 'lib/courseware/generator.rb', line 7

def initialize(config)
  @config = config
end

Instance Method Details



55
56
57
58
59
60
61
62
# File 'lib/courseware/generator.rb', line 55

def links
  filename = File.join(@config[:cachedir], 'templates', 'links.json')
  JSON.parse(File.read(filename)).each do |file, target|
    $logger.info "Linking #{file} -> #{target}"
    FileUtils.rm_rf(file) if File.exists?(file)
    FileUtils.ln_sf(target, file)
  end
end

#metadataObject



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/courseware/generator.rb', line 64

def 
  location = File.basename Dir.pwd
  if File.exists?(@config[:presfile])
        = JSON.parse(File.read(@config[:presfile]))
    coursename  = ['name']
    description = ['description']
    component   = ['issues'].match(/components=(\d*)/)[1]
  else
    template    = File.join(@config[:cachedir], 'templates', 'showoff.json')
        = JSON.parse(File.read(template))
    coursename  = location.capitalize
    description = nil
    component   = nil
  end
  coursename  = Courseware.question('Choose a short name for this course:', coursename)
  description = Courseware.question('Please enter a description of the course:', description)
  component   = Courseware.get_component(component)

  ['name']        = coursename
  ['description'] = description
  ['edit']        = "https://github.com/puppetlabs/#{@config[:github][:repository]}/edit/qa/review/#{coursename}/#{location}/"
  ['issues']      = "http://tickets.puppetlabs.com/secure/CreateIssueDetails!init.jspa?pid=10302&issuetype=1&components=#{component}&priority=6&summary="

  $logger.info "Updating presentation file #{@config[:presfile]}"
  File.write(@config[:presfile], JSON.pretty_generate())
  coursename
end

#rakefileObject



41
42
43
44
45
# File 'lib/courseware/generator.rb', line 41

def rakefile
  raise 'Update the toplevel Rakefile instead.' if File.symlink? 'Rakefile'
  source = File.join(@config[:cachedir], 'templates', 'Rakefile')
  FileUtils.cp(source, 'Rakefile')
end

#saveconfig(configfile) ⇒ Object



11
12
13
14
# File 'lib/courseware/generator.rb', line 11

def saveconfig(configfile)
  $logger.info "Saving configuration to #{configfile}"
  File.write(configfile, @config.to_yaml)
end

#sharedObject



36
37
38
39
# File 'lib/courseware/generator.rb', line 36

def shared
  source = File.join(@config[:cachedir], 'templates', 'shared')
  FileUtils.cp_r(source, '.')
end

#skeleton(dest) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/courseware/generator.rb', line 16

def skeleton(dest)
  source = File.join(@config[:cachedir], 'templates', 'skeleton')
  FileUtils.cp_r(source, dest)

  Dir.chdir(dest) do
    course = ()
    styles(course, '0.0.1')

    default = Courseware::Repository.repository? ? 'P' : 'S'
    case Courseware.question('Should this be a (S)tandalone course or share assets with a (P)arent repository?', default)
    when 's','S'
      shared
      $logger.warn "Don't forget to create the GitHub repository for your new course following the EDU standard."
    else
      links
      $logger.warn "Don't forget to add, commit, & push this new course directory to the repository."
    end
  end
end

#styles(course = nil, version = nil) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/courseware/generator.rb', line 47

def styles(course=nil, version=nil)
  File.open(@config[:stylesheet], 'w') do |f|
    $logger.info "Updating stylesheet for #{course} version #{version}."
    template = File.join(@config[:cachedir], 'templates', 'showoff.css.erb')
    f.write ERB.new(File.read(template), nil, '-').result(binding)
  end
end