Module: ApiResource::ModelErrors

Extended by:
ActiveSupport::Concern
Includes:
ActiveModel::Validations
Included in:
Base
Defined in:
lib/api_resource/model_errors.rb

Instance Method Summary collapse

Instance Method Details

#errorsObject



79
80
81
# File 'lib/api_resource/model_errors.rb', line 79

def errors
  @errors ||= ApiResource::Errors.new(self)
end

#load_remote_errors(remote_errors, save_cache = false) ⇒ Object



62
63
64
65
66
67
68
69
70
71
# File 'lib/api_resource/model_errors.rb', line 62

def load_remote_errors(remote_errors, save_cache = false)
  error_data = self.class.format.decode(remote_errors.response.body)['errors'] || {}
  if error_data.is_a?(Hash)
    self.errors.from_hash(error_data)
  elsif error_data.is_a?(Array)
    self.errors.from_array(error_data)
  else
    raise "Invalid response for invalid object: expected an array or hash got #{remote_errors}"
  end
end

#save_with_validations(*args) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/api_resource/model_errors.rb', line 43

def save_with_validations(*args)
  # we want to leave the original intact
  options = args.clone.extract_options!
  
  perform_validation = options.blank? ? true : options[:validate]
  
  @remote_errors = nil
  if perform_validation && valid? || !perform_validation
    save_without_validations(*args)
    true
  else
    false
  end
rescue ApiResource::UnprocessableEntity => error
  @remote_errors = error
  load_remote_errors(@remote_errors, true)
  false
end

#valid?Boolean

This method runs any local validations but not remote ones

Returns:

  • (Boolean)


74
75
76
77
# File 'lib/api_resource/model_errors.rb', line 74

def valid?
  super
  errors.empty?
end