Refactoring2-8

クラスの導入

ようやくクラスだぜ. >|ruby| refact後 class Sparkline

 attr_reader :y_values

 def initialize(y_values)
   @y_values = y_values
 end

end

sp = Sparkline.new(values(10))

<

分離したクラスを別ファイルに

>|ruby| sparkline.rbに移したSparklineクラス require 'svg1.5.0.rb'

class Sparkline

 attr_reader :y_values

 def initialize(y_values)
   @y_values = y_values
 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 'sparkline'

def toss

 2 * (rand(2)*2 - 1)

end

def values(n)

 a = [0]
 n.times { a << (toss + a[-1]) }
 a

end

puts Sparkline.new(values(10)).to_svg

<
Last modified:2020/08/04 18:11:40
Keyword(s):
References:[Refactoring2] [RubyPrimary]