README.md in twilio-ruby-6.0.0.pre.rc.3 vs README.md in twilio-ruby-6.0.0
- old
+ new
@@ -6,11 +6,11 @@
## Documentation
The documentation for the Twilio API can be found [here][apidocs].
-The Ruby library documentation can be found [here][libdocs] and individual releases [here][refdocs].
+The individual releases [here][refdocs].
## Versions
`twilio-ruby` uses a modified version of [Semantic Versioning](https://semver.org) for all changes. [See this document](VERSIONS.md) for details.
@@ -28,64 +28,88 @@
* JRuby 9.2
* JRuby 9.3
* JRuby 9.4
-### Migrating from 4.x
+### Migrating from 5.x
[Upgrade Guide][upgrade]
## Installation
To install using [Bundler][bundler] grab the latest stable version:
```ruby
-gem 'twilio-ruby', '~> 6.0.0-rc.3'
+gem 'twilio-ruby', '~> 6.0.0'
```
To manually install `twilio-ruby` via [Rubygems][rubygems] simply gem install:
```bash
-gem install twilio-ruby -v 6.0.0-rc.3
+gem install twilio-ruby -v 6.0.0
```
-To install `twilio-ruby` release candidate via [Rubygems][rubygems] simply gem install:
-
-```bash
-gem install twilio-ruby -v 6.0.0-rc.3
-```
-
To build and install the development branch yourself from the latest source:
```bash
git clone git@github.com:twilio/twilio-ruby.git
cd twilio-ruby
make install
```
-## Getting Started
+> **Info**
+> If the command line gives you an error message that says Permission Denied, try running the above commands with sudo.
+>
+> For example: `sudo gem install twilio-ruby`
-### Setup Work
+### Test your installation
+To make sure the installation was successful, try sending yourself an SMS message, like this:
+
+```rb
+require "twilio-ruby"
+
+# Your Account SID and Auth Token from console.twilio.com
+account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+auth_token = "your_auth_token"
+
+@client = Twilio::REST::Client.new account_sid, auth_token
+message = @client.messages.create(
+ body: "Hello from Ruby",
+ to: "+12345678901", # Text this number
+ from: "+15005550006", # From a valid Twilio number
+)
+
+puts message.sid
+```
+
+> **Warning**
+> It's okay to hardcode your credentials when testing locally, but you should use environment variables to keep them secret before committing any code or deploying to production. Check out [How to Set Environment Variables](https://www.twilio.com/blog/2017/01/how-to-set-environment-variables.html) for more information.
+
+## Usage
+
+### Authenticate the Client
+
```ruby
require 'twilio-ruby'
-# put your own credentials here
+# Your Account SID and Auth Token from console.twilio.com
account_sid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
auth_token = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
-# set up a client to talk to the Twilio REST API
+# Initialize the Twilio Client with your credentials
@client = Twilio::REST::Client.new account_sid, auth_token
```
### Use An API Key
```ruby
require 'twilio-ruby'
-# put your own credentials here
+# Your Account SID from console.twilio.com
account_sid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
+# API Key from twilio.com/console/project/api-keys
api_key_sid = 'zzzzzzzzzzzzzzzzzzzzzz'
api_key_secret = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
# set up a client to talk to the Twilio REST API using an API Key
@client = Twilio::REST::Client.new api_key_sid, api_key_secret, account_sid
@@ -106,26 +130,10 @@
@client.edge = 'sydney'
```
This will result in the `hostname` transforming from `api.twilio.com` to `api.sydney.au1.twilio.com`.
-### Enable Debug logging
-
-In order to enable debug logging, pass in a 'logger' instance to the client with the level set to at least 'DEBUG'
-
-```ruby
-@client = Twilio::REST::Client.new account_sid, auth_token
-myLogger = Logger.new(STDOUT)
-myLogger.level = Logger::DEBUG
-@client.logger = myLogger
-
-@client = Twilio::REST::Client.new account_sid, auth_token
-myLogger = Logger.new('my_log.log')
-myLogger.level = Logger::DEBUG
-@client.logger = myLogger
-```
-
### Make a Call
```ruby
@client.calls.create(
from: '+14159341234',
@@ -156,42 +164,116 @@
# put the message sid you want to retrieve here:
message_sid = 'SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
@client.messages(message_sid).fetch
```
-### Customizing your HTTP Client
+### Iterate through records
-`twilio-ruby` uses [Faraday][faraday] to make HTTP requests. You can tell `Twilio::REST::Client` to use any of the Faraday adapters like so:
+The library automatically handles paging for you. Collections, such as `calls` and `messages`, have `list` and stream methods that page under the hood. With both `list` and `stream`, you can specify the number of records you want to receive (`limit`) and the maximum size you want each page fetch to be (`page_size`). The library will then handle the task for you.
-```ruby
-@client.http_client.adapter = :typhoeus
+`list` eagerly fetches all records and returns them as a list, whereas `stream` returns an enumerator and lazily retrieves pages of records as you iterate over the collection. You can also page manually using the `page` method.
+
+For more information about these methods, view the [auto-generated library docs](https://www.twilio.com/docs/libraries/reference/twilio-ruby).
+
+```rb
+require 'twilio-ruby'
+
+account_sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
+auth_token = 'your_auth_token'
+
+@client = Twilio::REST::Client.new(account_sid, auth_token)
+
+@client.calls.list
+ .each do |call|
+ puts call.direction
+ end
```
-To use a custom HTTP client with this helper library, please see the [Twilio documentation](https://www.twilio.com/docs/libraries/ruby/custom-http-clients).
+### Enable Debug logging
-To apply customizations such as middleware, you can use the `configure_connection` method like so:
+In order to enable debug logging, pass in a 'logger' instance to the client with the level set to at least 'DEBUG'
```ruby
-@client.http_client.configure_connection do |faraday|
- faraday.use SomeMiddleware
-end
+@client = Twilio::REST::Client.new account_sid, auth_token
+myLogger = Logger.new(STDOUT)
+myLogger.level = Logger::DEBUG
+@client.logger = myLogger
+
+@client = Twilio::REST::Client.new account_sid, auth_token
+myLogger = Logger.new('my_log.log')
+myLogger.level = Logger::DEBUG
+@client.logger = myLogger
```
-### Handling Errors
+### Handle Exceptions {#exceptions}
-```ruby
+If the Twilio API returns a 400 or a 500 level HTTP response, the `twilio-ruby`
+library will throw a `Twilio::REST::RestError`. 400-level errors are normal
+during API operation (`“Invalid number”`, `“Cannot deliver SMS to that number”`,
+for example) and should be handled appropriately.
+
+```rb
+require 'twilio-ruby'
+
+account_sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
+auth_token = 'your_auth_token'
+
+@client = Twilio::REST::Client.new account_sid, auth_token
+
begin
messages = @client.messages.list(limit: 20)
rescue Twilio::REST::RestError => e
puts e.message
end
```
-For more descriptive exception types, please see the [Twilio documentation](https://www.twilio.com/docs/libraries/ruby/usage-guide#error-handling).
+### Debug API requests
-### Getting Started With Client Capability Tokens
+To assist with debugging, the library allows you to access the underlying request and response objects. This capability is built into the default HTTP client that ships with the library.
+For example, you can retrieve the status code of the last response like so:
+
+```ruby
+require 'rubygems' # Not necessary with ruby 1.9 but included for completeness
+require 'twilio-ruby'
+
+# Your Account SID and Auth Token from console.twilio.com
+account_sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
+auth_token = 'your_auth_token'
+
+@client = Twilio::REST::Client.new(account_sid, auth_token)
+
+@message = @client.messages.create(
+ to: '+14158675309',
+ from: '+14258675310',
+ body: 'Ahoy!'
+)
+
+# Retrieve the status code of the last response from the HTTP client
+puts @client.http_client.last_response.status_code
+```
+
+### Customize your HTTP Client
+
+`twilio-ruby` uses [Faraday][faraday] to make HTTP requests. You can tell `Twilio::REST::Client` to use any of the Faraday adapters like so:
+
+```ruby
+@client.http_client.adapter = :typhoeus
+```
+
+To use a custom HTTP client with this helper library, please see the [advanced example of how to do so](./advanced-examples/custom-http-client.md).
+
+To apply customizations such as middleware, you can use the `configure_connection` method like so:
+
+```ruby
+@client.http_client.configure_connection do |faraday|
+ faraday.use SomeMiddleware
+end
+```
+
+### Get started With Client Capability Tokens
+
If you just need to generate a Capability Token for use with Twilio Client, you can do this:
```ruby
require 'twilio-ruby'
@@ -214,11 +296,11 @@
@token = capability.to_s
```
There is a slightly more detailed document in the [Capability][capability] section of the wiki.
-### Generating TwiML
+### Generate TwiML
To control phone calls, your application needs to output [TwiML][twiml].
You can construct a TwiML response like this:
@@ -258,10 +340,10 @@
If you've instead found a bug in the library or would like new features added, go ahead and open issues or pull requests against this repo!
[apidocs]: https://www.twilio.com/docs/api
[twiml]: https://www.twilio.com/docs/api/twiml
-[libdocs]: https://www.twilio.com/docs/libraries/ruby
+[libdocs]: https://www.twilio.com/docs/libraries/reference/twilio-ruby/
[refdocs]: https://twilio.github.io/twilio-ruby
[capability]: https://github.com/twilio/twilio-ruby/wiki/JWT-Tokens
[wiki]: https://github.com/twilio/twilio-ruby/wiki
[bundler]: https://bundler.io
[rubygems]: https://rubygems.org