hexlet 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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