# frozen_string_literal: true class ApplicationForm include ActiveModel::Model include Virtus.model # attribute :raw_responce, TranslationCms::Api::Base attr_accessor :raw_responce def persisted? false end protected def merge_other_errors!(api_object) api_object.errors.each do |err| if err.is_a?(Array) errors.add(*err) elsif err.try(:source_parameter).present? errors.add(err.source_parameter, err.title || err.detail) else errors.add(:server, 'unknown') end end end def merge_errors!(api_object) if api_object.errors.is_a?(ActiveModel::Errors) api_object.errors.keys.each do |source| api_object.errors[source].each do |err| errors.add(source, err.try(:to_sym) || err) end end else merge_other_errors!(api_object) end end def merge_responce!(api_object) if api_object.errors.blank? api_object = api_object.first if api_object.is_a?(Array) self.attributes = api_object.try(:attributes) self.raw_responce = api_object else merge_errors! api_object end end def method_missing_with_api_fallback(method, *args, &block) if raw_responce&.respond_to?(method) raw_responce.method(method).call(*args, &block) else method_missing_without_api_fallback method, *args, &block end end alias_method_chain :method_missing, :api_fallback end