Sha256: b7bfbd53977fce8c164d5a22c4df4bfd7fbf5358373b3522b1ef2aa63baef608

Contents?: true

Size: 1.94 KB

Versions: 1

Compression:

Stored size: 1.94 KB

Contents

module LanguageCards
  module Controllers
    module Game
      class << self
        include Helpers::ViewHelper
        include Helpers::GameHelper

        def render(correct:, incorrect:, title:, timer:, last:)
          _score = t('Game.ScoreMenu.Score') + ": %0.2d%%" % calc_score(correct, incorrect)
          _timer = [((t('Timer.Timer') + ": " + timer.ha) if timer.time?), nil, timer.h]
          _mexit = t 'Menu.Exit'

          view = File.expand_path('../view/game.erb', __dir__).
            ᐅ( IO.method :read ).
            ᐅ ERB.method :new
          view.result(binding)
        end

        def process(cards, mode)
          ic = struct_data.new(cards, mode)
          ic.get_input
          {
            correct: ic.valid?,
            last: ic.valid? ? ic.correct_msg : ic.incorrect_msg
          }
        end

        def struct_data
          Struct.new(:collection, :mode) do
            def input
              @input 
            end

            def get_input
              @input ||= CLI.ask("#{I18n.t('Game.TypeThis')}: #{display}")
            end

            def card
              @card ||= collection.sample
            end

            def display
              "#{card}"
            end

            def expected
              case mode
              when :translate
                card.translation
              when :typing_practice
                 "#{card}" 
              else
                raise "Invalid mode in Game Controller!"
              end
            end

            def correct_msg
              "#{I18n.t('Game.Correct')} #{input} = #{display}"
            end

            def incorrect_msg
              output = "#{I18n.t('Game.Incorrect')} #{input} != #{display}"
              output << " #{I18n.t('Game.Its')} #{expected}" if mode == :translate
              output
            end

            def valid?
              !!(expected == input)
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
language_cards-0.2.0 lib/language_cards/controllers/game.rb