diff options
| author | mokha <mokha@cisco.com> | 2018-03-20 19:01:01 -0600 |
|---|---|---|
| committer | mokha <mokha@cisco.com> | 2018-03-20 19:01:01 -0600 |
| commit | 288b4b44b6754b2fce86064a4cd8925a1b022ba0 (patch) | |
| tree | 1fa326548c6964810bc637640963d517441db317 | |
| parent | ac3fe9af3d102b8d2b24b71a0d1cedeab9f806c4 (diff) | |
extract Render class.
| -rw-r--r-- | lib/xsay.rb | 43 | ||||
| -rw-r--r-- | lib/xsay/render.rb | 42 |
2 files changed, 52 insertions, 33 deletions
diff --git a/lib/xsay.rb b/lib/xsay.rb index 07935aa..55d530a 100644 --- a/lib/xsay.rb +++ b/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 diff --git a/lib/xsay/render.rb b/lib/xsay/render.rb new file mode 100644 index 0000000..b84b2ba --- /dev/null +++ b/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 |
