Sha256: 4a9e2b54de052e863ccb479f53d4ee1f96bdadfdb9bacc29b078461936898527

Contents?: true

Size: 1.73 KB

Versions: 2

Compression:

Stored size: 1.73 KB

Contents

require 'language_cards/controllers/application_controller'

module LanguageCards
  module Controllers
    class Game < ApplicationController
      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'

        super(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(:card_set, :mode) do
          def input
            @input 
          end

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

          def card
            @card ||= card_set.sample.current
          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.join(', ')}" if mode == :translate
            output
          end

          def valid?
            card_set.match? input
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
language_cards-0.3.2 lib/language_cards/controllers/game.rb
language_cards-0.3.1 lib/language_cards/controllers/game.rb