et 0.3.0 → 0.4.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: 00179bd64d106f8b6a721fbc5db5f5482c1eb6d8
4
- data.tar.gz: fed344968bf74831c833c2d9b5728dcb42d394c7
3
+ metadata.gz: b39aed635bf95f14c089d17488dcde13d1a85ea2
4
+ data.tar.gz: 680174f609918e638266301b381d5ac5d74d8f84
5
5
  SHA512:
6
- metadata.gz: 7d69b2af3044f4b6df40fe317d8d1488d9afc620a810a15ca0744f5980ee2fb34da7a7bd990e7cd67679a31c11769278d189d0fbeeef60d85f868367a2552b00
7
- data.tar.gz: 3b08ea5c8308edfb2a5829e0878bbb24f3b9f4509a0db882ebb80ab5745bfab005304ef37482279d1172ec35271012c5d8e192a88db9b2e0a7a4feabdf868f80
6
+ metadata.gz: efca6c830ff04b4be2414c83c062462a9d0d532c1b0621693d6f97f52f7d156b681421a3bf25ed0760a4548c0fa40ef36d0c21e6c151e8fb2f8026f6237bf72b
7
+ data.tar.gz: 5a52aa3f094bc58460a9834c7a2f09a004e834a53f0e580f344d71ddb538f7b168f029732921a2013fba2fa5235b76c29d71ea206c9c0993a240a161026fcd7e
@@ -15,13 +15,13 @@ module ET
15
15
 
16
16
  def list_challenges
17
17
  response = RestClient.get(challenges_url)
18
- JSON.parse(response, symbolize_names: true)
18
+ JSON.parse(response, symbolize_names: true)[:lessons]
19
19
  end
20
20
 
21
21
  def get_challenge(slug)
22
22
  response = RestClient.get(challenge_url(slug))
23
23
  body = JSON.parse(response, symbolize_names: true)
24
- body[:challenge]
24
+ body[:lesson]
25
25
  end
26
26
 
27
27
  def download_file(url)
@@ -51,15 +51,15 @@ module ET
51
51
  private
52
52
 
53
53
  def challenge_url(slug)
54
- URI.join(host, "challenges/#{slug}.json").to_s
54
+ URI.join(host, "lessons/#{slug}.json").to_s
55
55
  end
56
56
 
57
57
  def challenges_url
58
- URI.join(host, "challenges.json").to_s
58
+ URI.join(host, "lessons.json?type=challenge").to_s
59
59
  end
60
60
 
61
61
  def submission_url(slug)
62
- URI.join(host, "challenges/#{slug}/submissions.json").to_s
62
+ URI.join(host, "lessons/#{slug}/submissions.json").to_s
63
63
  end
64
64
 
65
65
  def random_filename
@@ -1,3 +1,4 @@
1
+ require "pathname"
1
2
  require "securerandom"
2
3
 
3
4
  module ET
@@ -43,13 +44,13 @@ module ET
43
44
  end
44
45
 
45
46
  def ignored_files
46
- (config["ignore"] || []) + [".challenge"]
47
+ (config["ignore"] || []) + [".lesson.yml"]
47
48
  end
48
49
 
49
50
  private
50
51
 
51
52
  def config
52
- @config ||= YAML.load(File.read(File.join(dir, ".challenge")))
53
+ @config ||= YAML.load(File.read(File.join(dir, ".lesson.yml")))
53
54
  end
54
55
 
55
56
  def random_archive_path
@@ -57,11 +58,11 @@ module ET
57
58
  end
58
59
 
59
60
  def find_challenge_dir(current_dir)
60
- path = File.join(current_dir, ".challenge")
61
+ path = File.join(current_dir, ".lesson.yml")
61
62
 
62
63
  if File.exists?(path)
63
64
  current_dir
64
- elsif current_dir == "/" || current_dir == "."
65
+ elsif current_dir == "." || Pathname.new(current_dir).root?
65
66
  nil
66
67
  else
67
68
  find_challenge_dir(File.dirname(current_dir))
@@ -1,3 +1,5 @@
1
+ require "pathname"
2
+
1
3
  module ET
2
4
  class Config
3
5
  attr_reader :current_dir
@@ -50,7 +52,7 @@ module ET
50
52
 
51
53
  if File.exists?(config_path)
52
54
  config_path
53
- elsif dir == "/" || dir == "."
55
+ elsif dir == "." || Pathname.new(dir).root?
54
56
  nil
55
57
  else
56
58
  find_config_file(File.dirname(dir))
@@ -40,7 +40,7 @@ module ET
40
40
  desc "List available challenges."
41
41
  command :list do |c|
42
42
  c.action do |_global_options, _options, _cmdargs|
43
- Formatter.print_table(api.list_challenges[:challenges], :slug, :title)
43
+ Formatter.print_table(api.list_challenges, :slug, :title)
44
44
  end
45
45
  end
46
46
 
@@ -1,3 +1,3 @@
1
1
  module ET
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -1,11 +1,6 @@
1
1
  describe "list challenges" do
2
2
  let(:sample_challenges) do
3
- {
4
- challenges: [
5
- { title: "Guess the Number", slug: "guess-the-number" },
6
- { title: "Blackjack", slug: "blackjack" }
7
- ]
8
- }
3
+ JSON.parse(File.read("spec/data/challenges.json"), symbolize_names: true)[:lessons]
9
4
  end
10
5
 
11
6
  it "prints the titles and slug" do
@@ -23,8 +18,8 @@ describe "list challenges" do
23
18
  expect(stdout).to include("Guess the Number")
24
19
  expect(stdout).to include("guess-the-number")
25
20
 
26
- expect(stdout).to include("Blackjack")
27
- expect(stdout).to include("blackjack")
21
+ expect(stdout).to include("Auto-Guesser")
22
+ expect(stdout).to include("auto-guesser")
28
23
  end
29
24
  end
30
25
  end
@@ -0,0 +1 @@
1
+ {"lesson":{"slug":"rock-paper-scissors","title":"Rock, Paper, Scissors","body":"body goes here...","archive_url":"http://example.com/rock-paper-scissors.tar.gz"}}
@@ -1 +1 @@
1
- {"challenges":[{"title":"Auto-Guesser","slug":"auto-guesser"},{"title":"Guess the Number","slug":"guess-the-number"}]}
1
+ {"lessons":[{"title":"Auto-Guesser","slug":"auto-guesser"},{"title":"Guess the Number","slug":"guess-the-number"}]}
@@ -8,14 +8,29 @@ describe ET::API do
8
8
 
9
9
  it "queries for a list of challenges" do
10
10
  expect(RestClient).to receive(:get).
11
- with("http://localhost:3000/challenges.json").
11
+ with("http://localhost:3000/lessons.json?type=challenge").
12
12
  and_return(challenges_response)
13
13
 
14
14
  results = api.list_challenges
15
15
 
16
- expect(results[:challenges].count).to eq(2)
17
- expect(results[:challenges][0][:title]).to eq("Auto-Guesser")
18
- expect(results[:challenges][0][:slug]).to eq("auto-guesser")
16
+ expect(results.count).to eq(2)
17
+ expect(results[0][:title]).to eq("Auto-Guesser")
18
+ expect(results[0][:slug]).to eq("auto-guesser")
19
+ end
20
+
21
+ let(:challenge_response) do
22
+ File.read("spec/data/challenge.json")
23
+ end
24
+
25
+ it "queries for a single challenge" do
26
+ expect(RestClient).to receive(:get).
27
+ with("http://localhost:3000/lessons/rock-paper-scissors.json").
28
+ and_return(challenge_response)
29
+
30
+ result = api.get_challenge("rock-paper-scissors")
31
+
32
+ expect(result[:title]).to eq("Rock, Paper, Scissors")
33
+ expect(result[:archive_url]).to eq("http://example.com/rock-paper-scissors.tar.gz")
19
34
  end
20
35
  end
21
36
  end
@@ -4,7 +4,6 @@ describe ET::Challenge do
4
4
  let(:challenge_info) do
5
5
  {
6
6
  "title" => "Guess the Number",
7
- "slug" => "guess-the-number",
8
7
  "ignore" => ["README.md"]
9
8
  }
10
9
  end
@@ -12,7 +11,7 @@ describe ET::Challenge do
12
11
  describe "#dir" do
13
12
  it "selects the directory containing the challenge file" do
14
13
  Dir.mktmpdir do |challenge_dir|
15
- challenge_path = File.join(challenge_dir, ".challenge")
14
+ challenge_path = File.join(challenge_dir, ".lesson.yml")
16
15
  File.write(challenge_path, challenge_info.to_yaml)
17
16
 
18
17
  challenge = ET::Challenge.new(challenge_dir)
@@ -22,7 +21,7 @@ describe ET::Challenge do
22
21
 
23
22
  it "checks parent directories for the challenge file" do
24
23
  Dir.mktmpdir do |parent_dir|
25
- challenge_path = File.join(parent_dir, ".challenge")
24
+ challenge_path = File.join(parent_dir, ".lesson.yml")
26
25
  File.write(challenge_path, challenge_info.to_yaml)
27
26
 
28
27
  child_dir = File.join(parent_dir, "foobar")
@@ -44,7 +43,7 @@ describe ET::Challenge do
44
43
 
45
44
  begin
46
45
  Dir.mktmpdir do |challenge_dir|
47
- challenge_path = File.join(challenge_dir, ".challenge")
46
+ challenge_path = File.join(challenge_dir, ".lesson.yml")
48
47
  File.write(challenge_path, challenge_info.to_yaml)
49
48
 
50
49
  file_path = File.join(challenge_dir, "file.rb")
@@ -68,7 +67,7 @@ describe ET::Challenge do
68
67
 
69
68
  begin
70
69
  Dir.mktmpdir do |dir|
71
- File.write(File.join(dir, ".challenge"), challenge_info.to_yaml)
70
+ File.write(File.join(dir, ".lesson.yml"), challenge_info.to_yaml)
72
71
  File.write(File.join(dir, "file.rb"), "2 + 2 == 5")
73
72
  File.write(File.join(dir, "README.md"), "Ignore me!")
74
73
 
@@ -79,7 +78,7 @@ describe ET::Challenge do
79
78
 
80
79
  expect(files).to include("./file.rb")
81
80
  expect(files).to_not include("./README.md")
82
- expect(files).to_not include("./.challenge")
81
+ expect(files).to_not include("./.lesson.yml")
83
82
  end
84
83
  ensure
85
84
  if archive_path && File.exist?(archive_path)
@@ -23,7 +23,7 @@ module SampleFiles
23
23
  system("mkdir #{dir}")
24
24
 
25
25
  File.write(File.join(dir, "README.md"), "# README")
26
- File.write(File.join(dir, ".challenge"), options.to_yaml)
26
+ File.write(File.join(dir, ".lesson.yml"), options.to_yaml)
27
27
 
28
28
  dir
29
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: et
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Sheehan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-18 00:00:00.000000000 Z
11
+ date: 2014-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -111,6 +111,7 @@ files:
111
111
  - spec/cli/init_spec.rb
112
112
  - spec/cli/list_challenges_spec.rb
113
113
  - spec/cli/submit_challenge_spec.rb
114
+ - spec/data/challenge.json
114
115
  - spec/data/challenges.json
115
116
  - spec/data/some-challenge.tar.gz
116
117
  - spec/lib/api_spec.rb