Sha256: 43a45b6c282f1d13f1fb944b7c98d8aa50dac41786c1c7d864dc4fe1d4785a89

Contents?: true

Size: 1.9 KB

Versions: 3

Compression:

Stored size: 1.9 KB

Contents

module Hexlet
  class TeacherCLI < BaseCLI
    desc "init LESSON_NAME", "init lesson skeleton"
    def init(lesson_name)
      folder = "#{lesson_name}_lesson"
      FileUtils.mkdir(folder)
      template_folder = File.join(File.dirname(__FILE__), "templates", "lesson", ".")
      FileUtils.cp_r(template_folder, folder)

      puts (t "lesson_folder_created", folder: folder)
      true
    end

    desc "submit PATH_TO_LESSON", "submit lesson"
    def submit(path)
      expanded_path = File.expand_path(path)
      lesson_folder = File.split(expanded_path)[1]
      parts = lesson_folder.split("_")

      if parts.last != "lesson"
        puts (t "wrong_lesson_folder")
        return false
      end

      slug = parts[0, parts.size - 1].join("_")

      filepath = generate_lesson_tarball(expanded_path)

      result = client.submit slug, filepath

      if result
        puts (t :created)
        true
      else
        puts (t :error)
        false
      end
    end

    private

    def generate_lesson_tarball(path)
      dist_path = File.join(path, "dist")
      exercise_tarball_path = File.join(dist_path, "exercise.tar.gz")

      FileUtils.mkdir_p(dist_path)

      File.open(exercise_tarball_path, 'wb') do |fd|
        sgz = Zlib::GzipWriter.new(fd)

        Archive::Tar::Minitar::Output.open(sgz) do |stream|
          FileUtils.cd path do
            files = Rake::FileList.new("**/*") do |f|
              f.exclude /node_modules/
              f.exclude /bower_components/
              f.exclude /dist/
              f.exclude ".git"
            end

            # raise files.inspect
            files.each do |entry|
              Archive::Tar::Minitar.pack_file(entry, stream)
            end
          end
        end
      end

      exercise_tarball_path
    end

    def client
      @client ||= Hexlet::TeacherClient.new config["hexlet_api_key"], logger: logger, host: options["host"]
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
hexlet-0.3.2 lib/hexlet/teacher_cli.rb
hexlet-0.3.1 lib/hexlet/teacher_cli.rb
hexlet-0.3.0 lib/hexlet/teacher_cli.rb