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 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