hexlet 0.0.1 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 35f9300008b67722d0c2c50a6c3de958afdb90e6
4
- data.tar.gz: dbbdf2bde4cc1af0e81cee92ed9be98e094e4258
3
+ metadata.gz: 923d541f087c81d072c5d11448148a1d101014ac
4
+ data.tar.gz: 5549df3113f39f9658c5cccddcbb3c455b3fef34
5
5
  SHA512:
6
- metadata.gz: 0676c89c279310423c087f8f91c9bc449e7f6a2c7f9f275f82b6b89c9fc43794a4a3089eb29052bf093b012d3632939d3e02b39dfba5673648a9372d6fe5c388
7
- data.tar.gz: 59039612d7a7299e508f21b244c318a1398489a72818f92786371498b2d2633193582d4eaae6f32fec0e746ff8b043085eef55e8732c09c178636467a712f007
6
+ metadata.gz: 8de462597b0fa5684b7043b454b0dd1771e845533b070ce708de9ffb73134b1044538a9a2383722b752ffd369383e39a196ea7ffbf7baf34cb4a562e7f2bc8b4
7
+ data.tar.gz: 99de90f5ec5b442d21effa17e2bbe6ca4b51f7565338942ba5904b3458065a13de647ed21d50f6d570fbf993ea1c571feca5ff0cc052f1694179cd0253ca04dd
@@ -25,4 +25,5 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency "rest_client"
26
26
  spec.add_dependency "i18n"
27
27
  spec.add_dependency "minitar"
28
+ # spec.add_dependency "childprocess"
28
29
  end
@@ -5,12 +5,14 @@ require 'yaml'
5
5
  require 'fileutils'
6
6
  require 'uri'
7
7
  require 'zlib'
8
+ require 'open3'
8
9
 
9
10
  require 'archive/tar/minitar'
10
11
  require 'rake'
11
12
  require 'thor'
12
13
  require 'rest-client'
13
14
  require 'i18n'
15
+ require 'childprocess'
14
16
 
15
17
  I18n.available_locales = [:en]
16
18
  I18n.enforce_available_locales = true
@@ -1,6 +1,62 @@
1
1
  module Hexlet
2
2
  class MemberCLI < BaseCLI
3
- # fetch
4
- # submit
3
+ desc "submit PATH_TO_EXERCISE", "submit exercise"
4
+ def submit(path)
5
+ lesson_path, exercise_folder_name = File.split(path)
6
+ lesson_folder_name = File.split(lesson_path)[1]
7
+ parts = lesson_folder_name.split("_")
8
+
9
+ if parts[-1] != "lesson"
10
+ puts (t "wrong_lesson_folder")
11
+ return false
12
+ end
13
+
14
+ lesson_slug = parts[0, parts.size - 1].join("_")
15
+
16
+ # process = ChildProcess.build("make", "test")
17
+ # process.start
18
+ _, e, s = Open3.capture3("make test -C #{path}")
19
+ if s == 0
20
+ result = client.submit lesson_slug, exercise_folder_name
21
+ if result
22
+ puts (t :created)
23
+ true
24
+ else
25
+ puts (t :error)
26
+ false
27
+ end
28
+ else
29
+ puts (t :bad_tests)
30
+ puts e
31
+ end
32
+ end
33
+
34
+ desc "fetch LESSON_SLUG EXERCISE_SLUG", "download lesson exercise"
35
+ def fetch(lesson_slug, exercise_slug)
36
+ # FIXME check login
37
+ if content = client.fetch(lesson_slug, exercise_slug)
38
+ lesson_path = File.join("/", "vagrant", "exercises", "#{lesson_slug}_lesson")
39
+ exercise_path = File.join(lesson_path, exercise_slug)
40
+ FileUtils.mkdir_p(exercise_path)
41
+
42
+ tarball_path = File.join(exercise_path, "exercise.tar.gz")
43
+ File.open(tarball_path, "w") do |f|
44
+ f.write content
45
+ end
46
+
47
+ tgz = Zlib::GzipReader.new(File.open(tarball_path, 'rb'))
48
+ Archive::Tar::Minitar.unpack(tgz, exercise_path)
49
+
50
+ puts (t :ok)
51
+ else
52
+ puts (t :not_found)
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+ def client
59
+ @client ||= Hexlet::MemberClient.new config["hexlet_api_key"], logger: logger, host: options["host"]
60
+ end
5
61
  end
6
62
  end
@@ -1,4 +1,26 @@
1
1
  module Hexlet
2
2
  class MemberClient < BaseClient
3
+ def submit(lesson_slug, exercise_slug)
4
+ url = @router.api_member_lesson_backend_results_url(lesson_slug, exercise_slug)
5
+ @logger.debug url
6
+
7
+ RestClient.post url, {}, headers do |response, request, result, &block|
8
+ @logger.debug response
9
+ 201 == response.code
10
+ end
11
+ end
12
+ def fetch(lesson_slug, exercise_slug)
13
+ url = @router.api_member_lesson_backend_url(lesson_slug, exercise_slug)
14
+ @logger.debug url
15
+
16
+ RestClient.get url, headers do |response, request, result, &block|
17
+ @logger.debug response
18
+ if 200 == response.code
19
+ response.body
20
+ else
21
+ false
22
+ end
23
+ end
24
+ end
3
25
  end
4
26
  end
@@ -5,6 +5,14 @@ module Hexlet
5
5
  @host = host
6
6
  end
7
7
 
8
+ def api_member_lesson_backend_results_url(lesson_slug, exercise_slug)
9
+ generate("api_member/lessons/%s/backends/%s/results" % [lesson_slug, exercise_slug])
10
+ end
11
+
12
+ def api_member_lesson_backend_url(lesson_slug, exercise_slug)
13
+ generate("api_member/lessons/%s/backends/%s" % [lesson_slug, exercise_slug])
14
+ end
15
+
8
16
  def api_teacher_lessons_url
9
17
  generate("api_teacher/lessons")
10
18
  end
@@ -1,6 +1,6 @@
1
1
  module Hexlet
2
2
  class TeacherCLI < BaseCLI
3
- desc "submit PATH_TO_LESSON", "login on hexlet.io"
3
+ desc "submit PATH_TO_LESSON", "submit lesson"
4
4
  def submit(path)
5
5
  lesson_folder = File.split(path)[1]
6
6
  parts = lesson_folder.split("_")
@@ -1,3 +1,3 @@
1
1
  module Hexlet
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hexlet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kirill Mokevnin