Sha256: 34d5875c07ff8cbc392f2364f1b58a4c8983d468b4dd5fc80dd7e69631f2d487

Contents?: true

Size: 967 Bytes

Versions: 3

Compression:

Stored size: 967 Bytes

Contents

# frozen_string_literal: true

require_relative 'statement'

module Basic101

  class InputStatement < Statement

    def initialize(prompt, prompt_delimeter, references)
      @prompt = prompt
      @prompt_delimeter = prompt_delimeter
      @references = references
    end

    def execute(runtime)
      begin
        print_prompt(runtime)
        read_references(runtime)
      rescue InputError => e
        runtime.output.puts "#{e}, try again"
        retry
      end
    end

    protected

    def state
      [@prompt, @prompt_delimeter, @references]
    end

    def print_prompt(runtime)
      if @prompt
        @prompt.print_string runtime.output
      end
      @prompt_delimeter.print(runtime.output)
    end

    def read_references(runtime)
      input_reader = InputReader.new(runtime.input)
      @references.each do |reference|
        value = reference.input(input_reader)
        reference.assign(runtime, value)
      end
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
basic101-1.0.2 lib/basic101/input_statement.rb
basic101-1.0.1 lib/basic101/input_statement.rb
basic101-1.0.0 lib/basic101/input_statement.rb