Sha256: 9a25f137e5ade59b464723d626cfc63cbfd96c899c2c1766b59956fcd0115a1f

Contents?: true

Size: 1.84 KB

Versions: 24

Compression:

Stored size: 1.84 KB

Contents

module Gobstones::BatchParser
  class << self
    def parse(request)
      test = parse_test(request)

      options = parse_options(test).merge(parse_settings(request))
      examples = parse_examples test, options

      Gobstones::Batch.new request.content, examples, request.extra, options
    end

    private

    def parse_settings(request)
      { game_framework: !!request.dig(:settings, 'game_framework') }
    end

    def parse_test(request)
      YAML.load(request.test).deep_symbolize_keys
    end

    def parse_examples(test, options)
      examples = test[:examples]
      examples.each_with_index.map do |example, index|
        parse_example options, {
          id: index,
          name: example[:title],
          preconditions: example.slice(*preconditions),
          postconditions: example.slice(*postconditions)
        }
      end
    end

    def parse_example(options, example)
      return example unless options[:subject]

      return_value = example[:postconditions][:return]
      if return_value
        example[:name] = "#{options[:subject]}() -> #{return_value}" unless example[:name]
        options[:show_final_board] = false
      end

      example
    end

    def parse_options(test)
      [
        struct(key: :show_initial_board, default: true),
        struct(key: :show_final_board, default: true),
        struct(key: :check_head_position, default: false),
        struct(key: :expect_endless_while, default: false),
        struct(key: :interactive, default: false),
        struct(key: :subject, default: nil)
      ].map { |it| [
          it.key,
          if test[it.key].nil?
            it.default
          else
            test[it.key]
          end
        ]
      }.to_h
    end

    def preconditions
      [:initial_board, :arguments]
    end

    def postconditions
      [:final_board, :error, :return]
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
mumuki-gobstones-runner-2.19.1 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.19.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.18.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.17.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.16.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.14.3 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.15.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.14.2 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.14.1 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.14.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.13.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.12.1 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.12.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.11.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.10.1 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.10.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.9.1 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.9.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.8.5 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.8.4 lib/gobstones/batch_parser.rb