Refactoring2-10
派生値の自動生成.
変数はプログラム自身が決めるべき.
>|ruby| require 'svg1.5.0.rb'
class Sparkline
def initialize(y_values) @height_above_x_axis = y_values.max @height_below_x_axis = y_values.min @final_value = y_values[-1] @y_values = reflect_top_and_bottom(y_values) end
def reflect_top_and_bottom(y_values) y_values.map{|y| -y} end def to_svg %Q{<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" > #{x_axis} #{sparkline} #{spark} </svg>} end
private SQUARE_SIDE=4 SPARK_COLOR='red' def sparkline points = [] @y_values.each_index { |i| points << "#{i},#{200-@y_values[i]}" } "<!-- sparkline --> #{SVG.polyline(points,"none","#333","1")}" end def spark final_value = @y_values[-1] centre_x=@y_values.length-1 centre_y=200-final_value " <!-- spark --> #{SVG.rect(centre_x-(SQUARE_SIDE/2),centre_y-(SQUARE_SIDE/2), SQUARE_SIDE,SQUARE_SIDE,'red','none',0)} <!-- final value --> #{SVG.text(centre_x+6, centre_y+4, final_value,"Verdana","9",SPARK_COLOR)}}" end def x_axis " <!-- x-axis --> #{SVG.line(0,200,@y_values.length,200,"#999","1")}" end
end
< |
>|ruby| require 'svg1.5.0.rb'
class Sparkline
def initialize(y_values) @height_above_x_axis = y_values.max @final_value = y_values[-1] @y_values = reflect_top_and_bottom(y_values) end
def reflect_top_and_bottom(y_values) y_values.map{|y| -y} end
def to_svg %Q{<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" > <g transform="translate(0,#{@height_above_x_axis})"> #{x_axis} #{sparkline} #{spark} </g> </svg>} end
private SQUARE_SIDE=4 SPARK_COLOR='red' def sparkline points = [] @y_values.each_index { |i| points << "#{i},#{@y_values[i]}" } "<!-- sparkline --> #{SVG.polyline(points,"none","#333","1")}" end def spark final_value = @y_values[-1] centre_x=@y_values.length-1 centre_y=final_value " <!-- spark --> #{SVG.rect(centre_x-(SQUARE_SIDE/2),centre_y-(SQUARE_SIDE/2), SQUARE_SIDE,SQUARE_SIDE,'red','none',0)} <!-- final value --> #{SVG.text(centre_x+6, centre_y+4, final_value,"Verdana","9",SPARK_COLOR)}}" end def x_axis " <!-- x-axis --> #{SVG.line(0,0,@y_values.length,0,"#999","1")}" end
end
< |
Keyword(s):
References:[Refactoring2] [RubyPrimary]