Class ApplicationController
In: app/controllers/application.rb
Parent: ActionController::Base

Filters added to this controller apply to all controllers in the application. Likewise, all the methods added will be available for all controllers.

Methods

Constants

MaxRows = 6   See ActionController::Base for details Uncomment this to filter the contents of submitted sensitive data parameters from your application log (in this case, all fields with names like "password"). filter_parameter_logging :password
WordsDir = "words"
MaxWords = 30
SentencesDir = 'sentences'
LineLen = 150

Public Instance methods

if the module does not define an action for backspace, it retarts the module

[Source]

     # File app/controllers/application.rb, line 648
648:         def backspace
649:                 first_time
650: #               session[:spoken]="modules:modules"
651:         end

[Source]

     # File app/controllers/application.rb, line 461
461:         def backspace_icon
462: #               "<"
463:                 ??{ <IMG height=60 src= "/images/no.jpg" alt ="something
464: else" width=60 /> }
465:         end

session garbage collection

[Source]

     # File app/controllers/application.rb, line 492
492:         def clear_unused_in_session
493:                 session[:choices]=session[:start_choices]=nil
494:                 session[:user_choice]=nil
495:         session[:computer_choice]=nil
496:                 session[:sticks]=nil
497:                 session[:displayed]=nil
498:                 session[:picked]=nil
499:                 session[:toggle]=nil
500:                 session[:display]=nil
501:                 session[:pictures]=nil
502:                 session[:wrong]=nil
503:                 session[:freeze]=nil
504:                 session[:answer]=nil
505:                 session[:state]=nil
506:                 session[:correct]=nil
507:                 session[:picfolder]=nil
508:                 session[:separator]=nil
509: #               session[:nitems]=nil
510:         end

[Source]

     # File app/controllers/application.rb, line 656
656:         def designers
657:                 nil
658:         end

default action when down is selected

[Source]

     # File app/controllers/application.rb, line 251
251:   def down
252:         session[:selected_item]=get_selected_item+1
253:                 updownevent
254:         redirect_to :action => "index"
255:   end

[Source]

     # File app/controllers/application.rb, line 451
451:         def down_icon
452: #               "v"
453:                 ??{<IMG height=60 src="/images/down.gif" alt ="down"
454:                         width=60 />}
455:         end

extras is for module-specific additions to index

[Source]

     # File app/controllers/application.rb, line 471
471:         def extras
472:         end

filechoices? is true for static data, the kind that can be stored in files and locally modified

[Source]

     # File app/controllers/application.rb, line 311
311:         def filechoices?
312:                 true
313:         end

first_time will often be overridden

[Source]

     # File app/controllers/application.rb, line 653
653:         def first_time
654:                 redirect_to :action => "index"
655:         end

~

[Source]

     # File app/controllers/application.rb, line 127
127:   def format_pic (pic)
128:         '<IMG height=150 src= "/'+pic + '" width=200 /> '
129:   end

get_and_reset_typed helps modules contribute text via session[:typed] which this function resets

[Source]

     # File app/controllers/application.rb, line 258
258:   def get_and_reset_typed
259:         t = session[:typed]
260:         session[:typed]=nil
261:         t
262:   end

[Source]

     # File app/controllers/application.rb, line 298
298:         def get_bgcolor
299:                 session[:bgcolor] ||= 'black'
300:         end

[Source]

     # File app/controllers/application.rb, line 511
511:         def get_buttons
512:                 {"up" => up_icon, "down" => down_icon,
513:                                "backspace" => backspace_icon,
514:                                 "select" => select_icon}
515:         end

get_choices is a getter for session[:choices] if that is nil it consults filechoices to either pick up choices from the appropriate file or invokes start_choices

[Source]

     # File app/controllers/application.rb, line 318
318:         def get_choices
319:                 session[:choices] ||
320:                 if filechoices?
321:                         if @thiscontroller
322:                                 fd=MenuFolder.chop
323:                                 Dir.mkdir(fd) unless File.directory?(fd)
324:                                 fch=MenuFolder+@thiscontroller+'choices.txt'
325:                                 if File.exist?(fch)
326:                                         #logger.info "reading #{fch}"
327:                                         chs= IO.readlines(fch)
328:                                         chs.collect!{|s|s.strip}
329:                                 else
330:                                         chs=start_choices
331:                                         File.open(fch,"w") do |f|
332:                                                 f.puts chs
333:                                         end
334:                                 end
335:                                 chs
336:                         else
337:                                 start_choices
338:                         end
339:                 else
340:                         start_choices
341:                 end
342:         end
 get_choices_size is used to

normalize selected_item,

 so 0 is not ok

[Source]

     # File app/controllers/application.rb, line 386
386:   def get_choices_size
387:         @choices = get_choices
388:         @choices.size ==0? 1: @choices.size
389:   end

[Source]

     # File app/controllers/application.rb, line 516
516:         def get_delay
517:                 session[:delay] ||= 5
518:         end

[Source]

     # File app/controllers/application.rb, line 444
444:         def get_displayed
445:                 session[:displayed] ||= ""
446:         end

get_folder returns i‘th folder

[Source]

    # File app/controllers/application.rb, line 60
60:         def get_folder(i)
61:                 fl=get_folder_list
62:                 fl.empty? ? '': fl[i% fl.size]
63:         end

current folder for picbrowser, recognize,..

[Source]

    # File app/controllers/application.rb, line 56
56:         def get_folder_index
57:                 session[:folder_index] ||= 0
58:         end

get_folder_list returns array of image folders

[Source]

    # File app/controllers/application.rb, line 49
49:         def get_folder_list
50:                 g=Giver.new
51:                 folders=g.get_subdirs("images")
52:                 logger.info "image folders #{folders}"
53:                 folders
54:         end

one choice is shown in selected_font get_highlighted_choice returns it

[Source]

     # File app/controllers/application.rb, line 148
148:         def get_highlighted_choice
149:                 if @choices.empty?
150:                         ''
151:                 else
152:                         @choices[@selected_item% get_choices_size]
153:                 end
154:         end

returns a string of keywords the user has picked used by wikinext to select wikipedia pages for next word prediction

[Source]

    # File app/controllers/application.rb, line 41
41:   def get_keywords
42:                 session[:keywords] || ''
43:         end

get_match returns the matching portion between string s and regular expr rx if any

[Source]

     # File app/controllers/application.rb, line 348
348:         def get_match (s, rx)
349:                 begin
350:                         s.match(rx)[0]
351:                 rescue
352:                         ''
353:                 end
354:         end

get_modules returns corr session ensuring an item in it is ‘modules‘

[Source]

     # File app/controllers/application.rb, line 265
265:         def get_modules
266:                 session[:modules] ||= []
267:                 (session[:modules] << "modules").uniq!
268:                 session[:modules]
269:         end

[Source]

     # File app/controllers/application.rb, line 343
343:         def get_overflow
344:                 session[:overflow] ||=''
345:         end

[Source]

     # File app/controllers/application.rb, line 660
660:         def get_para(lw, item_no)
661:                 displayed=''
662:                 if !lw.empty?
663:                         begin
664:                                 page=Wikipedia.new.page(lw)
665:                                 logger.info("wikipage for #{lw}:")
666:                                 logger.info(page)
667:                                 doc =Hpricot(page)
668:                                 bc=doc.search('#bodyContent')
669:                                 ps = bc/:p
670:                         rescue Exception
671:                                 logger.info  "pageerror #{$!}"
672:                                 ps=[]
673:                                 @title='no wikipedia access'
674:                         end
675:                         if ps.empty?
676:                                 displayed='nothing found'
677:                         elsif ps.size==1
678:                                 paras=[ps.html]
679:                                 lis=bc/:li
680:                                 lis.each { |i| paras << i.html}
681:                                 item_no%=paras.size
682:                                 displayed = paras[item_no]
683:                         else
684:                                 ps.reject! {|pa| pa.inner_text !~ /\w/}
685: #                               @paras.delete_at(0)
686: #                               logger.info('wikipedia paras'+@paras.inspect)
687:                                 item_no%=ps.size
688:                                 displayed = ps[item_no].inner_html
689:                         end
690:                         displayed.gsub!('/wiki/','/wikipedia/clicked/')
691:                 end
692:                 displayed
693:         end

get_pic returns normalized i‘th picture from desired folder

[Source]

    # File app/controllers/application.rb, line 81
81:         def get_pic(folder, i)
82:                 g ||= Giver.new
83:                 rx=Regexp.new(
84:                         'images/(.*(JPG|GIF|PNG))$',
85:                         Regexp::IGNORECASE)
86:                 pictures=g.get_filename_part('images/'+ folder ,rx)
87:                 pic= pictures[i% pictures.size] || ''
88: #               logger.info("giving picture #{i} from "+folder+':
89: #' +pic
90: #)
91:                 pic
92:         end
 get_pic_file returns a filename suitable for

passing to image_tag if what is in name

 is the basename of an image file in the

subfolders of public/images

[Source]

     # File app/controllers/application.rb, line 100
100:         def get_pic_file(name)
101:                 g=Giver.new
102:                 pf=g.get_filename_part(pic_folder,
103:                 Regexp.new('images/(.*/'+name+'\.(JPG|GIF|PNG))$',
104:                         Regexp::IGNORECASE))
105:                 if pf.empty?
106:                         ''
107:                 else
108:                         pf.first
109:                 end
110:         end
 get_pic_from_folder returns filename suitable for

passing to image_tag if what is in name

 is the basename of an image file in the

subfolders of public/images/folder

[Source]

     # File app/controllers/application.rb, line 115
115:         def get_pic_from_folder(name,folder)
116:                 g=Giver.new
117:                 pf=g.get_filename_part("images/#{folder}",
118:                 Regexp.new('images/(.*/'+name+'\.(JPG|GIF|PNG))$',
119:                         Regexp::IGNORECASE))
120:                 if pf.empty?
121:                         ''
122:                 else
123:                         pf.first
124:                 end
125:         end

get_pic_html returns the html for picname if such a pic exists, else empty string

[Source]

     # File app/controllers/application.rb, line 132
132:         def get_pic_html(picname)
133:                 p=get_pic_file picname
134:                 if p.empty?
135:                         p
136:                 else
137:                         format_pic p
138:                 end
139:         end

[Source]

     # File app/controllers/application.rb, line 477
477:         def get_postselected
478:         session[:postselected] ||='</SPAN></FONT></FONT></P>'
479:         end

index is only defined at the application level

[Source]

     # File app/controllers/application.rb, line 474
474:         def get_postunselected
475:                 session[:postunselected] ||='</B></FONT></FONT></P>'
476:         end

[Source]

     # File app/controllers/application.rb, line 480
480:         def get_preselected
481:         session[:preselected] ||=
482: '<P ALIGN=LEFT><FONT COLOR="black"><FONT SIZE="7"
483: STYLE="font-size:15pt"><SPAN STYLE=
484: "background: skyblue;font-family: Times New Roman">'
485:         end

[Source]

     # File app/controllers/application.rb, line 486
486:         def get_preunselected
487:         session[:preunselected] ||=
488: '<P ALIGN=LEFT><FONT COLOR="blue"><FONT SIZE="7"
489: STYLE="font-size: 15pt; font-family: Arial"><B>'
490:         end

get_rxpics returns an array of pictures whose names match rx

[Source]

     # File app/controllers/application.rb, line 142
142:         def get_rxpics(folder, rx)
143:                 g ||= Giver.new
144:                 pictures=g.get_filename_part('images/'+ folder ,rx)
145:         end

[Source]

     # File app/controllers/application.rb, line 278
278:         def get_selected_color
279:                 session[:selected_color] ||= 'yellow'
280:         end

[Source]

     # File app/controllers/application.rb, line 282
282:         def get_selected_font
283:                 session[:selected_font] ||= 'Times New Roman'
284:         end

[Source]

     # File app/controllers/application.rb, line 270
270:   def get_selected_item
271:         session[:selected_item] ||=0
272:   end

[Source]

     # File app/controllers/application.rb, line 274
274:         def get_selected_size
275:                 session[:selected_size] ||= '12pt'
276:         end

separator used to fit more than one choice per line if the separator is nowhere among the choices, reformat_choices tries to rearrange the choices using the separator evenly among the rows

[Source]

    # File app/controllers/application.rb, line 35
35:   def get_separator
36:                 ','
37:   end

stepsize is used in picture editing

[Source]

    # File app/controllers/application.rb, line 45
45:         def get_stepsize
46:                 session[:stepsize] ||= 10
47:   end

get_text is a getter that also processes any contributions from other modules via session[:typed]

[Source]

     # File app/controllers/application.rb, line 357
357:         def get_text
358:                 session[:text] ||= "welcome to skid"
359:                 g=get_and_reset_typed
360:                 if g
361:                         session[:text]+=" #{g} "
362:                 end
363:                 session[:text]
364:         end

[Source]

     # File app/controllers/application.rb, line 467
467:         def get_title
468:                 session[:title] ||= "Welcome to skid"
469:         end

[Source]

     # File app/controllers/application.rb, line 290
290:         def get_unselected_color
291:                 session[:unselected_color] ||= 'blue'
292:         end

[Source]

     # File app/controllers/application.rb, line 294
294:         def get_unselected_font
295:                 session[:unselected_font] ||= 'Arial'
296:         end

[Source]

     # File app/controllers/application.rb, line 286
286:         def get_unselected_size
287:                 session[:unselected_size] ||= '12pt'
288:         end

index is where everything must end for it is the only view

[Source]

     # File app/controllers/application.rb, line 521
521:   def index
522: #               logger.info "myid #{params[:id]}"
523:                 @settings={}
524:                 if params[:id]=~ /_refresh/
525:                         session[:selected_item] ||= 0
526:                         session[:selected_item]+=1
527:                         session[:auto_refresh]=true
528:                         updownevent
529:                 end
530:                 if params[:id]=~ /stopscroll/
531:                         session[:auto_refresh]=false
532:                 end
533:                 if params[:id]=~ /nobuttons/
534:                         session[:nobuttons]=true
535:                         @settings['with buttons']='buttons'
536:                 end
537:                 if params[:id]=~ /withbuttons/
538:                         session[:nobuttons]=nil
539:                 end
540:                 if params[:id]=~ /nomodules/
541:                         session[:nomodules]=true
542:                 end
543:                 if params[:id]=~ /withmodules/
544:                         session[:nomodules]=nil
545:                 end
546:                 if params[:id]=~ /delay/
547:                         delay=params[:id].sub('delay','').to_i
548:                         if delay > 0
549:                                 session[:delay]=delay
550:                         end
551:                 end
552:                 if params[:id]=~ /nopics/
553:                         session[:nopics]=true
554:                 end
555:                 if params[:id]=~ /withpics/
556:                         session[:nopics]=nil
557:                 end
558:                 if params[:id]=~ /nowords/
559:                         session[:nowords]=true
560:                 end
561:                 if params[:id]=~ /withwords/
562:                         session[:nowords]=nil
563:                 end
564:                 @refresh=     session[:auto_refresh]
565:                 @delay=get_delay
566:                 @with_words = !session[:nowords]
567:                 if session[:auto_refresh]
568:                         @settings['manual scrolling']='stopscroll'
569:                 else
570:                         @settings['automatic scrolling']='auto_refresh'
571:                 end
572:                 if session[:nobuttons]
573:                         @settings['with buttons']='withbuttons'
574:                 else
575:                         @settings['without buttons']='nobuttons'
576:                 end
577:                 if session[:nomodules]
578:                         @settings['with modules']='withmodules'
579:                 else
580:                         @settings['without modules']='nomodules'
581:                 end
582:                 if session[:nopics]
583:                         @settings['with pictures in choices']='withpics'
584:                 else
585:                         @settings['without pictures in choices']='nopics'
586:                 end
587:                 if session[:nowords]
588:                         @settings['with words in choices']='withwords'
589:                 else
590:                         @settings['without words in choices']='nowords'
591:                 end
592:         myname=self.class.name
593:         if myname!=session[:current_controller]
594:                 session[:current_controller]=myname
595:                 clear_unused_in_session
596:                 first_time
597:         end
598:         @thiscontroller=myname.
599:                                 gsub(/Controller/,'').downcase
600:                 if session[:nomodules]
601:                         @modules=[]
602:                 else
603:                         @modules=get_modules
604:                         #used for the module table on top
605:                 end
606:                 @title=get_title      #the title top right
607:                 @preselected=get_preselected #for font
608:                 @postselected=get_postselected #see application_helper.rb
609:                 @preunselected= get_preunselected #and the font module
610:                 @postunselected=get_postunselected
611:                         #for these 4 variables
612:                 if session[:nobuttons]
613:                         @buttons={}
614:                 else
615:                         @buttons=get_buttons
616:           end
617:                 @choices=get_choices
618:                 @selected_item=get_selected_item
619:                 if !@choices.empty?
620:                         reformat_choices
621:                         @selected_item%=@choices.size
622: #                       if @selected_item>0
623: #                               @choices[0..@selected_item-1]=[]
624: #                               @selected_item=0
625: #                       end
626:                         @color= get_unselected_color
627:                         @selcolor=get_selected_color
628:                 end
629:                 extras
630:                 @spoken= session[:spoken]
631:                 session[:spoken]=nil
632:                 @choices.each_index do |i|
633:                         @choices[i]=make_clickable(@choices[i],i)
634:                 end
635:                 @pictures=@choices.collect do|cho|
636:                         get_pic_file(strip_href(cho))
637:                 end unless session[:nopics]
638:                 @extracols=@modules.size
639:                 if session[:nopics] then @extracols-=1 end
640:                 if @extracols< 1 then @extracols=1 end
641:                 @designers=designers
642: #               logger.info "session contents  #{session.inspect}"
643: #               logger.info "@modules #{@modules.inspect} session
644: #{session[:nomodules].inspect}"
645:   end

gets the last word from str

[Source]

     # File app/controllers/application.rb, line 232
232:         def last_word(str)
233:                 if str && str.strip.match('(\w+)$')
234:                         $1
235:                 else
236:                         ''
237:                 end
238:         end

line_full provides the criterion used to determine that no more choices should be added to this line

[Source]

     # File app/controllers/application.rb, line 186
186:         def line_full ln
187:                 Hpricot(ln).inner_text.length > LineLen
188:         end

make_clickable returns unchanged anything containing an anchor. otherwise encloses tch in an anchor link. Displayed is num if it exists else tch with space replaced by - unless nowords set

[Source]

     # File app/controllers/application.rb, line 164
164:         def make_clickable(tch, num=nil)
165:                 if tch.match(/<a/)
166:                  tch
167:                 else
168:                         sch=show=''
169:                         if num
170:                                 sch='_'+num.to_s
171:                         elsif !tch.match(/<\W*img/)
172:                                 sch=tch.gsub(/ /,'-')
173:                         end
174:                         show='<a href="/'+selfname+'/select/'+sch+'">' +
175:                                         tch +'</a>'
176:                 end
177:         end

max_choices_in_line is used in an attempt to evenly divide the choices among several lines

[Source]

     # File app/controllers/application.rb, line 180
180:         def max_choices_in_line
181:                 Math.sqrt(@choices.size).floor+1
182:         end

[Source]

    # File app/controllers/application.rb, line 93
93:         def pic_folder
94:                 "images"
95:         end
 process_choice decides what to do when a choice

is made: splits it if it contains a separator else calls selected

[Source]

     # File app/controllers/application.rb, line 399
399:   def process_choice selected_choice
400:                 logger.info "selected_choice#{selected_choice}" +
401:                 "get_separator #{get_separator}"
402:                 if   (selected_choice.include?(get_separator) and
403:                                                         (selected_choice.length>1))
404: 
405:                         session[:choices]=selected_choice.
406:                                                                                                 split(get_separator)
407: #       logger.info "separated #{session[:choices].inspect}"
408:                 else
409:                         str=strip_href(selected_choice)
410:                         #logger.info("selected: #{str}")
411:                         selected (str)
412:                         session[:choices]=nil
413:                         session[:selected_item]=0
414:                 end
415: 
416:   end

random_pics returns n picture names at random from the desired folder

[Source]

    # File app/controllers/application.rb, line 66
66:         def random_pics(folder, n)
67:                 g ||= Giver.new
68:                 rx=Regexp.new('images/'+folder+
69:                         '/(.*)\.(JPG|GIF|PNG)$',
70:                         Regexp::IGNORECASE)
71:                 words=g.get_filename_part(
72:                                                 'images/'+ folder ,rx)
73:                 selwords=[]
74:                 while (selwords.size < n) && !words.empty?
75:                         selwords.push words.delete_at(rand(words.size))
76:                 end
77:                 selwords
78:         end

reformat_choices reformats @choices and makes each into a link

[Source]

     # File app/controllers/application.rb, line 191
191:   def reformat_choices
192:                 if  # !@choices or
193:                         (@choices.size<=MaxRows) or
194:                         (@choices.join.match(get_separator))
195:                         @choices.collect! do |cl|
196:                                 ca=cl.split(get_separator)
197:                                 ca.collect!{|c| make_clickable c}
198:                                 s=ca.join(get_separator)
199: #                               logger.info "reformatted choices #{ca}"
200:                                 s
201:                         end
202:                         return
203:                 end
204:                 @lines=[]
205:                 lcount=0
206: #               session[:selected_item]=@selected_item=0
207: #max_choices_in_line=Math.sqrt(@choices.size).floor+1
208:                 @choices=@choices.reverse
209:                 (0..MaxRows).each do |row|
210:                         @lines[row]=''
211:                         (0..max_choices_in_line).each do |item|
212:                                 tch=@choices.pop
213:                                 @lines[row] << make_clickable(tch) <<
214:                                         get_separator
215: #                               if (@lines[row].length > LineLen) or
216:                                 if line_full(@lines[row]) or
217:                                         @choices.empty?
218:                                         break
219:                                 end
220:                         end
221:                         if @choices.empty?
222:                                 break
223:                         end
224:                 end
225:                 @choices=
226:                 @lines.collect do |l|
227:                         l.strip.chop
228:                         # removes separator at the end
229:                 end
230:         end

select is activated when the smiley is clicked if the id is a number, that choice is taken if the id is a string, it is selected

[Source]

     # File app/controllers/application.rb, line 420
420:   def select
421:                 if params[:id]
422:                         if params[:id]=~/_(\d+)/
423:                                 i=$1.to_i
424:                                 session[:selected_item]=i
425: #                               process_choice(get_choices[i])
426: #                       logger.info "sid: #{params[:id]}"
427:                         else
428:                                 selected(params[:id].gsub(/-/,' '))
429:                                 what_next
430:                                 return
431:                         end
432:                 end
433:                 @choices=get_choices
434:                 reformat_choices
435:                 @selected_item= get_selected_item
436: #               logger.info "#{@selected_item} from choices #{
437: #                       @choices.inspect}"
438:                 if !@choices.empty?
439:                         selected_choice=get_highlighted_choice
440:                         process_choice selected_choice
441:                 end
442:                 what_next
443:         end

[Source]

     # File app/controllers/application.rb, line 456
456:         def select_icon
457: #               ">"
458:                 ??{ <IMG height=60 src= "/images/yes.jpeg" alt ="select"
459:                         width=60 /> }
460:         end
 selected decides what action should be taken

when str is selected — will always be overridden

[Source]

     # File app/controllers/application.rb, line 381
381:   def selected(str)
382:   end

selfname returns name of current_controller

[Source]

     # File app/controllers/application.rb, line 156
156:         def selfname
157:                 self.class.name.
158:                                 gsub(/Controller/,'').downcase
159:         end
       def selector
               '|'
       end

start_choices are defined differently by each module

[Source]

     # File app/controllers/application.rb, line 306
306:   def start_choices
307:                 %w{should be overridden}
308:         end

strip_href returns the displayed portion of a link

[Source]

     # File app/controllers/application.rb, line 392
392:   def strip_href(str)
393:                 str.match(%r{>(.+)</a>}) ? $1.strip : str
394:         end

default action when up is selected

[Source]

     # File app/controllers/application.rb, line 245
245:   def up
246:         session[:selected_item]=get_selected_item-1
247:         updownevent
248:         redirect_to :action => "index"
249:   end

[Source]

     # File app/controllers/application.rb, line 447
447:         def up_icon
448:                 ??{ <IMG height=60 src= "/images/up.gif" alt ="up"
449:                         width=60 /> }
450:         end

updownevent is overridden by modules that need some processing each time up or down is pressed

[Source]

     # File app/controllers/application.rb, line 241
241:         def updownevent
242:         end

what_next enables you, after selection, to go someplace else

 by setting session[:controller]

[Source]

     # File app/controllers/application.rb, line 368
368:   def what_next
369:                 if session[:controller]
370:                         s=session[:controller]
371:                         session[:controller]=nil
372:                         redirect_to( :action => "first_time",
373:                                         :controller => s) and return
374:                 else
375:                                 redirect_to :action => "index"
376:                 end
377:   end

[Validate]