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 +4 -4
- data/hexlet.gemspec +1 -0
- data/lib/hexlet.rb +2 -0
- data/lib/hexlet/member_cli.rb +58 -2
- data/lib/hexlet/member_client.rb +22 -0
- data/lib/hexlet/router.rb +8 -0
- data/lib/hexlet/teacher_cli.rb +1 -1
- data/lib/hexlet/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 923d541f087c81d072c5d11448148a1d101014ac
|
4
|
+
data.tar.gz: 5549df3113f39f9658c5cccddcbb3c455b3fef34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8de462597b0fa5684b7043b454b0dd1771e845533b070ce708de9ffb73134b1044538a9a2383722b752ffd369383e39a196ea7ffbf7baf34cb4a562e7f2bc8b4
|
7
|
+
data.tar.gz: 99de90f5ec5b442d21effa17e2bbe6ca4b51f7565338942ba5904b3458065a13de647ed21d50f6d570fbf993ea1c571feca5ff0cc052f1694179cd0253ca04dd
|
data/hexlet.gemspec
CHANGED
data/lib/hexlet.rb
CHANGED
@@ -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
|
data/lib/hexlet/member_cli.rb
CHANGED
@@ -1,6 +1,62 @@
|
|
1
1
|
module Hexlet
|
2
2
|
class MemberCLI < BaseCLI
|
3
|
-
|
4
|
-
|
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
|
data/lib/hexlet/member_client.rb
CHANGED
@@ -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
|
data/lib/hexlet/router.rb
CHANGED
@@ -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
|
data/lib/hexlet/teacher_cli.rb
CHANGED
data/lib/hexlet/version.rb
CHANGED