Sha256: a6e7fbaf9f0e771629aa12b78c0b22446a5822ba9d595f32566c2615f95bc3e4

Contents?: true

Size: 1.41 KB

Versions: 1

Compression:

Stored size: 1.41 KB

Contents

# 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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
translation_cms-0.1.5 app/forms/application_form.rb