Module: Clicksign::JsonApi::AtomicResultsParser
- Defined in:
- lib/clicksign/json_api/atomic_results_parser.rb
Class Method Summary collapse
- .build_operation_result(slot:, index:, op:, envelope_id:) ⇒ Object
- .build_requirement(data, envelope_id:) ⇒ Object
- .envelope_errors?(raw) ⇒ Boolean
- .format_errors(errors) ⇒ Object
- .parse(raw, envelope_id:, operations:) ⇒ Object
Class Method Details
.build_operation_result(slot:, index:, op:, envelope_id:) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/clicksign/json_api/atomic_results_parser.rb', line 26 def build_operation_result(slot:, index:, op:, envelope_id:) errors = slot['errors'] requirement = build_requirement(slot['data'], envelope_id: envelope_id) Resources::Notarial::BulkRequirement::OperationResult.new( index: index, op: op, requirement: requirement, errors: errors, raw: slot, ) end |
.build_requirement(data, envelope_id:) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/clicksign/json_api/atomic_results_parser.rb', line 39 def build_requirement(data, envelope_id:) return nil if data.nil? || data.empty? Resources::Notarial::Requirement.send( :build_instance, { 'id' => data['id'], 'type' => data['type'], 'attributes' => data.fetch('attributes', {}), 'relationships' => data.fetch('relationships', {}), }, parent_id: envelope_id, ) end |
.envelope_errors?(raw) ⇒ Boolean
22 23 24 |
# File 'lib/clicksign/json_api/atomic_results_parser.rb', line 22 def envelope_errors?(raw) raw.key?('errors') && !raw.key?('atomic:results') end |
.format_errors(errors) ⇒ Object
54 55 56 57 58 |
# File 'lib/clicksign/json_api/atomic_results_parser.rb', line 54 def format_errors(errors) return 'Validation failed' unless errors.is_a?(Array) errors.filter_map { |e| e['detail'] || e['title'] }.join(', ') end |
.parse(raw, envelope_id:, operations:) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/clicksign/json_api/atomic_results_parser.rb', line 8 def parse(raw, envelope_id:, operations:) raw ||= {} raise ValidationError, format_errors(raw['errors']) if envelope_errors?(raw) Array(raw['atomic:results']).each_with_index.map do |slot, index| build_operation_result( slot: slot, index: index, op: operations.dig(index, 'op'), envelope_id: envelope_id, ) end end |