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



305
306
307
308
309
310
311
312
313
# File 'lib/ruby_doc/cli/ui.rb', line 305

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



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

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



315
316
317
# File 'lib/ruby_doc/cli/ui.rb', line 315

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



252
253
254
255
256
257
258
# File 'lib/ruby_doc/cli/ui.rb', line 252

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



368
369
370
# File 'lib/ruby_doc/cli/ui.rb', line 368

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

.display_class(doc) ⇒ Object

——————-docs———————–



109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/ruby_doc/cli/ui.rb', line 109

def self.display_class(doc) 
  UI.sepL
  puts "TITLE: ".cyan + doc.name.upcase 
  puts "TYPE: ".cyan + doc.type.upcase
  puts "\nDESCRIPTION:".cyan 
  puts doc.documentation
  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



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.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



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

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



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

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

put back in strings



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

def self.display_method(doc) 
  UI.sepL
  puts "Title: ".cyan + doc.name.upcase 
  puts "Type: ".cyan + doc.type.upcase
  puts "\nDescription:".cyan 
  puts doc.documentation
  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



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

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



300
301
302
303
# File 'lib/ruby_doc/cli/ui.rb', line 300

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



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

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



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

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

—————–learn more——————-



206
207
208
209
210
211
212
213
214
215
216
217
218
219
# File 'lib/ruby_doc/cli/ui.rb', line 206

def self.learn_more 
  puts "\n" + sepB
  puts "COMING SOON".cyan
  puts sepB
  puts "\n" + Scraper.coming_soon + "\n"
  
  puts sepB
  puts "CHANGELOG".cyan
  puts sepB
  puts "\n" + Scraper.changelog
  
  main_menu
  main_control
end

.list_control(matches) ⇒ Object



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

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



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

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

.list_menu(matches) ⇒ Object



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

def self.list_menu(matches) 
  puts "To ".cyan + "View ".yellow + "(Enter ".cyan + "#".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

.loading_animationObject

Goes inside iterator - last line



335
336
337
338
339
340
341
342
343
344
345
# File 'lib/ruby_doc/cli/ui.rb', line 335

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



331
332
333
# File 'lib/ruby_doc/cli/ui.rb', line 331

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======================


267
268
269
270
271
# File 'lib/ruby_doc/cli/ui.rb', line 267

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======================


221
222
223
224
225
226
227
228
229
230
# File 'lib/ruby_doc/cli/ui.rb', line 221

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
  sepB
  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



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

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



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

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

.paginate(identifier) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/ruby_doc/cli/ui.rb', line 95

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

——————-input———————-



348
349
350
# File 'lib/ruby_doc/cli/ui.rb', line 348

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

.randQObject

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


321
322
323
324
325
326
327
328
# File 'lib/ruby_doc/cli/ui.rb', line 321

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

.rdo_prefixObject

——————strings———————



372
373
374
# File 'lib/ruby_doc/cli/ui.rb', line 372

def self.rdo_prefix 
  "https://ruby-doc.org/core-2.4.3/"
end

.redH(str) ⇒ Object

——————messages——————–



364
365
366
# File 'lib/ruby_doc/cli/ui.rb', line 364

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

.search_errorObject



273
274
275
276
277
278
279
280
281
282
283
284
285
# File 'lib/ruby_doc/cli/ui.rb', line 273

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
  sepB
  
  puts "\nNOT SURE?".red
  puts "You can always browse with ".black + "'b'" + " & learn something new.".black + ":)"
  sepB
  
  print redH("\n Try a new word, enter 'b' to browse, or 'exit!' to leave ")
  main_control
end

.search_list(matches) ⇒ Object

——————-lists———————-



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

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

.sepBObject



360
361
362
# File 'lib/ruby_doc/cli/ui.rb', line 360

def self.sepB 
  "=".black*56
end

.sepLObject

—————–separators——————-



352
353
354
# File 'lib/ruby_doc/cli/ui.rb', line 352

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

.sepRObject



356
357
358
# File 'lib/ruby_doc/cli/ui.rb', line 356

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

.signatureObject

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


397
398
399
400
401
402
# File 'lib/ruby_doc/cli/ui.rb', line 397

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

.view_fullObject



123
124
125
# File 'lib/ruby_doc/cli/ui.rb', line 123

def self.view_full
"\nTo View Full Documentation Enter 'full'\n".cyan
end

.wrapped(s, width = 78) ⇒ Object

currently not being used



379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
# File 'lib/ruby_doc/cli/ui.rb', line 379

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