class Mumukit::Server::ResponseBuilder

Public Class Methods

build(&block) click to toggle source
# File lib/mumukit/server/response_builder.rb, line 28
def self.build(&block)
  builder = new
  builder.instance_eval(&block)
  builder.build
end

Public Instance Methods

add_expectation_results(r) click to toggle source
# File lib/mumukit/server/response_builder.rb, line 11
def add_expectation_results(r)
  @response.merge!(expectationResults: r) if r.present?
end
add_feedback(f) click to toggle source
# File lib/mumukit/server/response_builder.rb, line 20
def add_feedback(f)
  @response.merge!(feedback: f) if f.present?
end
add_query_results(r) click to toggle source
# File lib/mumukit/server/response_builder.rb, line 7
def add_query_results(r)
  @response = unstructured_base_response(r)
end
add_test_results(r) click to toggle source
# File lib/mumukit/server/response_builder.rb, line 3
def add_test_results(r)
  @response = base_response(r)
end
add_try_results(r) click to toggle source
# File lib/mumukit/server/response_builder.rb, line 15
def add_try_results(r)
  @response = unstructured_base_response(r)
  @response.merge!(queryResult: r[2])
end
build() click to toggle source
# File lib/mumukit/server/response_builder.rb, line 24
def build
  @response
end

Private Instance Methods

base_response(test_results) click to toggle source
# File lib/mumukit/server/response_builder.rb, line 36
def base_response(test_results)
  if structured_test_result?(test_results)
    structured_base_response(test_results)
  elsif unstructured_test_result?(test_results)
    unstructured_base_response(test_results)
  elsif mixed_test_result?(test_results)
    mixed_base_response(test_results)
  else
    raise "Invalid test results format: #{test_results}. You must either return [results_array], [results_string, status] or [results_array, results_string, status]"
  end
end
mixed_base_response(test_results) click to toggle source
# File lib/mumukit/server/response_builder.rb, line 78
def mixed_base_response(test_results)
  structured_base_response(test_results).merge out: test_results[1], exit: test_results[2]
end
mixed_test_result?(test_results) click to toggle source
# File lib/mumukit/server/response_builder.rb, line 56
def mixed_test_result?(test_results)
  test_results.size == 3 && test_results[0].is_a?(Array) && test_results[1].is_a?(String)
end
structured_base_response(test_results) click to toggle source
# File lib/mumukit/server/response_builder.rb, line 60
def structured_base_response(test_results)
  {
    testResults: test_results[0].map do |title, status, result, summary|
      { summary: summary&.compact.presence }
        .compact
        .merge(
          title: title,
          status: status,
          result: result)
    end
  }
end
structured_test_result?(test_results) click to toggle source
# File lib/mumukit/server/response_builder.rb, line 48
def structured_test_result?(test_results)
  test_results.size == 1 && test_results[0].is_a?(Array)
end
unstructured_base_response(test_results) click to toggle source
# File lib/mumukit/server/response_builder.rb, line 73
def unstructured_base_response(test_results)
  {exit: test_results[1],
   out: test_results[0]}
end
unstructured_test_result?(test_results) click to toggle source
# File lib/mumukit/server/response_builder.rb, line 52
def unstructured_test_result?(test_results)
  test_results.size == 2 && test_results[0].is_a?(String)
end