Sha256: b0db4141d86b9a22904ee0de810514f7ec814874d703a5d75f9e12fc3c972095

Contents?: true

Size: 1.65 KB

Versions: 26

Compression:

Stored size: 1.65 KB

Contents

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

      options = parse_options test
      examples = parse_examples test, options

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

    private

    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: :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

26 entries across 26 versions & 1 rubygems

Version Path
mumuki-gobstones-runner-2.0.1 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.12.1 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-2.0.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.12.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.11.2 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.11.1 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.11.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.10.2 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.10.1 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.10.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.8.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.7.5 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.7.4 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.7.3 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.7.2 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.7.1 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.7.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.6.1 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.6.0 lib/gobstones/batch_parser.rb
mumuki-gobstones-runner-1.5.2 lib/gobstones/batch_parser.rb