class ActiveStorage::Attached::Changes::CreateOne

def find_or_build_blob

def find_or_build_blob
  case attachable
  when ActiveStorage::Blob
    attachable
  when ActionDispatch::Http::UploadedFile, Rack::Test::UploadedFile
    ActiveStorage::Blob.build_after_unfurling \
      io: attachable.open,
      filename: attachable.original_filename,
      content_type: attachable.content_type
  when Hash
    ActiveStorage::Blob.build_after_unfurling(attachable)
  when String
    ActiveStorage::Blob.find_signed(attachable)
  else
    raise ArgumentError, "Could not find or build blob: expected attachable, got #{attachable.inspect}"
  end
end