class ModelApi::BaseController::Utils

Public Class Methods

object_destroy(obj, opts = {}) click to toggle source
# File lib/model-api/base_controller.rb, line 640
def object_destroy(obj, opts = {})
  klass = ModelApi::Utils.find_class(obj)
  object_id = obj.send(opts[:id_attribute] || :id)
  obj.instance_variable_set(:@readonly, false) if obj.instance_variable_get(:@readonly)
  if (deleted_col = klass.columns_hash['deleted']).present?
    case deleted_col.type
    when :boolean
      obj.update_attribute(:deleted, true)
      return true
    when :integer, :decimal
      obj.update_attribute(:deleted, 1)
      return true
    else
      obj.destroy
    end
  else
    obj.destroy
  end
  false
rescue Exception => e
  Rails.logger.warn "Error destroying #{klass.name} \"#{object_id}\": \"#{e.message}\")."
  false
end
process_object_destroy(obj, operation, opts) click to toggle source
# File lib/model-api/base_controller.rb, line 617
def process_object_destroy(obj, operation, opts)
  soft_delete = obj.errors.present? ? false : object_destroy(obj, opts)

  if obj.errors.blank? && (soft_delete || obj.destroyed?)
    response_status = :ok
    object_errors = []
  else
    object_errors = ModelApi::Utils.extract_error_msgs(obj, opts)
    if object_errors.present?
      response_status = :bad_request
    else
      response_status = :internal_server_error
      object_errors << {
          error: 'Unspecified error',
          message: "Unspecified error processing #{operation}: " \
              'Please contact customer service for further assistance.'
      }
    end
  end

  [response_status, object_errors]
end
process_updated_model_save(obj, operation, opts = {}) click to toggle source
# File lib/model-api/base_controller.rb, line 592
def process_updated_model_save(obj, operation, opts = {})
  opts = opts.dup
  opts[:operation] = operation
  successful = ModelApi::Utils.save_obj(obj,
      opts.merge(model_metadata: opts[:api_model_metadata]))
  if successful
    suggested_response_status = :ok
    object_errors = []
  else
    suggested_response_status = :bad_request
    attr_metadata = opts.delete(:api_attr_metadata) ||
        ModelApi::Utils.filtered_attrs(obj, operation, opts)
    object_errors = ModelApi::Utils.extract_error_msgs(obj,
        opts.merge(api_attr_metadata: attr_metadata))
    unless object_errors.present?
      object_errors << {
          error: 'Unspecified error',
          message: "Unspecified error processing #{operation}: " \
              'Please contact customer service for further assistance.'
      }
    end
  end
  [suggested_response_status, object_errors]
end