exercism 0.0.13 → 0.0.14

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.
data/README.md CHANGED
@@ -4,6 +4,7 @@ Client gem for the warmup-exercise app exercism.io.
4
4
 
5
5
  [![Code Climate](https://codeclimate.com/github/kytrinyx/exercism.png)](https://codeclimate.com/github/kytrinyx/exercism)
6
6
  [![Build Status](https://travis-ci.org/kytrinyx/exercism.png?branch=master)](https://travis-ci.org/kytrinyx/exercism)
7
+ [![Gem Version](https://badge.fury.io/rb/exercism.png)](https://rubygems.org/gems/exercism)
7
8
 
8
9
  ## Install
9
10
 
data/bin/exercism CHANGED
@@ -7,6 +7,9 @@ require 'cli'
7
7
  begin
8
8
  Exercism::CLI.start
9
9
  rescue Exception => e
10
- print "\nERROR: Something went wrong. Exiting.\n"
10
+ puts
11
+ puts "ERROR: Something went wrong. Exiting."
12
+ puts e.message
13
+ puts
11
14
  raise e if ENV['EXERCISM_ENV'] =~ /test|development/
12
15
  end
data/lib/cli.rb CHANGED
@@ -17,15 +17,8 @@ class Exercism
17
17
  def fetch
18
18
  require 'exercism'
19
19
 
20
- api = Exercism::Api.new(options[:host], Exercism.user, Exercism.project_dir)
21
20
  assignments = api.fetch
22
- if assignments.empty?
23
- puts "No assignments fetched."
24
- else
25
- assignments.each do |assignment|
26
- puts "Fetched #{File.join(assignment.assignment_dir)}"
27
- end
28
- end
21
+ report(assignments)
29
22
  end
30
23
 
31
24
  desc "peek", "Fetch upcoming assignment from exercism.io"
@@ -33,15 +26,8 @@ class Exercism
33
26
  def peek
34
27
  require 'exercism'
35
28
 
36
- api = Exercism::Api.new(options[:host], Exercism.user, Exercism.project_dir)
37
29
  assignments = api.peek
38
- if assignments.empty?
39
- puts "No assignments fetched."
40
- else
41
- assignments.each do |assignment|
42
- puts "Fetched #{File.join(assignment.assignment_dir)}"
43
- end
44
- end
30
+ report(assignments)
45
31
  end
46
32
 
47
33
  desc "submit FILE", "Submit code to exercism.io on your current assignment"
@@ -51,9 +37,10 @@ class Exercism
51
37
 
52
38
  path = File.join(FileUtils.pwd, file)
53
39
  begin
54
- Exercism::Api.new(options[:host], Exercism.user).submit(file)
40
+ response = Exercism::Api.new(options[:host], Exercism.user).submit(file)
55
41
  puts "Your assignment has been submitted."
56
- puts "Check the website for feedback in a bit."
42
+ url = submission_url(response.body, options[:host])
43
+ puts "For feedback on your submission visit #{url}."
57
44
  rescue Exception => e
58
45
  puts "There was an issue with your submission."
59
46
  puts e.message
@@ -93,5 +80,25 @@ class Exercism
93
80
  puts "You are not logged in."
94
81
  end
95
82
 
83
+ private
84
+ def api(host = options[:host])
85
+ Exercism::Api.new(host, Exercism.user, Exercism.project_dir)
86
+ end
87
+
88
+ def submission_url(response_body, host)
89
+ body = JSON.parse(response_body)
90
+ "#{host}/user/#{body['language']}/#{body['exercise']}"
91
+ end
92
+
93
+ def report(assignments)
94
+ if assignments.empty?
95
+ puts "No assignments fetched."
96
+ else
97
+ assignments.each do |assignment|
98
+ puts "Fetched #{File.join(assignment.assignment_dir)}"
99
+ end
100
+ end
101
+ end
102
+
96
103
  end
97
104
  end
data/lib/exercism/api.rb CHANGED
@@ -11,25 +11,16 @@ class Exercism
11
11
  def conn
12
12
  conn = Faraday.new(:url => url) do |c|
13
13
  c.use Faraday::Adapter::NetHttp
14
+ c.headers['User-Agent'] = user_agent
14
15
  end
15
16
  end
16
17
 
17
18
  def fetch
18
- response = conn.get do |req|
19
- req.url endpoint('current')
20
- req.headers['User-Agent'] = user_agent
21
- req.params['key'] = user.key
22
- end
23
- save response.body
19
+ get_and_save('current')
24
20
  end
25
21
 
26
22
  def peek
27
- response = conn.get do |req|
28
- req.url endpoint('next')
29
- req.headers['User-Agent'] = user_agent
30
- req.params['key'] = user.key
31
- end
32
- save response.body
23
+ get_and_save('next')
33
24
  end
34
25
 
35
26
  def submit(filename)
@@ -39,7 +30,6 @@ class Exercism
39
30
  req.url endpoint
40
31
  req.headers['Accept'] = 'application/json'
41
32
  req.headers['Content-Type'] = 'application/json'
42
- req.headers['User-Agent'] = user_agent
43
33
  req.body = {code: contents, key: user.key, path: path}.to_json
44
34
  end
45
35
  response
@@ -47,8 +37,16 @@ class Exercism
47
37
 
48
38
  private
49
39
 
40
+ def get_and_save(action)
41
+ response = conn.get do |req|
42
+ req.url endpoint(action)
43
+ req.params['key'] = user.key
44
+ end
45
+ save response.body
46
+ end
47
+
50
48
  def user_agent
51
- "exercism-CLI v#{Exercism::VERSION}"
49
+ "github.com/kytrinyx/exercism CLI v#{Exercism::VERSION}"
52
50
  end
53
51
 
54
52
  def endpoint(action = nil)
@@ -1,3 +1,3 @@
1
1
  class Exercism
2
- VERSION = "0.0.13"
2
+ VERSION = "0.0.14"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exercism
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-24 00:00:00.000000000 Z
12
+ date: 2013-07-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday