Class: OpenRosa::Submission

Inherits:
Object
  • Object
show all
Defined in:
lib/open_rosa/submission.rb

Overview

Represents a parsed OpenRosa form submission

Handles parsing of multipart MIME submissions containing:

  • XML submission file (required, named "xml_submission_file")
  • Media attachments (optional, images/audio/video)

Per OpenRosa spec:

  • POST to /submission with multipart/form-data
  • XML part must be named "xml_submission_file"
  • Other parts are treated as media attachments

Defined Under Namespace

Classes: Attachment, ParseError

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(form_id:, instance_id:, data:, raw_xml:, attachments: [], metadata: {}) ⇒ Submission

rubocop:disable Metrics/ParameterLists



23
24
25
26
27
28
29
30
31
# File 'lib/open_rosa/submission.rb', line 23

def initialize(form_id:, instance_id:, data:, raw_xml:, attachments: [], metadata: {})
  # rubocop:enable Metrics/ParameterLists
  @form_id = form_id
  @instance_id = instance_id
  @data = data
  @attachments = attachments
  @metadata = 
  @raw_xml = raw_xml
end

Instance Attribute Details

#attachmentsObject (readonly)

rubocop:disable Metrics/ClassLength



18
19
20
# File 'lib/open_rosa/submission.rb', line 18

def attachments
  @attachments
end

#dataObject (readonly)

rubocop:disable Metrics/ClassLength



18
19
20
# File 'lib/open_rosa/submission.rb', line 18

def data
  @data
end

#form_idObject (readonly)

rubocop:disable Metrics/ClassLength



18
19
20
# File 'lib/open_rosa/submission.rb', line 18

def form_id
  @form_id
end

#instance_idObject (readonly)

rubocop:disable Metrics/ClassLength



18
19
20
# File 'lib/open_rosa/submission.rb', line 18

def instance_id
  @instance_id
end

#metadataObject (readonly)

rubocop:disable Metrics/ClassLength



18
19
20
# File 'lib/open_rosa/submission.rb', line 18

def 
  @metadata
end

#raw_xmlObject (readonly)

rubocop:disable Metrics/ClassLength



18
19
20
# File 'lib/open_rosa/submission.rb', line 18

def raw_xml
  @raw_xml
end

Class Method Details

.parse(rack_request) ⇒ Submission

Parse a Rack request into a Submission object

Parameters:

  • rack_request (Rack::Request)

    The incoming request

Returns:

Raises:



39
40
41
42
43
44
45
# File 'lib/open_rosa/submission.rb', line 39

def parse(rack_request)
  validate_request!(rack_request)
  raw_xml = extract_raw_xml(rack_request)
  doc = parse_xml(raw_xml)

  build_submission(doc, rack_request, raw_xml)
end