Class: Whatsa::CLI
- Inherits:
-
Object
- Object
- Whatsa::CLI
- Defined in:
- lib/whatsa/cli.rb
Instance Method Summary collapse
- #ask ⇒ Object
- #display_dmb(dmb) ⇒ Object
- #display_sections(text) ⇒ Object
- #full(text) ⇒ Object
- #full_text_helpline ⇒ Object
- #get_dmb_choice(disambig) ⇒ Object
- #get_sec_choice(article) ⇒ Object
- #gets_command ⇒ Object
- #instructions ⇒ Object
- #run ⇒ Object
- #summarize(text) ⇒ Object
- #summary_helpline ⇒ Object
- #welcome ⇒ Object
- #word_wrap(text) ⇒ Object
Instance Method Details
#ask ⇒ Object
18 19 20 21 |
# File 'lib/whatsa/cli.rb', line 18 def ask puts "What would you like to know about?" gets_command end |
#display_dmb(dmb) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/whatsa/cli.rb', line 57 def display_dmb(dmb) raise TypeError unless dmb.is_a?(Whatsa::Disambig) system("clear") stripped_title = dmb.title.gsub("(disambiguation)", "").strip puts "Hmmm... #{stripped_title} could mean a few different things:\n" dmb.descriptions.each_with_index do |kvp, i| desc = kvp[1].empty? ? "" : " - #{kvp[1]}" puts "#{i + 1}. #{kvp[0].to_s}" + desc end puts "\nPlease select a choice, either by name or number." end |
#display_sections(text) ⇒ Object
69 70 71 72 73 74 75 |
# File 'lib/whatsa/cli.rb', line 69 def display_sections(text) text = text.article if text.is_a?(Whatsa::Section) system("clear") puts "Here are some specific subjects about '#{text.title}':\n" text.section_titles.each_with_index {|title, i| puts "#{i + 1}. #{title}"} puts "\nPlease select a choice, either by name or number." end |
#full(text) ⇒ Object
116 117 118 119 120 121 |
# File 'lib/whatsa/cli.rb', line 116 def full(text) system("clear") puts word_wrap(text.full_text) full_text_helpline gets_command end |
#full_text_helpline ⇒ Object
84 85 86 87 88 |
# File 'lib/whatsa/cli.rb', line 84 def full_text_helpline puts " _______________________________________________________________" puts " (type 'other' if you'd like to select a specific category of" puts " information on the topic, or 'new' to find out about something else)" end |
#get_dmb_choice(disambig) ⇒ Object
90 91 92 93 94 95 96 97 98 99 |
# File 'lib/whatsa/cli.rb', line 90 def get_dmb_choice(disambig) display_dmb(disambig) choice = nil loop do choice = gets_command in_choices = disambig.choices.detect { |c| c.downcase == choice } break if in_choices || choice.to_i > 0 end disambig.choose_article(choice) end |
#get_sec_choice(article) ⇒ Object
101 102 103 104 105 |
# File 'lib/whatsa/cli.rb', line 101 def get_sec_choice(article) display_sections(article) choice = gets_command article.choose_section(choice) end |
#gets_command ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/whatsa/cli.rb', line 23 def gets_command input = nil loop do print "> " input = gets.strip.downcase case input when "exit" exit when "help" instructions when "new" run else break end end input end |
#instructions ⇒ Object
9 10 11 12 13 14 15 16 |
# File 'lib/whatsa/cli.rb', line 9 def instructions puts "Enter a word (or phrase) to get a brief summary of that subject." puts "If you aren't satisfied, type 'more' to get a slightly longer" puts "description, or type 'other' to get a list of specific categories" puts "regarding that subject, which you can choose by number or name." puts "You can type 'exit' to close the program (or 'help' to receive" puts "these instructions again) at any time!" end |
#run ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/whatsa/cli.rb', line 123 def run # This is the main method for running the CLI. # It consists of three main parts: # Part one - decorative - Welcome the user, give instructions for use # Part two - initialize - Get a query from the user and try to make an # article out of whatever comes back (results page, # disambiguation page, or article) # Part three - article - We've gotten to an article, display it to the user # and loop as long as they wish to select different # sections ########## # PART ONE welcome instructions ########## # PART TWO # get a search term input = ask scraper = Whatsa::Scraper.new(input) # get an article from the search, or restart the loop if it can't be found if scraper.not_found? print "Hmmm... I don't know what '#{input}' means!\nPress 'enter' to try something else." gets run elsif scraper.disambig? article = get_dmb_choice(scraper.make_disambig) else article = scraper.make_article end ############ # PART THREE # summarize that article input = summarize(article) # the only valid input here that would go uncaught is "other", so # keep asking until you get a caught input (logic determined by # #gets_command, e.g. "help", "exit", "new") or "other" loop { input = input == "other" ? summarize(get_sec_choice(article)) : gets_command } end |
#summarize(text) ⇒ Object
107 108 109 110 111 112 113 114 |
# File 'lib/whatsa/cli.rb', line 107 def summarize(text) system("clear") return full(text) if text.summary == text.full_text puts word_wrap(text.summary) summary_helpline input = gets_command input == "more" ? full(text) : input end |
#summary_helpline ⇒ Object
77 78 79 80 81 82 |
# File 'lib/whatsa/cli.rb', line 77 def summary_helpline puts " _______________________________________________________________" puts " (type 'more' for a potentially longer summary, 'other' if you'd" puts " like to select a specific category of information on the topic," puts " or 'new' to find out about something else)" end |
#welcome ⇒ Object
3 4 5 6 7 |
# File 'lib/whatsa/cli.rb', line 3 def welcome system('clear') puts "Whatsa is a quick-and-dirty lookup utility, powered by Wikipedia!" puts "-----------------------------------------------------------------" end |
#word_wrap(text) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/whatsa/cli.rb', line 42 def word_wrap(text) count = 0 words = text.split(/ /) words.each_with_index do |word, index| count += word.length + 1 if count > 80 words.insert(index, "\n") count = 0 elsif word.index("\n") count = word.length end end words.join(" ").gsub(/^ /, "") end |