Question: I would like to be able to use underscore's `extend` function and implement a specific case. By default, `extend` overrides any existing member of the destination with that of the source. My problem with this is that I want to keep the initialize method of both the destination and the source intact, so what I did was roughly:

```
addComponent: function(comp, init) {
   var iF;
   if (comp.initialize) {
       iF = comp.initialize;
       delete comp["initialize"];
   }

   _.extend(this,comp);

   if (iF) {
       comp.initialize = iF;
       comp.initialize.call(this,init);
   }

   return this;
}

```

Is this the proper way to do it - by detaching and reattaching? I mean, I want to keep underscore intact, and I don't want to extend it with any methods, because this is a very specific case. Do you spot any potential

Answer: 
This seemed to work:

```
require 'open-uri'
url = "http://somedata.com/file.csv"
csv_data = open(url)
csv_rows = CSV.read(csv_data.path,  { headers: true,
                                  converters: :numeric,
                                  header_converters: :symbol }
               )

```
You might want to try [RemoteTable](https://github.com/seamusabshere/remote_table):

```
t = RemoteTable.new("http://somedata.com/file.csv")
t.each do |row|
  puts row['foo']
end

```

It can also read remote XLS, XLSX, Google Docs (spreadsheets), TSV, XML, HTML, etc. Lots of examples are in the README.