Class: Whatsa::CLI
Instance Method Summary collapse
- #ask ⇒ Object
- #clear_screen ⇒ 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(treat_as_query = false) ⇒ Object
- #instructions ⇒ Object
- #run ⇒ Object
- #summarize(text) ⇒ Object
- #summary_helpline ⇒ Object
- #welcome ⇒ Object
Methods included from Format
#bulletize_lines, #heading_to_title, #remove_citation_markers, #url_friendly, #word_wrap
Instance Method Details
permalink #ask ⇒ Object
[View source]
29 30 31 32 |
# File 'lib/whatsa/cli.rb', line 29 def ask puts "What would you like to know about?" gets_command(true) end |
permalink #clear_screen ⇒ Object
[View source]
8 9 10 11 |
# File 'lib/whatsa/cli.rb', line 8 def clear_screen 50.times { puts "\n" } system('clear') end |
permalink #display_dmb(dmb) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/whatsa/cli.rb', line 71 def display_dmb(dmb) raise TypeError unless dmb.is_a?(Whatsa::Disambig) clear_screen stripped_title = dmb.title.gsub("(disambiguation)", "").strip puts word_wrap("Hmmm... #{stripped_title} could mean a few different things:\n") dmb.descriptions.each_with_index do |kvp, i| num = "#{i + 1}. " item = "#{kvp[0].to_s}" desc = kvp[1].empty? ? "" : " - #{kvp[1]}" puts word_wrap(num + item + desc, num.length) end puts "\nPlease select a choice, either by name or number." end |
permalink #display_sections(text) ⇒ Object
[View source]
85 86 87 88 89 90 91 92 93 |
# File 'lib/whatsa/cli.rb', line 85 def display_sections(text) text = text.article if text.is_a?(Whatsa::Section) clear_screen puts word_wrap("Here are some specific subjects about '#{text.title}':\n") text.section_titles.each_with_index do |title, i| puts word_wrap("#{i + 1}. #{title}", "#{i + 1}. ".length) end puts "\nPlease select a choice, either by name or number." end |
permalink #full(text) ⇒ Object
[View source]
139 140 141 142 143 144 |
# File 'lib/whatsa/cli.rb', line 139 def full(text) clear_screen puts word_wrap(text.full_text) full_text_helpline gets_command end |
permalink #full_text_helpline ⇒ Object
[View source]
102 103 104 105 106 |
# File 'lib/whatsa/cli.rb', line 102 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 |
permalink #get_dmb_choice(disambig) ⇒ Object
[View source]
108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/whatsa/cli.rb', line 108 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 puts "Hmm... I don't think that's a valid choice. Try again!" end disambig.choose_article(choice) end |
permalink #get_sec_choice(article) ⇒ Object
[View source]
120 121 122 123 124 125 126 127 128 |
# File 'lib/whatsa/cli.rb', line 120 def get_sec_choice(article) display_sections(article) loop do choice = gets_command section = article.choose_section(choice) return section if section puts "Hmm... I don't think that's a valid section. Try again!" end end |
permalink #gets_command(treat_as_query = false) ⇒ Object
[View source]
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/whatsa/cli.rb', line 34 def gets_command(treat_as_query = false) command_type = { "exit" => "exit", "quit" => "exit", "q" => "exit", "help" => "help", "h" => "help", "instructions": ("help" unless treat_as_query), "new" => "new", "different" => ("new" unless treat_as_query), "something else" => ("new" unless treat_as_query), "again" => ("new" unless treat_as_query), "other" => ("other" unless treat_as_query), "categories" => ("other" unless treat_as_query), "category" => ("other" unless treat_as_query), "dig" => ("other" unless treat_as_query), "" => "blank" } loop do print "> " input = gets.strip.downcase case command_type[input] when "exit" then exit when "help" then instructions when "new" then return run when "other" then return "other" when "" then next else return input end end end |
permalink #instructions ⇒ Object
[View source]
19 20 21 22 23 24 25 26 27 |
# File 'lib/whatsa/cli.rb', line 19 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!" puts "" end |
permalink #run ⇒ Object
[View source]
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 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
# File 'lib/whatsa/cli.rb', line 146 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 if ARGV.empty? ########## # PART ONE welcome instructions ########## # PART TWO # get a search term input = ask else input = ARGV.join(" ") ARGV.clear end 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 word_wrap("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 |
permalink #summarize(text) ⇒ Object
[View source]
130 131 132 133 134 135 136 137 |
# File 'lib/whatsa/cli.rb', line 130 def summarize(text) clear_screen 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 |
permalink #summary_helpline ⇒ Object
[View source]
95 96 97 98 99 100 |
# File 'lib/whatsa/cli.rb', line 95 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 |
permalink #welcome ⇒ Object
[View source]
13 14 15 16 17 |
# File 'lib/whatsa/cli.rb', line 13 def welcome clear_screen puts "Whatsa is a quick-and-dirty lookup utility, powered by Wikipedia!" puts "-----------------------------------------------------------------" end |