lib/dsu/validators/entries_validator.rb in dsu-0.1.0.alpha.2 vs lib/dsu/validators/entries_validator.rb in dsu-0.1.0.alpha.3

- old
+ new

@@ -10,18 +10,18 @@ include Dsu::Support::FieldErrors def validate(record) raise 'options[:fields] is not defined.' unless options.key? :fields raise 'options[:fields] is not an Array.' unless options[:fields].is_a? Array - raise 'options[:fields] elements are not Symbols.' unless options[:fields].all? { |field| field.is_a? Symbol } + raise 'options[:fields] elements are not Symbols.' unless options[:fields].all?(Symbol) options[:fields].each do |field| entries = record.send(field) unless entries.is_a?(Array) record.errors.add(field, 'is the wrong object type. ' \ - "\"Array\" was expected, but \"#{entries.class}\" was received.") + "\"Array\" was expected, but \"#{entries.class}\" was received.") next end validate_entry_types field, entries, record validate_unique_entry_uuids field, entries, record @@ -33,11 +33,11 @@ def validate_entry_types(field, entries, record) entries.each do |entry| next if entry.is_a? Dsu::Models::Entry record.errors.add(field, 'entry Array element is the wrong object type. ' \ - "\"Entry\" was expected, but \"#{entry.class}\" was received.", + "\"Entry\" was expected, but \"#{entry.class}\" was received.", type: Dsu::Support::FieldErrors::FIELD_TYPE_ERROR) next end end @@ -45,19 +45,16 @@ def validate_unique_entry_uuids(field, entries, record) return unless entries.is_a? Array entry_objects = entries.select { |entry| entry.is_a?(Dsu::Models::Entry) } - entry_objects.map(&:uuid).tap do |uuids| - return if uuids.uniq.length == uuids.length - end + uuids = entry_objects.map(&:uuid) + return if uuids.uniq.length == uuids.length - entry_objects.map(&:uuid).tap do |uuids| - non_unique_uuids = uuids.select{ |element| uuids.count(element) > 1 }.uniq - if non_unique_uuids.any? - record.errors.add(field, "contains duplicate UUIDs: #{non_unique_uuids.join(', ')}.", - type: Dsu::Support::FieldErrors::FIELD_DUPLICATE_ERROR) - end + non_unique_uuids = uuids.select { |element| uuids.count(element) > 1 }.uniq + if non_unique_uuids.any? + record.errors.add(field, "contains duplicate UUIDs: #{non_unique_uuids.join(', ')}.", + type: Dsu::Support::FieldErrors::FIELD_DUPLICATE_ERROR) end end end end end