Commit 288b4b4

mokha <mokha@cisco.com>
2018-03-21 01:01:01
extract Render class.
1 parent ac3fe9a
Changed files (2)
lib/xsay/render.rb
@@ -0,0 +1,42 @@
+module Xsay
+  class Render
+    attr_reader :colour, :distance, :speed
+
+    def initialize(
+      colour: options[:colour].to_sym,
+      distance: options[:distance],
+      speed: options[:speed]
+    )
+      @colour = colour.to_sym
+      @distance = distance
+      @speed = speed
+    end
+
+    def render(message, template)
+      message = message.join(' ') if message.respond_to?(:join)
+      line_break = "-" * message.length
+      move = distance > 0
+      distance.downto(0) do |n|
+        system 'clear' if move
+        spaces = " " * n
+        result = <<-MESSAGE
+  #{line_break}
+< #{n.even? ? message : ' ' * message.length} >
+  #{line_break}
+
+#{template.gsub(/^/, "#{spaces}")}
+        MESSAGE
+        if colour == :rainbow
+          result.each_char.each_with_index do |x, i|
+            print x.colorize(String.colors[i % String.colors.size])
+          end
+        else
+          puts result.colorize(colour)
+        end
+        sleep speed if move
+      end
+      nil
+    end
+
+  end
+end
lib/xsay.rb
@@ -1,6 +1,7 @@
-require "xsay/version"
 require "thor"
 require "colorize"
+require "xsay/render"
+require "xsay/version"
 
 module Xsay
   class CLI < Thor
@@ -14,7 +15,7 @@ module Xsay
 
       desc "#{animal} <message>", "xsay #{animal} hello"
       define_method animal do |*args|
-        render(args, IO.read(filename))
+        renderer.render(args, IO.read(filename))
       end
     end
 
@@ -28,41 +29,17 @@ module Xsay
     desc "random <message>", "xsay random hello"
     def random(*args)
       random_colour = (String.colors + [:rainbow]).sample
-      render(args, IO.read(ANIMALS.shuffle.sample), colour: random_colour)
+      renderer.render(args, IO.read(ANIMALS.shuffle.sample), colour: random_colour)
     end
 
     private
 
-    def render(
-      message,
-      template,
-      colour: options[:colour].to_sym,
-      distance: options[:distance],
-      speed: options[:speed]
-    )
-      message = message.join(' ') if message.respond_to?(:join)
-      line_break = "-" * message.length
-      move = distance > 0
-      distance.downto(0) do |n|
-        system 'clear' if move
-        spaces = " " * n
-        result = <<-MESSAGE
-  #{line_break}
-< #{n.even? ? message : ' ' * message.length} >
-  #{line_break}
-
-#{template.gsub(/^/, "#{spaces}")}
-        MESSAGE
-        if colour == :rainbow
-          result.each_char.each_with_index do |x, i|
-            print x.colorize(String.colors[i % String.colors.size])
-          end
-        else
-          say result.colorize(colour)
-        end
-        sleep speed if move
-      end
-      nil
+    def renderer
+      Render.new(
+        colour: options[:colour].to_sym,
+        distance: options[:distance],
+        speed: options[:speed]
+      )
     end
   end
 end