Sha256: 94e8561d29e289ba8b33407226903bc1186dcaf9ecd7b8b7703dd10614353d98

Contents?: true

Size: 1.82 KB

Versions: 1

Compression:

Stored size: 1.82 KB

Contents

# coding: utf-8

# Singleton class for cure echo
class CureEchoManager
  module EchoMode
    TRANSFORM = 1
    ATTACK = 2
  end

  def initialize
    @in  = $stdin
    @out = $stdout
    @err = $stderr
    @cure_name = 'echo'
    @message_mode = EchoMode::TRANSFORM
    @style_priority = []
  end

  def source_output(source = $stdout)
    @out = source
  end

  def source_input(source = $stdin)
    @in = source
  end

  def source_err(source = $stderr)
    @err = source
  end

  def precure(cure_name = false)
    @cure_name = cure_name || 'echo'
  end

  def msg_transform(flag = true)
    @message_mode = EchoMode::TRANSFORM if flag
  end

  def msg_attack(flag = false)
    @message_mode = EchoMode::ATTACK if flag
  end

  def nosleep(flag = true)
    Rubicure::Girl.sleep_sec = 1
    Rubicure::Girl.sleep_sec = 0 if flag
  end

  def style(style)
    @style_priority << style.to_sym if style
  end

  def print_results
    return 1 unless existing_precure?
    precure = Cure.send(@cure_name.to_sym)
    if @message_mode == EchoMode::TRANSFORM
      precure = original_transform(precure)
    elsif @message_mode == EchoMode::ATTACK
      precure = original_transform(precure)
      precure.attack!
    end
    0
  end

  private

  def original_transform(precure)
    return precure.transform! unless precure.respond_to?(:transform_styles)
    chosen_style = @style_priority.find do |s|
      precure.transform_styles.include?(s)
    end
    if chosen_style
      precure.transform! chosen_style
    else
      default_style, _entity = precure.transform_styles.first
      precure.transform! default_style
    end
  end

  def existing_precure?
    found_precure = Rubicure::Girl.config.find do |k, _v|
      k == @cure_name.to_sym
    end
    if found_precure
      true
    else
      @err.puts "No such precure #{@cure_name}"
      false
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cureutils-0.2.1 lib/cureutils/cure_echo_manager.rb