README.md in smartsheet-1.0.0 vs README.md in smartsheet-1.1.0
- old
+ new
@@ -1,141 +1,214 @@
-# Smartsheet Ruby SDK [![Build Status](https://travis-ci.org/smartsheet-platform/smartsheet-ruby-sdk.svg?branch=master)](https://travis-ci.org/smartsheet-platform/smartsheet-ruby-sdk) [![Coverage Status](https://coveralls.io/repos/github/smartsheet-platform/smartsheet-ruby-sdk/badge.svg?branch=master)](https://coveralls.io/github/smartsheet-platform/smartsheet-ruby-sdk?branch=master) [![Gem Version](https://badge.fury.io/rb/smartsheet.svg)](https://badge.fury.io/rb/smartsheet)
-
-This is an SDK to simplify connecting to the [Smartsheet API](http://www.smartsheet.com/developers/api-documentation) from Ruby applications.
-
-## System Requirements
-
-The SDK supports Ruby versions 2.2 or later.
-
-## Installation
-
-Add this line to your application's Gemfile:
-
-```ruby
-gem 'smartsheet', '>= 1.0.0'
-```
-
-And then execute:
-
- $ bundle
-
-Or install it yourself as:
-
- $ gem install smartsheet --pre
-
-## Documentation
-
-The Smartsheet API documentation with corresponding SDK example code can be found [here](http://www.smartsheet.com/developers/api-documentation).
-
-## Example Usage
-
-To call the API, you must have an access token, which looks something like this example: ll352u9jujauoqz4gstvsae05. You can find the access token in the UI at Account > Personal Settings > API Access.
-
-The following is a brief sample that shows you how to:
-
-* Initialize the client
-* List all sheets
-* Load one sheet
-
-```ruby
-require 'smartsheet'
-
-# Initialize the client
-smartsheet_client = Smartsheet::Client.new(token: 'll352u9jujauoqz4gstvsae05')
-
-# The `smartsheet_client` variable now contains access to all of the APIs
-
-begin
- # List all sheets
- sheets = smartsheet_client.sheets.list
-
- # Default to first sheet
- sheet_id = sheets[:data][0][:id]
-
- # Load the entire sheet
- puts smartsheet_client.sheets.get(sheet_id: sheet_id)
-rescue Smartsheet::ApiError => e
- puts "Error Code: #{e.error_code}"
- puts "Message: #{e.message}"
- puts "Ref Id: #{e.ref_id}"
-end
-```
-
-See the [read-write-sheet](https://github.com/smartsheet-samples/ruby-read-write-sheet) example to see a more robust use case in action.
-
-## Basic Configuration
-
-When creating the client object, pass an object with any of the following properties to tune its behavior.
-
-* `max_retry_time` - The maximum time in seconds to retry intermittent errors. (Defaults to 15 seconds.)
-
-## Advanced Configuration Options
-### Logging Configuration
-
-Smartsheet expects a standard Ruby logger. For example, to enable console logging of warnings and above, make a call such as the following:
-
-```ruby
-logger = Logger.new(STDOUT)
-logger.level = Logger::WARN
-smartsheet = Smartsheet::Client.new(logger: logger)
-```
-
-Supported log levels are as follows:
-
-|Level |What is logged |
-|---------------|---------------------------------|
-|`Logger::ERROR`|Failures only |
-|`Logger::WARN` |Failures and retries |
-|`Logger::INFO` |Each call's URL and response code|
-|`Logger::DEBUG`|Full headers and payloads |
-
-By default, payloads are truncated to 1024 characters. To display full payloads, pass the `log_full_body` named flag to the `Smartsheet::Client` with the value true:
-
-```ruby
-smartsheet = Smartsheet::Client.new(logger: logger, log_full_body: true)
-```
-
-### Retry Configuration
-
-For additional customization, you can specify a `backoff_method` function. This function is called with two arguments:
-
-* The first accepts the index of the retry being attempted (0 for the first retry, 1 for the second, etc.)
-* The second accepts the Error Object that caused the retry.
-
-The function must return the number of seconds to wait before making the subsequent retry call, or the symbol `:stop` if no more retries should be made.
-
-The default implementation performs exponential backoff with jitter.
-
-### JSON Output
-
-* `json_output` - A flag indicating if data should be returned as a JSON string. Defaults to Hash output when not specified.
-
-### Assume User
-
-* `assume_user` - Allows an admin to act on behalf of, or impersonate, the user to make API calls. The email address should NOT be URI encoded.
-
-## Development
-
-After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests, with code coverage provided automatically by the Coveralls gem. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
-
-To install this gem onto your local machine, run `bundle exec rake install`.
-
-## Contributing
-
-If you would like to contribute a change to the SDK, please fork a branch and then submit a pull request.
-[More info here.](https://help.github.com/articles/using-pull-requests)
-
-## Support
-
-If you have any questions or issues with this SDK please post on [Stack Overflow using the tag "smartsheet-api"](http://stackoverflow.com/questions/tagged/smartsheet-api) or contact us directly at api@smartsheet.com.
-
-## Release Notes
-
-Each specific release is available for download via [GitHub](https://github.com/smartsheet-platform/smartsheet-ruby-sdk/tags).
-
-**v1.0.0 (Nov 2017)**
-Full release
-
-**v1.0.0.beta (October 2017)**
-Beta release of the Smartsheet SDK for Ruby
-
-*Note*: Minor changes that result in a patch version increment in RubyGems (such as updates to the README) will not be tagged as a Release in GitHub.
+# Smartsheet Ruby SDK [![Build Status](https://travis-ci.org/smartsheet-platform/smartsheet-ruby-sdk.svg?branch=master)](https://travis-ci.org/smartsheet-platform/smartsheet-ruby-sdk) [![Coverage Status](https://coveralls.io/repos/github/smartsheet-platform/smartsheet-ruby-sdk/badge.svg?branch=master)](https://coveralls.io/github/smartsheet-platform/smartsheet-ruby-sdk?branch=master) [![Gem Version](https://badge.fury.io/rb/smartsheet.svg)](https://badge.fury.io/rb/smartsheet)
+
+This is an SDK to simplify connecting to the [Smartsheet API](http://www.smartsheet.com/developers/api-documentation) from Ruby applications.
+
+## System Requirements
+
+The SDK supports Ruby versions 2.2 or later.
+
+## Installation
+
+Add this line to your application's Gemfile:
+
+```ruby
+gem 'smartsheet', '>= 1.0.0'
+```
+
+And then execute:
+
+ $ bundle
+
+Or install it yourself as:
+
+ $ gem install smartsheet
+
+## Documentation
+
+The Smartsheet API documentation with corresponding SDK example code can be found [here](http://www.smartsheet.com/developers/api-documentation).
+
+The generated SDK RubyDoc is available [here](http://www.rubydoc.info/gems/smartsheet/Smartsheet).
+
+## Example Usage
+
+To call the API, you must have an access token, which looks something like this example: `ll352u9jujauoqz4gstvsae05`. You can find the access token in the UI at Account > Personal Settings > API Access.
+
+The following is a brief sample that shows you how to:
+
+* Initialize the client
+* List all sheets
+* Load one sheet
+
+```ruby
+require 'smartsheet'
+
+# Initialize the client - use your access token here
+smartsheet_client = Smartsheet::Client.new(token: 'll352u9jujauoqz4gstvsae05')
+# The `smartsheet_client` variable now contains access to all of the APIs
+
+begin
+ # List all sheets
+ sheets = smartsheet_client.sheets.list
+
+ # Select first sheet
+ sheet_id = sheets[:data][0][:id]
+
+ # Load the entire sheet
+ puts "Loading sheet id #{sheet_id}"
+ sheet = smartsheet_client.sheets.get(sheet_id: sheet_id)
+ puts "Loaded #{sheet[:total_row_count]} rows from sheet '#{sheet[:name]}'"
+
+rescue Smartsheet::ApiError => e
+ puts "Error Code: #{e.error_code}"
+ puts "Message: #{e.message}"
+ puts "Ref Id: #{e.ref_id}"
+end
+```
+
+See the [read-write-sheet](https://github.com/smartsheet-samples/ruby-read-write-sheet) example to see a more robust use case in action.
+
+## Basic Configuration
+
+When creating the client object, pass an object with any of the following properties to tune its behavior.
+
+* `token` - Your smartsheet API access token. If you omit this property (or pass an empty string) then the access token will be read from the system environment variable `SMARTSHEET_ACCESS_TOKEN`.
+
+* `max_retry_time` - The maximum time in seconds to retry intermittent errors. (Defaults to 15 seconds.)
+
+* `base_url` - By default, the SDK connects to the production API URL. Provide a custom base URL to connect to other environments.
+
+## Advanced Configuration Options
+### Logging Configuration
+
+Smartsheet expects a standard Ruby logger. For example, to enable console logging of warnings and above, make a call such as the following:
+
+```ruby
+logger = Logger.new(STDOUT)
+logger.level = Logger::INFO
+smartsheet = Smartsheet::Client.new(logger: logger)
+```
+
+Supported log levels are as follows:
+
+|Level |What is logged |
+|---------------|---------------------------------|
+|`Logger::ERROR`|Failures only |
+|`Logger::WARN` |Failures and retries |
+|`Logger::INFO` |Each call's URL and response code|
+|`Logger::DEBUG`|Full headers and payloads |
+
+By default, payloads are truncated to 1024 characters. To display full payloads, pass the `log_full_body` named flag to the `Smartsheet::Client` with the value true:
+
+```ruby
+smartsheet = Smartsheet::Client.new(logger: logger, log_full_body: true)
+```
+
+### Retry Configuration
+
+For additional customization, you can specify a `backoff_method` function. This function is called with two arguments:
+
+* The first accepts the index of the retry being attempted (0 for the first retry, 1 for the second, etc.)
+* The second accepts the Error Object that caused the retry.
+
+The function must return the number of seconds to wait before making the subsequent retry call, or the symbol `:stop` if no more retries should be made.
+
+The default implementation performs exponential backoff with jitter.
+
+### JSON Input and Output
+* `json_output` - A flag indicating if data should be returned as a JSON string.
+
+ By default, the Ruby SDK converts the raw JSON API response (with camelCase properties) to a Ruby hash with snake_case properties. If you prefer to receive results as the original JSON string, initialize the client with `json_output: true`.
+
+ Regardless of this setting, the SDK will accept `body` parameters as a hash or JSON, and in either camelCase or snake_case.
+
+### Assume User
+
+* `assume_user` - Allows an admin to act on behalf of, or impersonate, the user to make API calls. The email address should NOT be URI encoded.
+
+### User Agent
+
+* `user_agent` - A custom app name to add to the user agent header; this helps Smartsheet diagnose any issues you may have while using the SDK.
+
+## Development
+
+After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
+
+To install this gem onto your local machine, run `bundle exec rake install`.
+
+### Running the Tests
+#### All
+1. Run `rake test`. Note, the mock API tests will fail unless the mock server is running. See [Mock API Tests](#mock-api-tests)
+
+#### Unit Tests
+1. Run `rake test:units`
+
+#### Mock API Tests
+1. Clone the [Smartsheet SDK tests](https://github.com/smartsheet-platform/smartsheet-sdk-tests) repo and follow the instructions from the README to start the mock server
+2. Run `rake test:mock_api`
+
+## Passthrough Option
+
+If there is an API Feature that is not yet supported by the Ruby SDK, there is a passthrough option that allows you to call arbitrary API endpoints.
+
+To invoke the passthrough, your code can call one of the following three methods:
+
+`response = smartsheet.request(method:, url_path:, body:, params:, header_overrides:)`
+
+`response = smartsheet.request_with_file(method:, url_path:, file:, file_length:, filename:, content_type:, params:, header_overrides:)`
+
+`response = smartsheet.request_with_file_from_path(method:, url_path:, path:, filename:, content_type:, params:, header_overrides:)`
+
+* `method`: The method to invoke, one of `:get`, `:post`, `:put`, or `:delete`
+* `url_path`: The specific API endpoint you wish to invoke. The client object base URL gets prepended to the caller’s endpoint URL argument. For example, passing a `url_path` of `sheets/1` to a standard client would give a URL like `https://api.smartsheet.com/2.0/sheets/1`
+* `body`: An optional hash of data to be passed as a JSON request body
+* `file`: An opened `File` object to read as the request body, generally for file attachment endpoints
+* `path`: The path of a file to be read as the request body, generally for file attachment endpoints
+* `file_length`: The length of a file body in octets
+* `filename`: The name of a file body
+* `content_type`: The MIME type of a file body
+* `params`: An optional hash of query parameters
+* `header_overrides`: An optional hash of HTTP header overrides
+
+All calls to passthrough methods return a JSON result, converted to a hash using symbol keys, in the same manner as the rest of the SDK. For example, after a `PUT` operation, the API's result message could be contained in `response[:message]`. If you prefer raw JSON instead of a hash, create a client with `json_output` configured; see client documentation above for more info.
+
+### Passthrough Example
+
+The following example shows how to POST data to `https://api.smartsheet.com/2.0/sheets` using the passthrough method and a hash:
+
+```ruby
+payload = {
+ name: 'my new sheet',
+ columns: [
+ {
+ title: 'Favorite',
+ type: 'CHECKBOX',
+ symbol: 'STAR'
+ },
+ {
+ title: 'Primary Column',
+ primary: true,
+ type: 'TEXT_NUMBER'
+ }
+ ]
+}
+
+response = smartsheet.request(
+ method: :post,
+ url_path: 'sheets',
+ body: payload
+)
+```
+
+## Contributing
+
+If you would like to contribute a change to the SDK, please fork a branch and then submit a pull request.
+[More info here.](https://help.github.com/articles/using-pull-requests)
+
+## Support
+
+If you have any questions or issues with this SDK please post on [Stack Overflow using the tag "smartsheet-api"](http://stackoverflow.com/questions/tagged/smartsheet-api) or contact us directly at api@smartsheet.com.
+
+## Release Notes
+
+Each specific release is available for download via [GitHub](https://github.com/smartsheet-platform/smartsheet-ruby-sdk/tags). Detailed release notes are available in [CHANGELOG.md].
+
+*Note*: Minor changes that result in a patch version increment in RubyGems (such as updates to the README) will not be tagged as a Release in GitHub.