class VimGolfFinder::CLI

Public Class Methods

start(*) click to toggle source
Calls superclass method
# File lib/vimgolf_finder/cli.rb, line 18
def self.start(*)
  Thor::Base.shell = VimGolfFinder::CLI::UI
  super
end

Public Instance Methods

list() click to toggle source
# File lib/vimgolf_finder/cli.rb, line 31
def list
  order = options[:order]
  desc = options[:desc]
  limit = options[:limit].to_i
  page = options[:page].to_i

  challenges = VimGolfFinder.parser.fetch_challenges

  case order
    when 'title'
      challenges.sort! { |a, b| b.title <=> a.title } if desc
      challenges.sort! { |a, b| a.title <=> b.title } if !desc
    when 'entries'
      challenges.sort! { |a, b| b.entries <=> a.entries } if desc
      challenges.sort! { |a, b| a.entries <=> b.entries } if !desc
    when 'id'
      challenges.sort! { |a, b| b.id <=> a.id } if desc
      challenges.sort! { |a, b| a.id <=> b.id } if !desc
  end
  challenges = challenges[(limit * (page-1))...(limit * page)]
  challenges.each_with_index do |challenge, index|
    challenge.print(index+1)
  end

  number = VimGolfFinder.ui.ask 'Choose challenge number.'
  number = number.to_i
  if number.instance_of? Fixnum
    if number < 1 or number > limit
      VimGolfFinder.ui.error 'Invalid number'
      return
    end

    id = challenges[number-1].id
    print_challenge(id)
    play(id)
  end
end
random() click to toggle source
# File lib/vimgolf_finder/cli.rb, line 70
def random
  challenges = VimGolfFinder.parser.fetch_challenges
  challenge = challenges.shuffle.first
  challenge.print

  id = challenge.id
  print_challenge(id)
  play(id)
end
solves() click to toggle source
# File lib/vimgolf_finder/cli.rb, line 81
def solves
  challenges = VimGolfFinder.parser.fetch_challenges

  solved_challenges = []
  challenges.each do |challenge|
    if challenge.solved?
      solved_challenges << challenge
    end
  end

  solved_challenges.each_with_index do |challenge, index|
    challenge.print(index+1)
  end

  number = VimGolfFinder.ui.ask 'Choose challenge number.'
  number = number.to_i
  if number.instance_of? Fixnum
    if number < 1 or number > solved_challenges.count
      VimGolfFinder.ui.error 'Invalid number'
      return
    end

    id = challenges[number-1].id
    print_challenge(id)
    play(id)
  end
end

Private Instance Methods

play(id) click to toggle source
# File lib/vimgolf_finder/cli.rb, line 123
def play(id)
  result = VimGolfFinder.ui.ask 'Do you want to play? (y/n)'

  if result.eql?('y') || result.eql?('yes')
    system("vimgolf put #{id}")

    solves = VimGolfFinder.ui.ask 'Solves? (y/n)'

    if solves.eql?('y') || solves.eql?('yes')
      VimGolfFinder::Challenge.solve(id)
      VimGolfFinder.ui.info "[\u2713] Checked!"
    end
  end
end
print_challenge(id) click to toggle source