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
copyright_content(guide)
click to toggle source
# File lib/mumukit/sync/store/github/guide_writer.rb, line 64 def copyright_content(guide) @guide_authors = guide[:authors] @guide_repo_url = "https://github.com/#{guide[:slug]}" ERB.new(read_file 'COPYRIGHT.txt.erb').result binding 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