Refactoring2r-8
すべてをすっ飛ばして,classを導入.
>|ruby|
require 'svg0.rb' NUMBER_OF_TOSSES = 20
def toss
2 * (rand(2)*2 - 1)
end
def values(n)
a = [0] n.times { a << (toss + a[-1]) } a
end
class Sparkline
attr_reader :y_values
def initialize(y_values) @y_values = y_values end SQ=4 SPARK_COLOR='red' def spark(cx, cy, value) "<!-- spark --> #{SVG.rect(cx-SQ/2,cy-SQ/2,SQ,SQ,'red','none',0)} #{SVG.text(cx+6, cy+4, value,"Verdana","9",SPARK_COLOR)}" end def x_axis(length) "<!-- x-axis --> #{SVG.line(0,200,length,200,"#999","1")}" end def sparkline(tosses) points = [] tosses.each_index { |i| points << "#{i},#{200-tosses[i]}" } "<!-- sparkline --> #{SVG.polyline(points,"none","#333","1")}" end def to_svg %Q{<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" > <!-- x-axis --> #{x_axis(y_values.length)} #{sparkline(y_values)} #{spark(y_values.length-1, 200-y_values[-1], y_values[-1])} </svg>} end
end
tosses = values(NUMBER_OF_TOSSES)
puts Sparkline.new(tosses).to_svg
< |
Keyword(s):
References:[RubyPrimary]