Class: UI

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_doc/cli/ui.rb

Direct Known Subclasses

Scraper

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#counterObject (readonly)

Properties===================


3
4
5
# File 'lib/ruby_doc/cli/ui.rb', line 3

def counter
  @counter
end

Class Method Details

.browse_control(identifier, page) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/ruby_doc/cli/ui.rb', line 75

def self.browse_control(identifier, page) 
  prompt
  input = my_gets
  
  case input
  when "n" 
    paginate(identifier) 
  when "m" 
    RubyDoc::CLI.start 
  when "exit!" 
    exit!
  end
  
  if !input.to_i.between?(1,page.count) 
    browse_error(input, identifier, page) 
  else 
    Processor.load_doc(page[input.to_i-1])
  end
end

.browse_error(input, identifier, page) ⇒ Object



300
301
302
303
304
305
306
307
308
# File 'lib/ruby_doc/cli/ui.rb', line 300

def self.browse_error(input, identifier, page)  
  if identifier == "Last"
    list_error(page)
    browse_control(identifier, page)
  else
    browse_list_error(page)
    browse_control(identifier, page)
  end
end

.browse_list(page, identifier) ⇒ Object



178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# File 'lib/ruby_doc/cli/ui.rb', line 178

def self.browse_list(page, identifier) 
  puts sepL
  page.each_with_index do |doc, index|  
    
    if doc.type == "Class" || doc.type == "Module"
      li = ["#{index + 1}.".yellow, doc.name.light_cyan]
    else
      li = ["#{index + 1}.".yellow, doc.name.cyan]
    end
    
    puts li.join(" ")
  end
  
  if identifier == "Last"
    puts sepR
    puts "End of List".red
  end
  puts sepR 
  
  last_page_menu(page) if identifier == "Last"
  browse_menu(page) if !(identifier == "Last")
  
  browse_control(identifier, page)
end

.browse_list_error(page) ⇒ Object



310
311
312
# File 'lib/ruby_doc/cli/ui.rb', line 310

def self.browse_list_error(page)
  print redH("\n Enter # to view, 'n' for next page 'm' for main or 'exit!' to leave ")
end

.browse_menu(page) ⇒ Object



247
248
249
250
251
252
253
# File 'lib/ruby_doc/cli/ui.rb', line 247

def self.browse_menu(page) 
  puts "To ".cyan + "View ".yellow + "(Enter ".cyan + "#".yellow + ")".cyan + " eg. #{page.count.to_s} for #{page[page.count-1].name}".black
  puts "To ".cyan + "Browse Next Page ".yellow + "(Enter ".cyan + "'n'".yellow + ")".cyan
  puts "To Return To".cyan + " Main Menu".yellow + " (Enter ".cyan + "'m'".yellow + ")".cyan
  puts "To".cyan + " Leave".yellow + " (".cyan + "'exit!'".yellow + ")\n".cyan
  print randQ
end

.cyanH(str) ⇒ Object

red highlight



358
359
360
# File 'lib/ruby_doc/cli/ui.rb', line 358

def self.cyanH(str) 
  str.colorize(color: :white, background: :cyan)
end

.display_class(doc) ⇒ Object



115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/ruby_doc/cli/ui.rb', line 115

def self.display_class(doc) 
  UI.sepL
  puts "TITLE: ".cyan + doc.name.upcase 
  puts "TYPE: ".cyan + doc.type.upcase
  puts "\nDESCRIPTION:".cyan 
  puts doc.description
  puts "Methods: ".cyan + "#{doc.methods.count}".yellow
  puts "Source: #{doc.url}".red 
  puts sepR
  
  display_class_menu(doc)
  display_class_control(doc)
end

.display_class_control(doc) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/ruby_doc/cli/ui.rb', line 45

def self.display_class_control(doc) 
  prompt
  input = my_gets
  
  case input
  when "1" 
    method_list(doc)
  when "m" 
    RubyDoc::CLI.start
  when "exit!" 
    exit!
  else 
    display_class_error(doc)
  end 
end

.display_class_error(doc) ⇒ Object



290
291
292
293
# File 'lib/ruby_doc/cli/ui.rb', line 290

def self.display_class_error(doc) 
  print redH("\n Please enter '1' to view methods, 'm' for main, or 'exit!' to leave ")
  display_class_control(doc)
end

.display_class_menu(doc) ⇒ Object



234
235
236
237
238
239
# File 'lib/ruby_doc/cli/ui.rb', line 234

def self.display_class_menu(doc) 
  puts "To ".cyan + "View Methods ".yellow + "For".cyan + " #{doc.name}".yellow + " (Enter ".cyan + "'1'".yellow + ")".cyan
  puts "To Return To".cyan + " Main Menu".yellow + " (Enter ".cyan + "'m'".yellow + ")".cyan
  puts "To".cyan + " Leave".yellow + " (".cyan + "'exit!'".yellow + ")\n".cyan
  print randQ
end

.display_method(doc) ⇒ Object



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/ruby_doc/cli/ui.rb', line 145

def self.display_method(doc) 
  UI.sepL
  puts "Title: ".cyan + doc.name.upcase 
  puts "Type: ".cyan + doc.type.upcase
  puts "\nDescription:".cyan 
  puts doc.doc
  puts "Source: #{doc.url}".red 
  puts sepR
   
  #-----------future fix------------#
  # description = doc.doc
  # puts uie.wrapped(description, 55)
  #-----------future fix------------#
  
  display_method_menu 
  display_method_control
end

.display_method_controlObject



61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/ruby_doc/cli/ui.rb', line 61

def self.display_method_control 
  prompt
  input = my_gets
  
  case input
  when "m" 
    RubyDoc::CLI.start
  when "exit!"
    exit!
  else 
    display_method_error
  end 
end

.display_method_errorObject



295
296
297
298
# File 'lib/ruby_doc/cli/ui.rb', line 295

def self.display_method_error 
  print redH("\n Please enter 'm' for main menu or 'exit!' to leave ")
  display_method_control
end

.display_method_menuObject



241
242
243
244
245
# File 'lib/ruby_doc/cli/ui.rb', line 241

def self.display_method_menu 
  puts "To Return To".cyan + " Main Menu".yellow + " (Enter ".cyan + "'m'".yellow + ")".cyan
  puts "To".cyan + " Leave".yellow + " (".cyan + "'exit!'".yellow + ")\n".cyan
  print randQ
end

.last_page_menu(page) ⇒ Object



255
256
257
258
259
260
# File 'lib/ruby_doc/cli/ui.rb', line 255

def self.last_page_menu(page)
  puts "To ".cyan + "View ".yellow + "(Enter ".cyan + "#".yellow + ")".cyan + " eg. #{page.count.to_s} for #{page[page.count-1].name}".black
  puts "To Return To".cyan + " Main Menu".yellow + " (Enter ".cyan + "'m'".yellow + ")".cyan
  puts "To".cyan + " Leave".yellow + " (".cyan + "'exit!'".yellow + ")\n".cyan
  print randQ
end

.learn_moreObject



203
204
205
206
207
208
209
210
211
212
213
214
# File 'lib/ruby_doc/cli/ui.rb', line 203

def self.learn_more 
  puts "\nCOMING SOON".cyan
  puts "=".black*56
  puts Scraper.coming_soon
  
  puts "\nCHANGELOG".cyan
  puts "=".black*56
  puts Scraper.changelog
  
  main_menu
  main_control
end

.list_control(matches) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/ruby_doc/cli/ui.rb', line 29

def self.list_control(matches) 
  prompt
  input = my_gets
  
  if input == "m" 
    RubyDoc::CLI.start
  elsif input == "exit!"
    exit!
  elsif !input.to_i.between?(1,matches.count) 
    list_error(matches)
  else 
    Processor.load_doc(matches[input.to_i-1])
  end 
  list_control(matches)
end

.list_error(matches) ⇒ Object



282
283
284
# File 'lib/ruby_doc/cli/ui.rb', line 282

def self.list_error(matches) 
  print redH("\n Enter selection number, 'm' for main or 'exit!' to leave ")
end

.list_menu(matches) ⇒ Object



227
228
229
230
231
232
# File 'lib/ruby_doc/cli/ui.rb', line 227

def self.list_menu(matches) 
  puts "To ".cyan + "View ".yellow + "(Enter ".cyan + "#".yellow + ")".cyan + " eg. #{matches.count.to_s} for #{matches[matches.count-2].name}".black
  puts "To return to".cyan + " Main Menu".yellow + " (Enter ".cyan + "'m'".yellow + ")".cyan
  puts "To".cyan + " Leave".yellow + " (".cyan + "'exit!'".yellow + ")\n".cyan
  print randQ
end

.loading_animationObject

Goes inside iterator - last line



330
331
332
333
334
335
336
337
338
339
340
# File 'lib/ruby_doc/cli/ui.rb', line 330

def self.loading_animation 
  loading = ""
  print loading << ". ".cyan if 
  @counter == 50 || @counter == 100 || @counter == 150 || @counter == 200 || 
  @counter == 250 || @counter == 300 || @counter == 350 || @counter == 400 || 
  @counter == 450 || @counter == 500 || @counter == 550 || @counter == 600 || 
  @counter == 650 || @counter == 700 || @counter == 750 || @counter == 800 || 
  @counter == 850 || @counter == 900 || @counter == 950 || @counter == 1000 || 
  @counter == 1150 || @counter == 1200 || @counter == 1250 || @counter == 1300 || 
  @counter == 1350 || @counter == 1400 || @counter == 1450 || @counter == 1500 
end

.loading_messageObject

Goes above iterator



326
327
328
# File 'lib/ruby_doc/cli/ui.rb', line 326

def self.loading_message 
  puts cyanH(" Loading Database ") + " ☠️"
end

.main_controlObject

Control=====================


9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/ruby_doc/cli/ui.rb', line 9

def self.main_control 
  prompt
  input = my_gets
  
  if input.split.size > 1 
    main_error
  elsif input == "b" 
    paginate("start") 
  elsif input == "exit!" 
    exit!
  elsif input == "?" 
    learn_more
  else 
    matches = Processor.search(input)
    
    search_error if matches.empty?
    search_list(matches) if matches
  end
end

.main_errorObject

Error======================


262
263
264
265
266
# File 'lib/ruby_doc/cli/ui.rb', line 262

def self.main_error 
  sleep(0.1)
  print redH("\n Input Must Be 1 Word, 'b' to browse, or 'exit!' to leave ")
  main_control
end
Menus======================


216
217
218
219
220
221
222
223
224
225
# File 'lib/ruby_doc/cli/ui.rb', line 216

def self.main_menu 
  puts sepR#
  puts "Enter a ".cyan + "word ".yellow + "associated with the Ruby Language & I will ".cyan
  puts "try to find a match in my database for you.".cyan
  sepL#
  puts "\You can also enter".cyan + " 'b'".yellow + " to browse instead.".cyan + " Happy Hunting!".cyan
  puts "=".black*56
  puts "Enter '?' to Learn More about Alpha Ruby-Doc".black
  print cyanH("\n If You're Searching... Single Word Inputs Only Please ")
end

.method_list(doc) ⇒ Object



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/ruby_doc/cli/ui.rb', line 129

def self.method_list(doc) 
  puts sepR
  doc.methods.each_with_index do |method, index| 
    
    if !method.nil?
      li = ["#{index + 1}.".yellow, method.name.cyan]
      puts li.join(" ")
    end
     
  end
  puts sepR
  
  list_menu(doc.methods) 
  list_control(doc.methods)
end

.my_getsObject

Input======================


5
6
7
# File 'lib/ruby_doc/cli/ui.rb', line 5

def self.my_gets 
  gets.strip.to_s.downcase
end

.nil_errorObject



286
287
288
# File 'lib/ruby_doc/cli/ui.rb', line 286

def self.nil_error
  print redH("\n Enter selection number, 'm' for main or 'exit!' to leave ")
end

.paginate(identifier) ⇒ Object



163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'lib/ruby_doc/cli/ui.rb', line 163

def self.paginate(identifier) 
  
  case identifier
  when "start" 
    Processor.page1
  when "Page1" 
    Processor.page2
  when "Page2" 
    Processor.page3
  when "Page3" 
    Processor.last
  end
  
end

.promptObject

Colors/Candy Props===============


342
343
344
# File 'lib/ruby_doc/cli/ui.rb', line 342

def self.prompt 
  print " >> ".cyan
end

.randQObject

Quote Scraper==================


316
317
318
319
320
321
322
323
# File 'lib/ruby_doc/cli/ui.rb', line 316

def self.randQ
  html = Nokogiri::HTML(open("https://fortrabbit.github.io/quotes/"))
  container = html.search(".row.gutter-l.wrap")
  
  quotes = container.search("p").map {|quote| quote.text.gsub(/[\n]\s+/, "")}
  quote = " "+ quotes[rand(0..180)]+ " "
  wrapped(quote, 55).black
end

.redH(str) ⇒ Object



354
355
356
# File 'lib/ruby_doc/cli/ui.rb', line 354

def self.redH(str) 
  str.colorize(color: :white, background: :red)
end

.search_errorObject



268
269
270
271
272
273
274
275
276
277
278
279
280
# File 'lib/ruby_doc/cli/ui.rb', line 268

def self.search_error 
  puts "\nNO CIGAR!".red
  puts "I couldn't find what you're looking for.".black 
  puts "How about trying a Ruby ".black + "Method" + ", ".black + "Class" + " or ".black + "Module" + " name.".black
  puts "=".black*56
  
  puts "\nNOT SURE?".red
  puts "You can always browse with ".black + "'b'" + " & learn something new.".black + ":)"
  puts "=".black*56
  
  print redH("\n Try a new word, enter 'b' to browse, or 'exit!' to leave ")
  main_control
end

.search_list(matches) ⇒ Object

Display=====================


95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/ruby_doc/cli/ui.rb', line 95

def self.search_list(matches) 
  UI.sepL
  matches.each_with_index do |doc, index| 
    
    if doc.type == "Class" || doc.type == "Module"
      li = ["#{index + 1}.".yellow, doc.name.light_cyan]
    else
      li = ["#{index + 1}.".yellow, doc.name.cyan]
    end
    
    puts li.join(" ")
  end
  puts sepR
  puts "Classes and Modules are".cyan + " Highlighted".light_cyan
  puts sepR
  
  list_menu(matches)
  list_control(matches)
end

.sepLObject



346
347
348
# File 'lib/ruby_doc/cli/ui.rb', line 346

def self.sepL 
  puts "=".cyan*28 + "=".white*28
end

.sepRObject



350
351
352
# File 'lib/ruby_doc/cli/ui.rb', line 350

def self.sepR 
  "=".white*28 + "=".cyan*28
end

.signatureObject

Signature====================


380
381
382
383
384
385
# File 'lib/ruby_doc/cli/ui.rb', line 380

def self.signature 
    puts "\n"+"=".white*28 + "=".cyan*28 
puts %q(               ALPHA™ 
╦═╗╦ ╦╔╗ ╦ ╦  ╔╦╗╔═╗╔═╗╔═╗
╠╦╝║ ║╠╩╗╚╦╝   ║║║ ║║  ╚═╗
╩╚═╚═╝╚═╝ ╩   ═╩╝╚═╝╚═╝╚═╝).cyan end

.wrapped(s, width = 78) ⇒ Object

cyan highlight



362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
# File 'lib/ruby_doc/cli/ui.rb', line 362

def self.wrapped(s, width=78) 
  lines = []
  line = ""
 
  s.split(/\s+/).each do |word|
    if line.size + word.size >= width
      lines << line
      line = word
    elsif line.empty?
     line = word
    else
     line << " " << word
   end
   end
   lines << line if line
  return lines.join "\n"
end