Sha256: 3543656deb8877f20aad995e525fff56b6353ba051669c1f72980c8fdfe992e9

Contents?: true

Size: 1004 Bytes

Versions: 3

Compression:

Stored size: 1004 Bytes

Contents

# Provides input and response handling for types with fields.
module Taro::Types::Shared::ObjectCoercion
  def coerce_input
    self.class.fields.transform_values do |field|
      field.value_for_input(object)
    rescue Taro::Error => e
      raise_enriched_coercion_error(e, field)
    end
  end

  # Render the object into a hash.
  def coerce_response
    object_is_hash = object.is_a?(Hash)
    self.class.fields.transform_values do |field|
      field.value_for_response(object, context: self, object_is_hash:)
    rescue Taro::Error => e
      raise_enriched_coercion_error(e, field)
    end
  end

  def raise_enriched_coercion_error(error, field)
    # The indentation is on purpose. These errors can be recursively rescued
    # and re-raised by a tree of object types, which should be made apparent.
    raise error.class, <<~MSG
      Failed to read #{self.class.name} field `#{field.name}` from #{object.class}:
      #{error.message.lines.map { |line| "  #{line}" }.join}
    MSG
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
taro-1.4.0 lib/taro/types/shared/object_coercion.rb
taro-1.3.0 lib/taro/types/shared/object_coercion.rb
taro-1.2.0 lib/taro/types/shared/object_coercion.rb