File size: 1,264 Bytes
def1299
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
class SubmissionSerializer < ActiveModel::Serializer
  attributes((Submission.column_names + ["status", "language"] - ["id"]).collect(&:to_sym))

  def self.default_fields
    @@default_fields ||= [
      :token,
      :time,
      :memory,
      :stdout,
      :stderr,
      :compile_output,
      :message,
      :status
    ]
  end

  def source_code
    object_decoder(:source_code)
  end

  def stdin
    object_decoder(:stdin)
  end

  def expected_output
    object_decoder(:expected_output)
  end

  def stdout
    object_decoder(:stdout)
  end

  def stderr
    object_decoder(:stderr)
  end

  def compile_output
    object_decoder(:compile_output)
  end

  def message
    if instance_options[:base64_encoded] and object.message
      return Base64Service.encode(object.message)
    end
    object.message
  end

  def status
    { id: object.status_id, description: object.status.name }
  end

  def language
    ActiveModelSerializers::SerializableResource.new(object.language, { serializer: LanguageSerializer, fields: [:id, :name] })
  end

  def additional_files
    Base64Service.encode(object.additional_files)
  end

  private

  def object_decoder(method)
    instance_options[:base64_encoded] ? object[method] : object.send(method)
  end
end