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