class Mumukit::Sync::Store::Github::GuideWriter

Attributes

dir[RW]

Public Class Methods

new(dir) click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 7
def initialize(dir)
  @dir = dir
end

Public Instance Methods

format_id(guide, exercise) click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 35
def format_id(guide, exercise)
  guide[:id_format] % exercise[:id]
end
write_exercise!(guide, e) click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 39
def write_exercise!(guide, e)
  dirname = File.join dir, to_fs_friendly_name("#{format_id(guide, e)}_#{e[:name]}")

  FileUtils.mkdir_p dirname

  write_metadata_fields! dirname, exercise_schema, e
  write_file_fields! dirname, exercise_schema, e, (e[:language] || guide[:language])
end
write_file_fields!(base_path, schema, element, language) click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 11
def write_file_fields!(base_path, schema, element, language)
  schema.file_fields.each do |it|
    file_name = it.get_file_name(language)
    write_file! base_path, file_name, it.get_field_value(element) if it.field_value_present?(element)
  end
end
write_guide!(guide) click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 25
def write_guide!(guide)
  guide[:exercises].each do |e|
    write_exercise! guide, e
  end
  write_licenses!(guide)

  write_metadata_fields! dir, guide_schema, guide
  write_file_fields! dir, guide_schema, guide, guide[:language]
end
write_licenses!(guide) click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 48
def write_licenses!(guide)
  write_file! dir, 'COPYRIGHT.txt', copyright_content(guide)
  write_file! dir, 'README.md', readme_content(guide)
  copy_file! 'LICENSE.txt'
end
write_metadata_fields!(base_path, schema, e) click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 18
def write_metadata_fields!(base_path, schema, e)
  metadata = schema.metadata_fields.map do |field|
    [field.name.to_s, field.get_field_value(e)]
  end.to_h.compact.merge('name' => e[:name]).to_yaml
  write_file! base_path, 'meta.yml', metadata
end

Private Instance Methods

copy_file!(name) click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 75
def copy_file!(name)
  FileUtils.cp licenses_dir(name), dir
end
default_filename(guide) click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 56
def default_filename(guide)
  "default.#{guide[:language][:extension]}"
end
licenses_dir(name) click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 83
def licenses_dir(name)
  File.join __dir__, 'licenses', name
end
read_file(name) click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 79
def read_file(name)
  File.read licenses_dir(name)
end
readme_content(guide) click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 70
def readme_content(guide)
  @copyright = copyright_content guide
  ERB.new(read_file 'README.md.erb').result binding
end
to_fs_friendly_name(dirname) click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 87
def to_fs_friendly_name(dirname)
  dirname.gsub /[\x00\/\\:\*\.\?\"<>\|]/, '_'
end
write_file!(dirname, name, content) click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 60
def write_file!(dirname, name, content)
  File.write(File.join(dirname, name), content)
end