Sha256: 6633922c3cfc9ee2e5b0b3004f3260b67fc01f88bc00c4ce7128c6d7145cf01f

Contents?: true

Size: 1.95 KB

Versions: 1

Compression:

Stored size: 1.95 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(: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
end

Version data entries

1 entries across 1 versions & 1 rubygems

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