class Exercism::CLI
Public Instance Methods
current()
click to toggle source
# File lib/cli.rb, line 127 def current require 'exercism' result = Exercism::Api.new(options[:host], Exercism.user).current body = JSON.parse(result.body) puts "Current Assignments" body['assignments'].each do |assignment| track = assignment['track'] puts "Language: " + track.ljust(17) + "Exercise: " + assignment['slug'] end end
demo()
click to toggle source
# File lib/cli.rb, line 20 def demo require 'exercism' guest = Object.new def guest.key "demo" end exercism = Exercism::Api.new(options[:host], guest, '.') assignments = exercism.demo report(assignments) end
dir()
click to toggle source
# File lib/cli.rb, line 143 def dir require 'exercism' puts Exercism.config.project_dir end
fetch()
click to toggle source
# File lib/cli.rb, line 35 def fetch require 'exercism' assignments = api.fetch report(assignments) end
login()
click to toggle source
# File lib/cli.rb, line 101 def login require 'exercism' Exercism.login username, key, project_dir say("Your credentials have been written to #{Exercism.config.file}") end
logout()
click to toggle source
# File lib/cli.rb, line 110 def logout require 'exercism' Exercism.config.delete end
open()
click to toggle source
# File lib/cli.rb, line 43 def open require 'launchy' Launchy.open("http://exercism.io") end
peek()
click to toggle source
# File lib/cli.rb, line 51 def peek require 'exercism' assignments = api.peek report(assignments) end
submit(file)
click to toggle source
# File lib/cli.rb, line 61 def submit(file) require 'exercism' require 'cli/monitored_request' submission = Submission.new(file) if submission.test? say "It looks like this is a test, you probably don't want to do that." if no?("Do you want to submit it anyway? [y/n]") return end end if options[:ask] if no?("Are you sure you want to submit this assignment? [y/n]") return end end MonitoredRequest.new(api).request :submit, submission.path do |request, body| say "Your assignment has been submitted." url = "#{options[:host]}/#{Exercism.user.github_username}/#{body['language']}/#{body['exercise']}" say "For feedback on your submission visit #{url}" end end
unsubmit()
click to toggle source
# File lib/cli.rb, line 89 def unsubmit require 'exercism' require 'cli/monitored_request' MonitoredRequest.new(api).request :unsubmit do |request, body| if response.status == 204 say "The last submission was successfully deleted." end end end
version()
click to toggle source
# File lib/cli.rb, line 10 def version require 'exercism' puts Exercism::VERSION end
whoami()
click to toggle source
# File lib/cli.rb, line 117 def whoami require 'exercism' puts Exercism.user.github_username rescue Errno::ENOENT puts "You are not logged in." end
Private Instance Methods
api(host = options[:host])
click to toggle source
# File lib/cli.rb, line 168 def api(host = options[:host]) Exercism::Api.new(host, Exercism.user, Exercism.project_dir) end
key()
click to toggle source
# File lib/cli.rb, line 155 def key ask("Your exercism.io API key:") end
project_dir()
click to toggle source
# File lib/cli.rb, line 160 def project_dir default_dir = FileUtils.pwd say "What is your exercism exercises project path?" say "Press Enter to select the default (#{default_dir}):\n" dir = ask ">", :default => default_dir File.expand_path(dir) end
report(assignments)
click to toggle source
# File lib/cli.rb, line 172 def report(assignments) if assignments.empty? say "No assignments fetched." else assignments.each do |assignment| say "\nFetched #{assignment.exercise}" say File.join(assignment.exercise, 'README.md') say File.join(assignment.exercise, assignment.test_file) end end end
spacing(track)
click to toggle source
# File lib/cli.rb, line 184 def spacing(track) len = 17 - track.length space = '' len.times {space += ' '} space end
username()
click to toggle source
# File lib/cli.rb, line 151 def username ask("Your GitHub username:") end