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 +4 -4
 - data/lib/et/api.rb +5 -5
 - data/lib/et/challenge.rb +5 -4
 - data/lib/et/config.rb +3 -1
 - data/lib/et/runner.rb +1 -1
 - data/lib/et/version.rb +1 -1
 - data/spec/cli/list_challenges_spec.rb +3 -8
 - data/spec/data/challenge.json +1 -0
 - data/spec/data/challenges.json +1 -1
 - data/spec/lib/api_spec.rb +19 -4
 - data/spec/lib/challenge_spec.rb +5 -6
 - data/spec/support/helpers/sample_files.rb +1 -1
 - metadata +3 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: b39aed635bf95f14c089d17488dcde13d1a85ea2
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 680174f609918e638266301b381d5ac5d74d8f84
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: efca6c830ff04b4be2414c83c062462a9d0d532c1b0621693d6f97f52f7d156b681421a3bf25ed0760a4548c0fa40ef36d0c21e6c151e8fb2f8026f6237bf72b
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 5a52aa3f094bc58460a9834c7a2f09a004e834a53f0e580f344d71ddb538f7b168f029732921a2013fba2fa5235b76c29d71ea206c9c0993a240a161026fcd7e
         
     | 
    
        data/lib/et/api.rb
    CHANGED
    
    | 
         @@ -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[: 
     | 
| 
      
 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, " 
     | 
| 
      
 54 
     | 
    
         
            +
                  URI.join(host, "lessons/#{slug}.json").to_s
         
     | 
| 
       55 
55 
     | 
    
         
             
                end
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
       57 
57 
     | 
    
         
             
                def challenges_url
         
     | 
| 
       58 
     | 
    
         
            -
                  URI.join(host, " 
     | 
| 
      
 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, " 
     | 
| 
      
 62 
     | 
    
         
            +
                  URI.join(host, "lessons/#{slug}/submissions.json").to_s
         
     | 
| 
       63 
63 
     | 
    
         
             
                end
         
     | 
| 
       64 
64 
     | 
    
         | 
| 
       65 
65 
     | 
    
         
             
                def random_filename
         
     | 
    
        data/lib/et/challenge.rb
    CHANGED
    
    | 
         @@ -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"] || []) + [". 
     | 
| 
      
 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, ". 
     | 
| 
      
 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, ". 
     | 
| 
      
 61 
     | 
    
         
            +
                  path = File.join(current_dir, ".lesson.yml")
         
     | 
| 
       61 
62 
     | 
    
         | 
| 
       62 
63 
     | 
    
         
             
                  if File.exists?(path)
         
     | 
| 
       63 
64 
     | 
    
         
             
                    current_dir
         
     | 
| 
       64 
     | 
    
         
            -
                  elsif 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))
         
     | 
    
        data/lib/et/config.rb
    CHANGED
    
    | 
         @@ -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 == " 
     | 
| 
      
 55 
     | 
    
         
            +
                  elsif dir == "." || Pathname.new(dir).root?
         
     | 
| 
       54 
56 
     | 
    
         
             
                    nil
         
     | 
| 
       55 
57 
     | 
    
         
             
                  else
         
     | 
| 
       56 
58 
     | 
    
         
             
                    find_config_file(File.dirname(dir))
         
     | 
    
        data/lib/et/runner.rb
    CHANGED
    
    | 
         @@ -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 
     | 
| 
      
 43 
     | 
    
         
            +
                      Formatter.print_table(api.list_challenges, :slug, :title)
         
     | 
| 
       44 
44 
     | 
    
         
             
                    end
         
     | 
| 
       45 
45 
     | 
    
         
             
                  end
         
     | 
| 
       46 
46 
     | 
    
         | 
    
        data/lib/et/version.rb
    CHANGED
    
    
| 
         @@ -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(" 
     | 
| 
       27 
     | 
    
         
            -
                  expect(stdout).to include(" 
     | 
| 
      
 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"}}
         
     | 
    
        data/spec/data/challenges.json
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {" 
     | 
| 
      
 1 
     | 
    
         
            +
            {"lessons":[{"title":"Auto-Guesser","slug":"auto-guesser"},{"title":"Guess the Number","slug":"guess-the-number"}]}
         
     | 
    
        data/spec/lib/api_spec.rb
    CHANGED
    
    | 
         @@ -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/ 
     | 
| 
      
 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 
     | 
| 
       17 
     | 
    
         
            -
                  expect(results[ 
     | 
| 
       18 
     | 
    
         
            -
                  expect(results[ 
     | 
| 
      
 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
         
     | 
    
        data/spec/lib/challenge_spec.rb
    CHANGED
    
    | 
         @@ -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, ". 
     | 
| 
      
 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, ". 
     | 
| 
      
 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, ". 
     | 
| 
      
 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, ". 
     | 
| 
      
 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("./. 
     | 
| 
      
 81 
     | 
    
         
            +
                      expect(files).to_not include("./.lesson.yml")
         
     | 
| 
       83 
82 
     | 
    
         
             
                    end
         
     | 
| 
       84 
83 
     | 
    
         
             
                  ensure
         
     | 
| 
       85 
84 
     | 
    
         
             
                    if archive_path && File.exist?(archive_path)
         
     | 
    
        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. 
     | 
| 
      
 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- 
     | 
| 
      
 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
         
     |