From 316da93298e9dbe11baf7a724f7c7caeab7d7844 Mon Sep 17 00:00:00 2001 From: Ryan Stout Date: Wed, 29 Apr 2015 17:01:15 -0600 Subject: [PATCH] Fix server based errors and unique error field name issue. --- app/volt/tasks/store_tasks.rb | 3 +++ lib/volt/models/buffer.rb | 3 +++ lib/volt/models/validations.rb | 3 ++- lib/volt/models/validators/unique_validator.rb | 2 +- lib/volt/page/tasks.rb | 2 +- 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/volt/tasks/store_tasks.rb b/app/volt/tasks/store_tasks.rb index cd0bdbbb..76f403af 100644 --- a/app/volt/tasks/store_tasks.rb +++ b/app/volt/tasks/store_tasks.rb @@ -55,6 +55,9 @@ def save(collection, path, data) save_promise = model.save!.then do |result| next nil + end.fail do |err| + # An error object, convert to hash + Promise.new.reject(err.to_h) end Thread.current['in_channel'] = nil diff --git a/lib/volt/models/buffer.rb b/lib/volt/models/buffer.rb index ff721f8b..8e4ab19c 100644 --- a/lib/volt/models/buffer.rb +++ b/lib/volt/models/buffer.rb @@ -42,6 +42,9 @@ def save!(&block) end.fail do |errors| if errors.is_a?(Hash) server_errors.replace(errors) + + # Merge the server errors into the main errors + self.errors.merge!(server_errors.to_h) end promise_for_errors(errors) diff --git a/lib/volt/models/validations.rb b/lib/volt/models/validations.rb index 567cd7da..b9dba377 100644 --- a/lib/volt/models/validations.rb +++ b/lib/volt/models/validations.rb @@ -20,7 +20,8 @@ def validate(field_name = nil, options = nil, &block) custom_validations << block else self.validations ||= {} - validations[field_name] = options + validations[field_name] ||= {} + validations[field_name].merge!(options) end end end diff --git a/lib/volt/models/validators/unique_validator.rb b/lib/volt/models/validators/unique_validator.rb index 8e547f02..bc3b61bd 100644 --- a/lib/volt/models/validators/unique_validator.rb +++ b/lib/volt/models/validators/unique_validator.rb @@ -17,7 +17,7 @@ def self.validate(model, field_name, args) message = (args.is_a?(Hash) && args[:message]) || 'is already taken' # return the error - next {field_name: [message]} + next {field_name => [message]} end end end diff --git a/lib/volt/page/tasks.rb b/lib/volt/page/tasks.rb index 4f7dfbe6..21ce707c 100644 --- a/lib/volt/page/tasks.rb +++ b/lib/volt/page/tasks.rb @@ -46,7 +46,7 @@ def response(promise_id, result, error) if error # TODO: full error handling Volt.logger.error("Task Response:") - Volt.logger.error(error) + Volt.logger.error(error.inspect) promise.reject(error) else promise.resolve(result)