Lesson content is currently in draft form.
So we’ve learned how to input URLs in the Ruby interpreter. But how do we actually download something?
In the last chapter, we learned about how variables can point to data objects, such as strings. But there are also pointers to blocks of code that actually do something, such as methods.
In fact, puts is a method. And there are many other methods which can do much more than print to screen. Much of the power of programming is being able to hugely complex operations by invoking a single word – the name of a method.
So to download a file, all we need to do is find the name of the method that contains the downloading functionality.
It’s a HTTParty
Doing a few Google searches for “Ruby library” and “download a file” will net us a few options. The most fun-sounding one is John Nunemaker’s HTTParty gem, which claims to make “http fun again!”
According to the documentation, here’s how to download from a URL:
1 2 3 4 | |
Let’s dissect this code snippet.
The ‘require’ statement
The Ruby keyword require is a method that, when given a string, pulls in the library of code that that string refers to.
- The first
requirecall tells the Ruby interpreter that we’ll be using rubygems, Ruby’s convenient framework of packaging these libraries. - The second
requirecall pulls in the code for the HTTParty gem. By convention, the actual strings used to refer to the gem use lowercase letters, underscores, and sometimes hyphens (In the case of HTTParty, you can refer to it asrequire "HTTParty").
In irb, you should see this:
1 2 3 4 | |
(require 'rubygems' will return false if your irb environment preloads it)
The ‘get’ method
This next line is where the interesting work is done:
1
| |
First, focus on what’s to the right of the equals sign (which we learned is the assignment operator).
1
| |
Following the get is a string, wrapped in parentheses. These parentheses denote the arguments for the get method. I’ll explain arguments later.
To review:
To download a file from "http://learnwhytocode.danwin.com", we call this method:
HTTParty.get("http://learnwhytocode.danwin.com")
HTTPartyis the objectgetis a method ofHTTParty- and the string
"http://learnwhytocode.danwin.com"is an argument that we pass to thegetmethod
Why is the object named HTTParty and its method get? Because the author wanted it that way. What is the code behind get? You can examine it later on your own, as the author has generously made it open source, but let’s be content for now that it works as the author claims in the documentation.
Variables, revisited
Let’s go back to the original code that contained the variable assignment:
1
| |
The variable named response contains the return value of the get method.
What does response contain? Let’s try it out:
1 2 3 4 5 6 7 8 | |
Note: you only have to do the require statements once each time you startup irb. If you exit and re-launch irb, you’ll have to call require again to bring in the libraries
If you look through the HTTParty documentation, you’ll find that the body method of this HTTParty::Response class contains the contents of the webpage:
1 2 3 4 | |
That’s all there is to downloading a file. If you look through the HTTParty documentation, you’ll see that there’s a lot of underlying code. But we don’t need to worry about that. Thanks to the nature of programming and how it abstracts complexity to a single word, we just need to know how to invoke HTTParty.get
We’ll find out what to do with the result of HTTParty.get in the next chapter.
Exercise
Use the HTTParty library to download this URL: http://nottwitter.danwin.com/users/joebiden/show.json