summaryrefslogtreecommitdiff
path: root/lib/validation.rb
blob: 031b9e14f6dfe8027962ebc3c32764a49b81491c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# All available validation types
VALIDATION_TYPES = ["repeatedcrossvalidation", "leaveoneout", "crossvalidation", "regressioncrossvalidation"]

# Get a list of ayll possible validation types
# @param [Header] Accept one of text/uri-list, application/json
# @return [text/uri-list] URI list of all validation types
get "/api/validation/?" do
  uri_list = VALIDATION_TYPES.collect{|validationtype| uri("/validation/#{validationtype}")}
  case @accept
  when "text/uri-list"
    return uri_list.join("\n") + "\n"
  when "application/json"
    return uri_list.to_json
  else
    halt 400, "Mime type #{@accept} is not supported."
  end
end

# Get a list of all validations 
# @param [Header] Accept one of text/uri-list, application/json
# @param [Path] Validationtype One of "repeatedcrossvalidation", "leaveoneout", "crossvalidation", "regressioncrossvalidation"
# @return [text/uri-list] list of all validations of a validation type
get "/api/validation/:validationtype/?" do
  halt 400, "There is no such validation type as: #{params[:validationtype]}" unless VALIDATION_TYPES.include? params[:validationtype]
  case params[:validationtype]
  when "repeatedcrossvalidation"
    validations = Validation::RepeatedCrossValidation.all
  when "leaveoneout"
    validations = Validation::LeaveOneOut.all
  when "crossvalidation"
    validations = Validation::CrossValidation.all
  when "regressioncrossvalidation"
    validations = Validation::RegressionCrossValidation.all
  end

  case @accept
  when "text/uri-list"
    uri_list = validations.collect{|validation| uri("/api/validation/#{params[:validationtype]}/#{validation.id}")}
    return uri_list.join("\n") + "\n"
  when "application/json"
    validations = JSON.parse validations.to_json
    validations.each_index do |idx|
      validations[idx][:URI] = uri("/api/validation/#{params[:validationtype]}/#{validations[idx]["_id"]["$oid"]}")
    end
    return validations.to_json
  else
    halt 400, "Mime type #{@accept} is not supported."
  end
end

# Get validation representation
get "/api/validation/:validationtype/:id/?" do
  halt 400, "There is no such validation type as: #{params[:validationtype]}" unless VALIDATION_TYPES.include? params[:validationtype]
  case params[:validationtype]
  when "repeatedcrossvalidation"
    validation = Validation::RepeatedCrossValidation.find params[:id]
  when "leaveoneout"
    validation = Validation::LeaveOneOut.find params[:id]
  when "crossvalidation"
    validation = Validation::CrossValidation.find params[:id]
  when "regressioncrossvalidation"
    validation = Validation::RegressionCrossValidation.find params[:id]
  end

  halt 404, "#{params[:validationtype]} with id: #{params[:id]} not found." unless validation
  return validation.to_json
end