lib/ensurance.rb in ensurance-0.1.3 vs lib/ensurance.rb in ensurance-0.1.4
- old
+ new
@@ -14,25 +14,30 @@
@_ensure_by = nil
end
def ensure(thing = nil)
return nil unless thing.present?
+ found = nil
if thing.is_a?(self)
return thing
+ elsif thing.is_a?(Array)
+ raise ArgumentError.new("Cannot Ensure #{self.name} with an Array: #{thing.inspect}")
elsif thing.is_a?(GlobalID)
return GlobalID::Locator.locate(thing)
elsif thing.is_a?(Hash) && thing['_aj_globalid'] && (found = GlobalID::Locator.locate(thing['_aj_globalid']))
return found
elsif thing.is_a?(String) && found = GlobalID::Locator.locate(thing)
return found
end
- found = nil
- @_ensure_by ||= [self.primary_key, @_additional_ensure_by].flatten.compact.uniq
+ @_ensure_by ||= [@_additional_ensure_by || self.primary_key].flatten.compact.uniq
@_ensure_by.each do |ensure_field|
- value = thing.try(:fetch, ensure_field.to_sym, nil) || thing.try(:fetch, ensure_field.to_s, nil) || thing
- found = self.find_by(ensure_field => value)
+ value = thing
+ if thing.is_a?(Hash)
+ value = thing.fetch(ensure_field.to_sym, nil) || thing.fetch(ensure_field.to_s, nil)
+ end
+ found = self.find_by(ensure_field => value) if value.present? && !value.is_a?(Hash)
break if found.is_a?(self)
end
found
end