Platinum Partner

Print List Content In Vertical Table

print each item of list in table, verticaly in place of horizontaly :


class Array
  def  print_vtable( nbcol)
    nb_line=(self.length+nbcol-1)/nbcol;   
    0.upto(nb_line-1) {  | noline | 
           s=[]
             0.upto(nbcol-1) { | nocol |  
                 index=noline+nocol*nb_line
                 s << self[index].to_s   if index< self.length 
            } 
           puts s.join("  ")
    } 
  end
end

(1..10).to_a.print_vtable ( 4)


1 4 7 10
2 5 8 11
3 6 9

this is done for ascii output, 
but howto make for generic outputing (html,pdf,sql,...) ?

Here one solution :

class Array
 def  print_vtable nbcol
    nb_line=(self.length+nbcol-1)/nbcol;   
    0.upto(nb_line-1)   do   | noline | 
           s=[]
             0.upto(nbcol-1) { | nocol |  
                 index=noline+nocol*nb_line
                 s << self[index]   if index< self.length 
            } 
            if block_given? 
              yield s   
           else
             puts s.join("  ")
          end
    end
 end
end

(1..11).to_a.print_vtable ( 4 )  do | data | 
  puts "" + data.join("") + "" 
end



And another solution, with Fiber :


def vtable(a,nbcol)
  Fiber.new do
	nb_line=(a.length+nbcol-1)/nbcol;   
	0.upto(nb_line-1)   do   | noline | 
		Fiber.yield(:start)
		0.upto(nbcol-1) do | nocol |  
			index=noline+nocol*nb_line
			Fiber.yield(a[index])   if index< a.length 
		end
		Fiber.yield(:end)
	end
  	Fiber.yield(nil)
  end
end

def tag(name) 
  STDOUT.write("<"+name+">") 
  STDOUT.write(yield) rescue p $!
  STDOUT.write("") 
end

def to_html(source)
  item=nil
  tag("table") {
	 tag("tr") {
	     tag("td") { item.to_s  } while (item=source.resume) != :end
	 } while source.resume
  }
end

to_html vtable((1..10).to_a,4)
{{ tag }}, {{tag}},

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}
{{ parent.authors[0].realName || parent.author}}

{{ parent.authors[0].tagline || parent.tagline }}

{{ parent.views }} ViewsClicks
Tweet

{{parent.nComments}}