summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormokha <mokha@cisco.com>2018-03-20 19:01:01 -0600
committermokha <mokha@cisco.com>2018-03-20 19:01:01 -0600
commit288b4b44b6754b2fce86064a4cd8925a1b022ba0 (patch)
tree1fa326548c6964810bc637640963d517441db317
parentac3fe9af3d102b8d2b24b71a0d1cedeab9f806c4 (diff)
extract Render class.
-rw-r--r--lib/xsay.rb43
-rw-r--r--lib/xsay/render.rb42
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