inbox 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +61 -37
 - data/lib/account.rb +23 -10
 - data/lib/draft.rb +0 -1
 - data/lib/inbox.rb +38 -38
 - data/lib/restful_model.rb +4 -2
 - data/lib/restful_model_collection.rb +17 -1
 - data/lib/time_attr_accessor.rb +3 -1
 - data/lib/version.rb +1 -1
 - metadata +28 -28
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: b5c174c3fd4fd1cad46d27b002e1e881d3d374fd
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 12fb8ec8381a6e47de38aacbf844d58515741d3c
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 8f3cc95868344d89c6c3a79d6bde051f0a151f0422cf4ab8ed88d7e264a3732bf503457a686b5d6cf1fead0354b58b15fd139574c8299eccc89c407d930415db
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 30f95170b47ed231dd1254313cd3b56dc9dd29011e5f8ebeec0e07cb08c04c357ee946ce045cbb4d1cb2fb029868a40d0cb69b8daed38bb72dd4403996b8fe86
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #  
     | 
| 
      
 1 
     | 
    
         
            +
            # Nilas REST API Ruby bindings
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            ## Installation
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
         @@ -24,7 +24,7 @@ You don't need to use this repo unless you're planning to modify the gem. If you 
     | 
|
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
            ## Example Rails App
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
            A small example Rails app is included in the `example` directory. You can run the sample app to see how an authentication flow might be implemented. 
     | 
| 
      
 27 
     | 
    
         
            +
            A small example Rails app is included in the `example` directory. You can run the sample app to see how an authentication flow might be implemented.
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
            `cd example`
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
         @@ -36,16 +36,16 @@ A small example Rails app is included in the `example` directory. You can run th 
     | 
|
| 
       36 
36 
     | 
    
         | 
| 
       37 
37 
     | 
    
         
             
            ### App ID and Secret
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
            Before you can interact with the Inbox API, you need to register for the  
     | 
| 
      
 39 
     | 
    
         
            +
            Before you can interact with the Inbox API, you need to register for the Nilas Developer Program at [https://www.nilas.com/](https://www.nilas.com/). After you've created a developer account, you can create a new application to generate an App ID / Secret pair.
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
41 
     | 
    
         
             
            Generally, you should store your App ID and Secret into environment variables to avoid adding them to source control. That said, in the example project and code snippets below, the values were added to `config/environments/development.rb` for convenience.
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
       43 
43 
     | 
    
         | 
| 
       44 
44 
     | 
    
         
             
            ### Authentication
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
            The  
     | 
| 
      
 46 
     | 
    
         
            +
            The Nilas REST API uses server-side (three-legged) OAuth, and the Ruby gem provides convenience methods that simplify the OAuth process. For more information about authenticating with Nilas, visit the [Developer Documentation](https://www.nilas.com/docs/gettingstarted-hosted#authenticating).
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
            **Step 1: Redirect the user to  
     | 
| 
      
 48 
     | 
    
         
            +
            **Step 1: Redirect the user to Nilas:**
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
       50 
50 
     | 
    
         
             
            ```ruby
         
     | 
| 
       51 
51 
     | 
    
         
             
            require 'inbox'
         
     | 
| 
         @@ -53,11 +53,11 @@ require 'inbox' 
     | 
|
| 
       53 
53 
     | 
    
         
             
            def login
         
     | 
| 
       54 
54 
     | 
    
         
             
              inbox = Inbox::API.new(config.inbox_app_id, config.inbox_app_secret, nil)
         
     | 
| 
       55 
55 
     | 
    
         
             
              # The email address of the user you want to authenticate
         
     | 
| 
       56 
     | 
    
         
            -
              user_email = 'ben@ 
     | 
| 
      
 56 
     | 
    
         
            +
              user_email = 'ben@nilas.com'
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
              # This URL must be registered with your application in the developer portal
         
     | 
| 
       59 
59 
     | 
    
         
             
              callback_url = url_for(:action => 'login_callback')
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
       61 
61 
     | 
    
         
             
              redirect_to inbox.url_for_authentication(callback_url, user_email)
         
     | 
| 
       62 
62 
     | 
    
         
             
            end
         
     | 
| 
       63 
63 
     | 
    
         
             
            ```
         
     | 
| 
         @@ -65,7 +65,7 @@ end 
     | 
|
| 
       65 
65 
     | 
    
         
             
            **Step 2: Handle the Authentication Response:**
         
     | 
| 
       66 
66 
     | 
    
         | 
| 
       67 
67 
     | 
    
         
             
            ```ruby
         
     | 
| 
       68 
     | 
    
         
            -
            def login_callback 
     | 
| 
      
 68 
     | 
    
         
            +
            def login_callback
         
     | 
| 
       69 
69 
     | 
    
         
             
              inbox = Inbox::API.new(config.inbox_app_id, config.inbox_app_secret, nil)
         
     | 
| 
       70 
70 
     | 
    
         
             
              inbox_token = inbox.token_for_code(params[:code])
         
     | 
| 
       71 
71 
     | 
    
         | 
| 
         @@ -75,11 +75,11 @@ end 
     | 
|
| 
       75 
75 
     | 
    
         | 
| 
       76 
76 
     | 
    
         
             
            ### Managing Billing
         
     | 
| 
       77 
77 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
            If you're using the open-source version of the  
     | 
| 
      
 78 
     | 
    
         
            +
            If you're using the open-source version of the Nilas Sync Engine or have fewer than 10 accounts associated with your developer app, you don't need to worry about billing. However, if you've requested production access to the Sync Engine, you are billed monthly based on the number of email accounts you've connected to Inbox. You can choose to start accounts in "trial" state and sync slowly at a rate of one message per minute so users can try out your app. If you use trial mode, you need to upgrade accounts (and start paying for them) within 30 days or they will automatically expire. You may wish to upgrade accounts earlier to dramatically speed up the mail sync progress depending on your app's needs.
         
     | 
| 
       79 
79 
     | 
    
         | 
| 
       80 
80 
     | 
    
         
             
            **Starting an Account in Trial Mode**
         
     | 
| 
       81 
81 
     | 
    
         | 
| 
       82 
     | 
    
         
            -
            When you're redirecting the user to  
     | 
| 
      
 82 
     | 
    
         
            +
            When you're redirecting the user to Nilas to authenticate with their email provider,
         
     | 
| 
       83 
83 
     | 
    
         
             
            pass the additional `trial: true` option to start their account in trial mode.
         
     | 
| 
       84 
84 
     | 
    
         | 
| 
       85 
85 
     | 
    
         
             
            ```ruby
         
     | 
| 
         @@ -89,17 +89,17 @@ pass the additional `trial: true` option to start their account in trial mode. 
     | 
|
| 
       89 
89 
     | 
    
         
             
            **Upgrading an Account**
         
     | 
| 
       90 
90 
     | 
    
         | 
| 
       91 
91 
     | 
    
         
             
            ```ruby
         
     | 
| 
       92 
     | 
    
         
            -
               
     | 
| 
       93 
     | 
    
         
            -
               
     | 
| 
       94 
     | 
    
         
            -
               
     | 
| 
       95 
     | 
    
         
            -
              inbox.upgrade_account!
         
     | 
| 
      
 92 
     | 
    
         
            +
              inbox = Inbox::API.new(config.inbox_app_id, config.inbox_app_secret, nil)
         
     | 
| 
      
 93 
     | 
    
         
            +
              account = inbox.accounts.find(account_id)
         
     | 
| 
      
 94 
     | 
    
         
            +
              account.upgrade!
         
     | 
| 
       96 
95 
     | 
    
         
             
            ```
         
     | 
| 
       97 
96 
     | 
    
         | 
| 
       98 
97 
     | 
    
         
             
            **Cancelling an Account**
         
     | 
| 
       99 
98 
     | 
    
         | 
| 
       100 
99 
     | 
    
         
             
            ```ruby
         
     | 
| 
       101 
     | 
    
         
            -
              inbox = Inbox::API.new(config.inbox_app_id, config.inbox_app_secret,  
     | 
| 
       102 
     | 
    
         
            -
              inbox. 
     | 
| 
      
 100 
     | 
    
         
            +
              inbox = Inbox::API.new(config.inbox_app_id, config.inbox_app_secret, nil)
         
     | 
| 
      
 101 
     | 
    
         
            +
              account = inbox.accounts.find(account_id)
         
     | 
| 
      
 102 
     | 
    
         
            +
              account.downgrade!
         
     | 
| 
       103 
103 
     | 
    
         | 
| 
       104 
104 
     | 
    
         
             
              # Your Inbox API token will be revoked, you will not be charged
         
     | 
| 
       105 
105 
     | 
    
         
             
            ```
         
     | 
| 
         @@ -110,7 +110,7 @@ pass the additional `trial: true` option to start their account in trial mode. 
     | 
|
| 
       110 
110 
     | 
    
         
             
              # Query the status of every account linked to the app
         
     | 
| 
       111 
111 
     | 
    
         
             
              inbox = Inbox::API.new(config.inbox_app_id, config.inbox_app_secret, inbox_token)
         
     | 
| 
       112 
112 
     | 
    
         
             
              accounts = inbox.accounts
         
     | 
| 
       113 
     | 
    
         
            -
              accounts. 
     | 
| 
      
 113 
     | 
    
         
            +
              accounts.each { |a| [a.account_id, a.sync_state] } # Available fields are: account_id, sync_state, trial, trial_expires, billing_state and namespace_id. See lib/account.rb for more details.
         
     | 
| 
       114 
114 
     | 
    
         
             
            ```
         
     | 
| 
       115 
115 
     | 
    
         | 
| 
       116 
116 
     | 
    
         
             
            ### Fetching Namespaces
         
     | 
| 
         @@ -140,21 +140,27 @@ thread = namespace.threads.find('ac123acd123ef123') 
     | 
|
| 
       140 
140 
     | 
    
         
             
            # (paginating 50 at a time until no more are returned.)
         
     | 
| 
       141 
141 
     | 
    
         
             
            namespace.threads.where(:tag => 'inbox').each do |thread|
         
     | 
| 
       142 
142 
     | 
    
         
             
              puts thread.subject
         
     | 
| 
       143 
     | 
    
         
            -
            end 
     | 
| 
      
 143 
     | 
    
         
            +
            end
         
     | 
| 
       144 
144 
     | 
    
         | 
| 
       145 
145 
     | 
    
         
             
            # List the 5 most recent unread threads
         
     | 
| 
       146 
146 
     | 
    
         
             
            namespace.threads.where(:tag => 'unread').range(0,4).each do |thread|
         
     | 
| 
       147 
147 
     | 
    
         
             
              puts thread.subject
         
     | 
| 
       148 
     | 
    
         
            -
            end 
     | 
| 
      
 148 
     | 
    
         
            +
            end
         
     | 
| 
       149 
149 
     | 
    
         | 
| 
       150 
     | 
    
         
            -
            # List all threads with 'ben@ 
     | 
| 
       151 
     | 
    
         
            -
            namespace.threads.where(:any_email => 'ben@ 
     | 
| 
      
 150 
     | 
    
         
            +
            # List all threads with 'ben@nilas.com'
         
     | 
| 
      
 151 
     | 
    
         
            +
            namespace.threads.where(:any_email => 'ben@nilas.com').each do |thread|
         
     | 
| 
       152 
152 
     | 
    
         
             
              puts thread.subject
         
     | 
| 
       153 
     | 
    
         
            -
            end 
     | 
| 
      
 153 
     | 
    
         
            +
            end
         
     | 
| 
       154 
154 
     | 
    
         | 
| 
       155 
     | 
    
         
            -
            #  
     | 
| 
      
 155 
     | 
    
         
            +
            # Get number of all threads
         
     | 
| 
      
 156 
     | 
    
         
            +
            count = namespace.threads.count
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
            # Get number of threads with 'ben@inboxapp.com'
         
     | 
| 
      
 159 
     | 
    
         
            +
            count = namespace.threads.where(:any_email => 'ben@inboxapp.com').count
         
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
      
 161 
     | 
    
         
            +
            # Collect all threads with 'ben@nilas.com' into an array.
         
     | 
| 
       156 
162 
     | 
    
         
             
            # Note: for large numbers of threads, this is not advised.
         
     | 
| 
       157 
     | 
    
         
            -
            threads = namespace.threads.where(:any_email => 'ben@ 
     | 
| 
      
 163 
     | 
    
         
            +
            threads = namespace.threads.where(:any_email => 'ben@nilas.com').all
         
     | 
| 
       158 
164 
     | 
    
         
             
            ```
         
     | 
| 
       159 
165 
     | 
    
         | 
| 
       160 
166 
     | 
    
         | 
| 
         @@ -202,10 +208,10 @@ file.save! 
     | 
|
| 
       202 
208 
     | 
    
         
             
            Each of the primary collections (contacts, messages, etc.) behave the same way as `threads`. For example, finding messages with a filter is similar to finding threads:
         
     | 
| 
       203 
209 
     | 
    
         | 
| 
       204 
210 
     | 
    
         
             
            ```ruby
         
     | 
| 
       205 
     | 
    
         
            -
            messages = namespace.messages.where(:to => 'ben@ 
     | 
| 
      
 211 
     | 
    
         
            +
            messages = namespace.messages.where(:to => 'ben@nilas.com`).all
         
     | 
| 
       206 
212 
     | 
    
         
             
            ```
         
     | 
| 
       207 
213 
     | 
    
         | 
| 
       208 
     | 
    
         
            -
            The `where` method accepts a hash of filters, as documented in the [Inbox Filters Documentation](https://www. 
     | 
| 
      
 214 
     | 
    
         
            +
            The `where` method accepts a hash of filters, as documented in the [Inbox Filters Documentation](https://www.nilas.com/docs/api#filters).
         
     | 
| 
       209 
215 
     | 
    
         | 
| 
       210 
216 
     | 
    
         
             
            ### Getting the raw contents of a message
         
     | 
| 
       211 
217 
     | 
    
         | 
| 
         @@ -221,13 +227,13 @@ raw_contents = message.raw.rfc2822 
     | 
|
| 
       221 
227 
     | 
    
         
             
            ```ruby
         
     | 
| 
       222 
228 
     | 
    
         
             
            # Create a new draft
         
     | 
| 
       223 
229 
     | 
    
         
             
            draft = namespace.drafts.build(
         
     | 
| 
       224 
     | 
    
         
            -
              :to => [{:name => 'Ben Gotow', :email => 'ben@ 
     | 
| 
      
 230 
     | 
    
         
            +
              :to => [{:name => 'Ben Gotow', :email => 'ben@nilas.com'}],
         
     | 
| 
       225 
231 
     | 
    
         
             
              :subject => "Sent by Ruby",
         
     | 
| 
       226 
232 
     | 
    
         
             
              :body => "Hi there!<strong>This is HTML</strong>"
         
     | 
| 
       227 
233 
     | 
    
         
             
            )
         
     | 
| 
       228 
234 
     | 
    
         | 
| 
       229 
235 
     | 
    
         
             
            # Modify attributes as necessary
         
     | 
| 
       230 
     | 
    
         
            -
            draft.cc = [{:name => 'Michael', :email => 'mg@ 
     | 
| 
      
 236 
     | 
    
         
            +
            draft.cc = [{:name => 'Michael', :email => 'mg@nilas.com'}]
         
     | 
| 
       231 
237 
     | 
    
         | 
| 
       232 
238 
     | 
    
         
             
            # Add the file we uploaded as an attachment
         
     | 
| 
       233 
239 
     | 
    
         
             
            draft.attach(file)
         
     | 
| 
         @@ -235,8 +241,7 @@ draft.attach(file) 
     | 
|
| 
       235 
241 
     | 
    
         
             
            # Save the draft
         
     | 
| 
       236 
242 
     | 
    
         
             
            draft.save!
         
     | 
| 
       237 
243 
     | 
    
         | 
| 
       238 
     | 
    
         
            -
            # Send the draft. 
     | 
| 
       239 
     | 
    
         
            -
            # with Inbox for delivery through the user's SMTP gateway.
         
     | 
| 
      
 244 
     | 
    
         
            +
            # Send the draft.
         
     | 
| 
       240 
245 
     | 
    
         
             
            draft.send!
         
     | 
| 
       241 
246 
     | 
    
         
             
            ```
         
     | 
| 
       242 
247 
     | 
    
         | 
| 
         @@ -257,9 +262,29 @@ new_event.when = {:start_time => 1407542195, :end_time => 1407543195} 
     | 
|
| 
       257 
262 
     | 
    
         
             
            new_event.save!
         
     | 
| 
       258 
263 
     | 
    
         
             
            ```
         
     | 
| 
       259 
264 
     | 
    
         | 
| 
      
 265 
     | 
    
         
            +
            ### Handling Errors
         
     | 
| 
      
 266 
     | 
    
         
            +
            The Nilas API uses conventional HTTP response codes to indicate success or failure of an API request. The ruby gem raises these as native exceptions.
         
     | 
| 
      
 267 
     | 
    
         
            +
             
     | 
| 
      
 268 
     | 
    
         
            +
            Code | Error Type | Description
         
     | 
| 
      
 269 
     | 
    
         
            +
            --- | --- | ---
         
     | 
| 
      
 270 
     | 
    
         
            +
            400 | InvalidRequest | Your request has invalid parameters.
         
     | 
| 
      
 271 
     | 
    
         
            +
            403 | AccessDenied | You don't have authorization to access the requested resource or perform the requested action. You may need to re-authenticate the user.
         
     | 
| 
      
 272 
     | 
    
         
            +
            404 | ResourceNotFound | The requested resource doesn't exist.
         
     | 
| 
      
 273 
     | 
    
         
            +
            500 | APIError | There was an internal error with the Nilas server.
         
     | 
| 
      
 274 
     | 
    
         
            +
             
     | 
| 
      
 275 
     | 
    
         
            +
            A few additional exceptions are raised by the `draft.send!` method if your draft couldn't be sent.
         
     | 
| 
      
 276 
     | 
    
         
            +
             
     | 
| 
      
 277 
     | 
    
         
            +
            Code | Error Type | Description
         
     | 
| 
      
 278 
     | 
    
         
            +
            --- | --- | ---
         
     | 
| 
      
 279 
     | 
    
         
            +
            402 | MessageRejected| The message was syntactically valid, but rejected for delivery by the mail server.
         
     | 
| 
      
 280 
     | 
    
         
            +
            429 | SendingQuotaExceeded | The user has exceeded their daily sending quota.
         
     | 
| 
      
 281 
     | 
    
         
            +
            503 | ServiceUnavailable | There was a temporary error establishing a connection to the user's mail server.
         
     | 
| 
      
 282 
     | 
    
         
            +
             
     | 
| 
      
 283 
     | 
    
         
            +
             
     | 
| 
      
 284 
     | 
    
         
            +
             
     | 
| 
       260 
285 
     | 
    
         
             
            ## Open-Source Sync Engine
         
     | 
| 
       261 
286 
     | 
    
         | 
| 
       262 
     | 
    
         
            -
            The [ 
     | 
| 
      
 287 
     | 
    
         
            +
            The [Nilas Sync Engine](http://github.com/inboxapp/inbox) is open-source, and you can also use the Ruby gem with the open-source API. Since the open-source API provides no authentication or security, connecting to it is simple. When you instantiate the Inbox object, provide `nil` for the App ID, App Secret, and API Token, and pass the fully-qualified address to your copy of the sync engine:
         
     | 
| 
       263 
288 
     | 
    
         | 
| 
       264 
289 
     | 
    
         
             
            ```ruby
         
     | 
| 
       265 
290 
     | 
    
         
             
            require 'inbox'
         
     | 
| 
         @@ -269,24 +294,23 @@ inbox = Inbox::API.new(nil, nil, nil, 'http://localhost:5555/') 
     | 
|
| 
       269 
294 
     | 
    
         | 
| 
       270 
295 
     | 
    
         
             
            ## Contributing
         
     | 
| 
       271 
296 
     | 
    
         | 
| 
       272 
     | 
    
         
            -
            We'd love your help making the  
     | 
| 
      
 297 
     | 
    
         
            +
            We'd love your help making the Nilas ruby gem better. Join the Google Group for project updates and feature discussion. We also hang out in `#nilas` on [irc.freenode.net](http://irc.freenode.net), or you can email [support@nilas.com](mailto:support@nilas.com).
         
     | 
| 
       273 
298 
     | 
    
         | 
| 
       274 
     | 
    
         
            -
            Please sign the Contributor License Agreement before submitting pull requests. (It's similar to other projects, like NodeJS or Meteor.)
         
     | 
| 
      
 299 
     | 
    
         
            +
            Please sign the [Contributor License Agreement](https://www.nilas.com/cla.html) before submitting pull requests. (It's similar to other projects, like NodeJS or Meteor.)
         
     | 
| 
       275 
300 
     | 
    
         | 
| 
       276 
301 
     | 
    
         
             
            Tests can be run with:
         
     | 
| 
       277 
302 
     | 
    
         | 
| 
       278 
303 
     | 
    
         
             
                rspec spec
         
     | 
| 
       279 
304 
     | 
    
         | 
| 
       280 
305 
     | 
    
         | 
| 
       281 
     | 
    
         
            -
            ## Deployment 
     | 
| 
      
 306 
     | 
    
         
            +
            ## Deployment
         
     | 
| 
       282 
307 
     | 
    
         | 
| 
       283 
     | 
    
         
            -
            The  
     | 
| 
      
 308 
     | 
    
         
            +
            The Nilas ruby gem uses [Jeweler](https://github.com/technicalpickles/jeweler) for release management. Jeweler should be installed automatically when you call `bundle`, and extends `rake` to include a few more commands. When you're ready to release a new version, edit `lib/version.rb` and then build:
         
     | 
| 
       284 
309 
     | 
    
         | 
| 
       285 
     | 
    
         
            -
                rake version:bump:minor (or :major or :patch)
         
     | 
| 
       286 
310 
     | 
    
         
             
                rake build
         
     | 
| 
       287 
311 
     | 
    
         | 
| 
       288 
312 
     | 
    
         
             
            Test your new version (found in `pkg/`) locally, and then release with:
         
     | 
| 
       289 
313 
     | 
    
         | 
| 
       290 
314 
     | 
    
         
             
                rake release
         
     | 
| 
       291 
315 
     | 
    
         | 
| 
       292 
     | 
    
         
            -
            If it's your first time updating the ruby gem, you may be prompted for the username/password for rubygems.org. Members of the  
     | 
| 
      
 316 
     | 
    
         
            +
            If it's your first time updating the ruby gem, you may be prompted for the username/password for rubygems.org. Members of the Nilas team can find that by doing `fetch-password rubygems`.
         
     | 
    
        data/lib/account.rb
    CHANGED
    
    | 
         @@ -3,17 +3,30 @@ require 'restful_model' 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module Inbox
         
     | 
| 
       4 
4 
     | 
    
         
             
              class Account < RestfulModel
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
                 
     | 
| 
       7 
     | 
    
         
            -
                 
     | 
| 
       8 
     | 
    
         
            -
                 
     | 
| 
       9 
     | 
    
         
            -
                 
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                   
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                   
     | 
| 
      
 6 
     | 
    
         
            +
                parameter :account_id
         
     | 
| 
      
 7 
     | 
    
         
            +
                parameter :trial
         
     | 
| 
      
 8 
     | 
    
         
            +
                parameter :trial_expires
         
     | 
| 
      
 9 
     | 
    
         
            +
                parameter :sync_state
         
     | 
| 
      
 10 
     | 
    
         
            +
                parameter :billing_state
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def _perform_account_action!(action)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  raise UnexpectedAccountAction.new unless action == "upgrade" || action == "downgrade"
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  collection = ManagementModelCollection.new(Account, @_api, @namespace_id, {:account_id=>@account_id})
         
     | 
| 
      
 16 
     | 
    
         
            +
                  ::RestClient.post("#{collection.url}/#{@account_id}/#{action}",{}) do |response, request, result|
         
     | 
| 
      
 17 
     | 
    
         
            +
                      # Throw any exceptions
         
     | 
| 
      
 18 
     | 
    
         
            +
                    json = Inbox.interpret_response(result, response, :expected_class => Object)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                def upgrade!
         
     | 
| 
      
 23 
     | 
    
         
            +
                  _perform_account_action!('upgrade')
         
     | 
| 
       16 
24 
     | 
    
         
             
                end
         
     | 
| 
       17 
25 
     | 
    
         | 
| 
      
 26 
     | 
    
         
            +
                def downgrade!
         
     | 
| 
      
 27 
     | 
    
         
            +
                  _perform_account_action!('downgrade')
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       18 
31 
     | 
    
         
             
              end
         
     | 
| 
       19 
32 
     | 
    
         
             
            end
         
     | 
    
        data/lib/draft.rb
    CHANGED
    
    
    
        data/lib/inbox.rb
    CHANGED
    
    | 
         @@ -19,16 +19,38 @@ module Inbox 
     | 
|
| 
       19 
19 
     | 
    
         
             
                  self.error_type = type
         
     | 
| 
       20 
20 
     | 
    
         
             
                end
         
     | 
| 
       21 
21 
     | 
    
         
             
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
              class InvalidRequest < APIError; end
         
     | 
| 
      
 23 
     | 
    
         
            +
              class MessageRejected < APIError; end
         
     | 
| 
      
 24 
     | 
    
         
            +
              class SendingQuotaExceeded < APIError; end
         
     | 
| 
      
 25 
     | 
    
         
            +
              class ServiceUnavailable < APIError; end
         
     | 
| 
       22 
26 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
              def self. 
     | 
| 
      
 27 
     | 
    
         
            +
              def self.interpret_http_status(result)
         
     | 
| 
       24 
28 
     | 
    
         
             
                # Handle HTTP errors and RestClient errors
         
     | 
| 
       25 
29 
     | 
    
         
             
                raise ResourceNotFound.new if result.code.to_i == 404
         
     | 
| 
       26 
30 
     | 
    
         
             
                raise AccessDenied.new if result.code.to_i == 403
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              def self.interpret_response(result, result_content, options = {})
         
     | 
| 
      
 34 
     | 
    
         
            +
                # Handle HTTP errors
         
     | 
| 
      
 35 
     | 
    
         
            +
                Inbox.interpret_http_status(result)
         
     | 
| 
       27 
36 
     | 
    
         | 
| 
       28 
37 
     | 
    
         
             
                # Handle content expectation errors
         
     | 
| 
       29 
38 
     | 
    
         
             
                raise UnexpectedResponse.new if options[:expected_class] && result_content.empty?
         
     | 
| 
       30 
39 
     | 
    
         
             
                json = JSON.parse(result_content)
         
     | 
| 
       31 
     | 
    
         
            -
                 
     | 
| 
      
 40 
     | 
    
         
            +
                if json.is_a?(Hash) && (json['type'] == 'api_error' or json['type'] == 'invalid_request_error')
         
     | 
| 
      
 41 
     | 
    
         
            +
                  if result.code.to_i == 400
         
     | 
| 
      
 42 
     | 
    
         
            +
                    exc = InvalidRequest
         
     | 
| 
      
 43 
     | 
    
         
            +
                  elsif result.code.to_i == 402
         
     | 
| 
      
 44 
     | 
    
         
            +
                    exc = MessageRejected
         
     | 
| 
      
 45 
     | 
    
         
            +
                  elsif result.code.to_i == 429
         
     | 
| 
      
 46 
     | 
    
         
            +
                    exc = SendingQuotaExceeded
         
     | 
| 
      
 47 
     | 
    
         
            +
                  elsif result.code.to_i == 503
         
     | 
| 
      
 48 
     | 
    
         
            +
                    exc = ServiceUnavailable
         
     | 
| 
      
 49 
     | 
    
         
            +
                  else
         
     | 
| 
      
 50 
     | 
    
         
            +
                    exc = APIError
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
                  raise exc.new(json['type'], json['message'])
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
       32 
54 
     | 
    
         
             
                raise UnexpectedResponse.new(result.msg) if result.is_a?(Net::HTTPClientError)
         
     | 
| 
       33 
55 
     | 
    
         
             
                raise UnexpectedResponse.new if options[:expected_class] && !json.is_a?(options[:expected_class])
         
     | 
| 
       34 
56 
     | 
    
         
             
                json
         
     | 
| 
         @@ -45,16 +67,20 @@ module Inbox 
     | 
|
| 
       45 
67 
     | 
    
         
             
                attr_reader :app_id
         
     | 
| 
       46 
68 
     | 
    
         
             
                attr_reader :app_secret
         
     | 
| 
       47 
69 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
                def initialize(app_id, app_secret, access_token = nil, api_server = 'https://api. 
     | 
| 
      
 70 
     | 
    
         
            +
                def initialize(app_id, app_secret, access_token = nil, api_server = 'https://api.nilas.com',
         
     | 
| 
      
 71 
     | 
    
         
            +
                               service_domain = 'www.nilas.com')
         
     | 
| 
       49 
72 
     | 
    
         
             
                  raise "When overriding the Inbox API server address, you must include https://" unless api_server.include?('://')
         
     | 
| 
       50 
73 
     | 
    
         
             
                  @api_server = api_server
         
     | 
| 
       51 
74 
     | 
    
         
             
                  @access_token = access_token
         
     | 
| 
       52 
75 
     | 
    
         
             
                  @app_secret = app_secret
         
     | 
| 
       53 
76 
     | 
    
         
             
                  @app_id = app_id
         
     | 
| 
      
 77 
     | 
    
         
            +
                  @service_domain = service_domain
         
     | 
| 
      
 78 
     | 
    
         
            +
                  @version = Inbox::VERSION
         
     | 
| 
       54 
79 
     | 
    
         | 
| 
       55 
80 
     | 
    
         
             
                  if ::RestClient.before_execution_procs.empty?
         
     | 
| 
       56 
81 
     | 
    
         
             
                    ::RestClient.add_before_execution_proc do |req, params|
         
     | 
| 
       57 
82 
     | 
    
         
             
                      req.add_field('X-Inbox-API-Wrapper', 'ruby')
         
     | 
| 
      
 83 
     | 
    
         
            +
                      req['User-Agent'] = "Ruby SDK #{@version}"
         
     | 
| 
       58 
84 
     | 
    
         
             
                    end
         
     | 
| 
       59 
85 
     | 
    
         
             
                  end
         
     | 
| 
       60 
86 
     | 
    
         
             
                end
         
     | 
| 
         @@ -70,7 +96,12 @@ module Inbox 
     | 
|
| 
       70 
96 
     | 
    
         
             
                  if options[:trial] == true
         
     | 
| 
       71 
97 
     | 
    
         
             
                    trialString = 'true'
         
     | 
| 
       72 
98 
     | 
    
         
             
                  end
         
     | 
| 
       73 
     | 
    
         
            -
                  "https 
     | 
| 
      
 99 
     | 
    
         
            +
                  "https://#{@service_domain}/oauth/authorize?client_id=#{@app_id}&trial=#{trialString}&response_type=code&scope=email&login_hint=#{login_hint}&redirect_uri=#{redirect_uri}"
         
     | 
| 
      
 100 
     | 
    
         
            +
                end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                def url_for_management
         
     | 
| 
      
 103 
     | 
    
         
            +
                  protocol, domain = @api_server.split('//')
         
     | 
| 
      
 104 
     | 
    
         
            +
                  accounts_path = "#{protocol}//#{@app_secret}:@#{domain}/a/#{@app_id}/accounts"
         
     | 
| 
       74 
105 
     | 
    
         
             
                end
         
     | 
| 
       75 
106 
     | 
    
         | 
| 
       76 
107 
     | 
    
         
             
                def set_access_token(token)
         
     | 
| 
         @@ -85,7 +116,7 @@ module Inbox 
     | 
|
| 
       85 
116 
     | 
    
         
             
                      'code' => code
         
     | 
| 
       86 
117 
     | 
    
         
             
                  }
         
     | 
| 
       87 
118 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
                  ::RestClient.get("https 
     | 
| 
      
 119 
     | 
    
         
            +
                  ::RestClient.get("https://#{@service_domain}/oauth/token", {:params => data}) do |response, request, result|
         
     | 
| 
       89 
120 
     | 
    
         
             
                    json = Inbox.interpret_response(result, response, :expected_class => Object)
         
     | 
| 
       90 
121 
     | 
    
         
             
                    return json['access_token']
         
     | 
| 
       91 
122 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -100,40 +131,9 @@ module Inbox 
     | 
|
| 
       100 
131 
     | 
    
         | 
| 
       101 
132 
     | 
    
         
             
                # Billing Methods
         
     | 
| 
       102 
133 
     | 
    
         | 
| 
       103 
     | 
    
         
            -
                def _perform_account_action!(action)
         
     | 
| 
       104 
     | 
    
         
            -
                  raise UnexpectedAccountAction.new unless action == "upgrade" || action == "downgrade"
         
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
       106 
     | 
    
         
            -
                  protocol, domain = @api_server.split('//')
         
     | 
| 
       107 
     | 
    
         
            -
                  account_ids = namespaces.all.collect {|n| n.account_id }.uniq
         
     | 
| 
       108 
     | 
    
         
            -
                  account_ids.each do | id |
         
     | 
| 
       109 
     | 
    
         
            -
                    ::RestClient.post("#{protocol}//#{@app_secret}:@#{domain}/a/#{@app_id}/accounts/#{id}/#{action}",{}) do |response, request, result|
         
     | 
| 
       110 
     | 
    
         
            -
                      # Throw any exceptions
         
     | 
| 
       111 
     | 
    
         
            -
                      json = Inbox.interpret_response(result, response, :expected_class => Object)
         
     | 
| 
       112 
     | 
    
         
            -
                    end
         
     | 
| 
       113 
     | 
    
         
            -
                  end
         
     | 
| 
       114 
     | 
    
         
            -
                end
         
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
                def upgrade_account!
         
     | 
| 
       117 
     | 
    
         
            -
                  _perform_account_action!('upgrade')
         
     | 
| 
       118 
     | 
    
         
            -
                end
         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
                def downgrade_account!
         
     | 
| 
       121 
     | 
    
         
            -
                  _perform_account_action!('downgrade')
         
     | 
| 
       122 
     | 
    
         
            -
                end
         
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
134 
     | 
    
         
             
                def accounts
         
     | 
| 
       125 
     | 
    
         
            -
                   
     | 
| 
       126 
     | 
    
         
            -
                   
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
                  RestClient.get(accounts_path) do |response, request, result|
         
     | 
| 
       129 
     | 
    
         
            -
                    json = Inbox.interpret_response(result, response, :expected_class => Object)
         
     | 
| 
       130 
     | 
    
         
            -
                    return json.map do |account_json|
         
     | 
| 
       131 
     | 
    
         
            -
                       Account.new({ :account_id => account_json.fetch('account_id', ''),
         
     | 
| 
       132 
     | 
    
         
            -
                                     :trial => account_json.fetch('trial', ''),
         
     | 
| 
       133 
     | 
    
         
            -
                                     :trial_expires => account_json.fetch('trial_expires', nil),
         
     | 
| 
       134 
     | 
    
         
            -
                                     :sync_state => account_json.fetch('sync_state', '')})
         
     | 
| 
       135 
     | 
    
         
            -
                    end
         
     | 
| 
       136 
     | 
    
         
            -
                  end
         
     | 
| 
      
 135 
     | 
    
         
            +
                  @accounts ||= ManagementModelCollection.new(Account, self, nil)
         
     | 
| 
      
 136 
     | 
    
         
            +
                  @accounts
         
     | 
| 
       137 
137 
     | 
    
         
             
                end
         
     | 
| 
       138 
138 
     | 
    
         
             
              end
         
     | 
| 
       139 
139 
     | 
    
         
             
            end
         
     | 
    
        data/lib/restful_model.rb
    CHANGED
    
    
| 
         @@ -27,6 +27,13 @@ module Inbox 
     | 
|
| 
       27 
27 
     | 
    
         
             
                  end
         
     | 
| 
       28 
28 
     | 
    
         
             
                end
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
      
 30 
     | 
    
         
            +
                def count
         
     | 
| 
      
 31 
     | 
    
         
            +
                  RestClient.get(url, params: @filters.merge(view: 'count')) { |response,request,result|
         
     | 
| 
      
 32 
     | 
    
         
            +
                    json = Inbox.interpret_response(result, response)
         
     | 
| 
      
 33 
     | 
    
         
            +
                    return json['count']
         
     | 
| 
      
 34 
     | 
    
         
            +
                  }
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
       30 
37 
     | 
    
         
             
                def first
         
     | 
| 
       31 
38 
     | 
    
         
             
                  get_model_collection.first
         
     | 
| 
       32 
39 
     | 
    
         
             
                end
         
     | 
| 
         @@ -71,7 +78,7 @@ module Inbox 
     | 
|
| 
       71 
78 
     | 
    
         | 
| 
       72 
79 
     | 
    
         
             
                def build(args)
         
     | 
| 
       73 
80 
     | 
    
         
             
                  for key in args.keys
         
     | 
| 
       74 
     | 
    
         
            -
                    args[key.to_s] = args[key] 
     | 
| 
      
 81 
     | 
    
         
            +
                    args[key.to_s] = args[key]
         
     | 
| 
       75 
82 
     | 
    
         
             
                  end
         
     | 
| 
       76 
83 
     | 
    
         
             
                  model = @model_class.new(@_api, @namespace_id)
         
     | 
| 
       77 
84 
     | 
    
         
             
                  model.inflate(args)
         
     | 
| 
         @@ -130,4 +137,13 @@ module Inbox 
     | 
|
| 
       130 
137 
     | 
    
         
             
                end
         
     | 
| 
       131 
138 
     | 
    
         | 
| 
       132 
139 
     | 
    
         
             
              end
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
              # a ManagementModelCollection is similar to a RestfulModelCollection except
         
     | 
| 
      
 142 
     | 
    
         
            +
              # it's used by models under the /a/<app_id> namespace (mostly account status
         
     | 
| 
      
 143 
     | 
    
         
            +
              # and billing methods).
         
     | 
| 
      
 144 
     | 
    
         
            +
              class ManagementModelCollection < RestfulModelCollection
         
     | 
| 
      
 145 
     | 
    
         
            +
                def url
         
     | 
| 
      
 146 
     | 
    
         
            +
                  @_api.url_for_management
         
     | 
| 
      
 147 
     | 
    
         
            +
                end
         
     | 
| 
      
 148 
     | 
    
         
            +
              end
         
     | 
| 
       133 
149 
     | 
    
         
             
            end
         
     | 
    
        data/lib/time_attr_accessor.rb
    CHANGED
    
    
    
        data/lib/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,165 +1,167 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: inbox
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.14.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Ben Gotow
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2015- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-02-04 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rest-client
         
     | 
| 
       15 
15 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       16 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 17 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       18 
18 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
19 
     | 
    
         
             
                    version: '1.7'
         
     | 
| 
       20 
20 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       21 
21 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       22 
22 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       23 
23 
     | 
    
         
             
                requirements:
         
     | 
| 
       24 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 24 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
26 
     | 
    
         
             
                    version: '1.7'
         
     | 
| 
       27 
27 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
28 
     | 
    
         
             
              name: rspec
         
     | 
| 
       29 
29 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       30 
30 
     | 
    
         
             
                requirements:
         
     | 
| 
       31 
     | 
    
         
            -
                - -  
     | 
| 
      
 31 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       32 
32 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       33 
33 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       34 
34 
     | 
    
         
             
              type: :development
         
     | 
| 
       35 
35 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       36 
36 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       37 
37 
     | 
    
         
             
                requirements:
         
     | 
| 
       38 
     | 
    
         
            -
                - -  
     | 
| 
      
 38 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       39 
39 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       40 
40 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       41 
41 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       42 
42 
     | 
    
         
             
              name: shoulda
         
     | 
| 
       43 
43 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       44 
44 
     | 
    
         
             
                requirements:
         
     | 
| 
       45 
     | 
    
         
            -
                - -  
     | 
| 
      
 45 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       46 
46 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       47 
47 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       48 
48 
     | 
    
         
             
              type: :development
         
     | 
| 
       49 
49 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       50 
50 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       51 
51 
     | 
    
         
             
                requirements:
         
     | 
| 
       52 
     | 
    
         
            -
                - -  
     | 
| 
      
 52 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       53 
53 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
54 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       55 
55 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       56 
56 
     | 
    
         
             
              name: rdoc
         
     | 
| 
       57 
57 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       58 
58 
     | 
    
         
             
                requirements:
         
     | 
| 
       59 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 59 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       60 
60 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       61 
61 
     | 
    
         
             
                    version: '3.12'
         
     | 
| 
       62 
62 
     | 
    
         
             
              type: :development
         
     | 
| 
       63 
63 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       64 
64 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       65 
65 
     | 
    
         
             
                requirements:
         
     | 
| 
       66 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 66 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       67 
67 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       68 
68 
     | 
    
         
             
                    version: '3.12'
         
     | 
| 
       69 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       70 
70 
     | 
    
         
             
              name: bundler
         
     | 
| 
       71 
71 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       72 
72 
     | 
    
         
             
                requirements:
         
     | 
| 
       73 
     | 
    
         
            -
                - -  
     | 
| 
      
 73 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       74 
74 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       75 
75 
     | 
    
         
             
                    version: 1.3.5
         
     | 
| 
       76 
76 
     | 
    
         
             
              type: :development
         
     | 
| 
       77 
77 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       78 
78 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       79 
79 
     | 
    
         
             
                requirements:
         
     | 
| 
       80 
     | 
    
         
            -
                - -  
     | 
| 
      
 80 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       81 
81 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       82 
82 
     | 
    
         
             
                    version: 1.3.5
         
     | 
| 
       83 
83 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       84 
84 
     | 
    
         
             
              name: jeweler
         
     | 
| 
       85 
85 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       86 
86 
     | 
    
         
             
                requirements:
         
     | 
| 
       87 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 87 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       88 
88 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       89 
89 
     | 
    
         
             
                    version: 1.8.4
         
     | 
| 
       90 
90 
     | 
    
         
             
              type: :development
         
     | 
| 
       91 
91 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       92 
92 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       93 
93 
     | 
    
         
             
                requirements:
         
     | 
| 
       94 
     | 
    
         
            -
                - - ~>
         
     | 
| 
      
 94 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       95 
95 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       96 
96 
     | 
    
         
             
                    version: 1.8.4
         
     | 
| 
       97 
97 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       98 
98 
     | 
    
         
             
              name: pry
         
     | 
| 
       99 
99 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       100 
100 
     | 
    
         
             
                requirements:
         
     | 
| 
       101 
     | 
    
         
            -
                - -  
     | 
| 
      
 101 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       102 
102 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       103 
103 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       104 
104 
     | 
    
         
             
              type: :development
         
     | 
| 
       105 
105 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       106 
106 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       107 
107 
     | 
    
         
             
                requirements:
         
     | 
| 
       108 
     | 
    
         
            -
                - -  
     | 
| 
      
 108 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       109 
109 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       110 
110 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       111 
111 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       112 
112 
     | 
    
         
             
              name: pry-nav
         
     | 
| 
       113 
113 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       114 
114 
     | 
    
         
             
                requirements:
         
     | 
| 
       115 
     | 
    
         
            -
                - -  
     | 
| 
      
 115 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       116 
116 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       117 
117 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       118 
118 
     | 
    
         
             
              type: :development
         
     | 
| 
       119 
119 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       120 
120 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       121 
121 
     | 
    
         
             
                requirements:
         
     | 
| 
       122 
     | 
    
         
            -
                - -  
     | 
| 
      
 122 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       123 
123 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       124 
124 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       125 
125 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       126 
126 
     | 
    
         
             
              name: pry-stack_explorer
         
     | 
| 
       127 
127 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       128 
128 
     | 
    
         
             
                requirements:
         
     | 
| 
       129 
     | 
    
         
            -
                - -  
     | 
| 
      
 129 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       130 
130 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       131 
131 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       132 
132 
     | 
    
         
             
              type: :development
         
     | 
| 
       133 
133 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       134 
134 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       135 
135 
     | 
    
         
             
                requirements:
         
     | 
| 
       136 
     | 
    
         
            -
                - -  
     | 
| 
      
 136 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       137 
137 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       138 
138 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       139 
139 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       140 
140 
     | 
    
         
             
              name: webmock
         
     | 
| 
       141 
141 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       142 
142 
     | 
    
         
             
                requirements:
         
     | 
| 
       143 
     | 
    
         
            -
                - -  
     | 
| 
      
 143 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       144 
144 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       145 
145 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       146 
146 
     | 
    
         
             
              type: :development
         
     | 
| 
       147 
147 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       148 
148 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       149 
149 
     | 
    
         
             
                requirements:
         
     | 
| 
       150 
     | 
    
         
            -
                - -  
     | 
| 
      
 150 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       151 
151 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       152 
152 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       153 
153 
     | 
    
         
             
            description: 'Gem for interacting with the Inbox API that allows you to create and
         
     | 
| 
       154 
154 
     | 
    
         
             
              publish one-page websites, subscribe to web hooks and receive events when those
         
     | 
| 
       155 
155 
     | 
    
         
             
              pages are interacted with. Visit http://www.populr.me/ for more information. '
         
     | 
| 
       156 
     | 
    
         
            -
            email: ben@ 
     | 
| 
      
 156 
     | 
    
         
            +
            email: ben@nilas.com
         
     | 
| 
       157 
157 
     | 
    
         
             
            executables: []
         
     | 
| 
       158 
158 
     | 
    
         
             
            extensions: []
         
     | 
| 
       159 
159 
     | 
    
         
             
            extra_rdoc_files:
         
     | 
| 
       160 
160 
     | 
    
         
             
            - LICENSE.txt
         
     | 
| 
       161 
161 
     | 
    
         
             
            - README.md
         
     | 
| 
       162 
162 
     | 
    
         
             
            files:
         
     | 
| 
      
 163 
     | 
    
         
            +
            - LICENSE.txt
         
     | 
| 
      
 164 
     | 
    
         
            +
            - README.md
         
     | 
| 
       163 
165 
     | 
    
         
             
            - lib/account.rb
         
     | 
| 
       164 
166 
     | 
    
         
             
            - lib/calendar.rb
         
     | 
| 
       165 
167 
     | 
    
         
             
            - lib/contact.rb
         
     | 
| 
         @@ -177,8 +179,6 @@ files: 
     | 
|
| 
       177 
179 
     | 
    
         
             
            - lib/thread.rb
         
     | 
| 
       178 
180 
     | 
    
         
             
            - lib/time_attr_accessor.rb
         
     | 
| 
       179 
181 
     | 
    
         
             
            - lib/version.rb
         
     | 
| 
       180 
     | 
    
         
            -
            - LICENSE.txt
         
     | 
| 
       181 
     | 
    
         
            -
            - README.md
         
     | 
| 
       182 
182 
     | 
    
         
             
            homepage: http://github.com/inboxapp/inbox-ruby
         
     | 
| 
       183 
183 
     | 
    
         
             
            licenses:
         
     | 
| 
       184 
184 
     | 
    
         
             
            - MIT
         
     | 
| 
         @@ -189,17 +189,17 @@ require_paths: 
     | 
|
| 
       189 
189 
     | 
    
         
             
            - lib
         
     | 
| 
       190 
190 
     | 
    
         
             
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
       191 
191 
     | 
    
         
             
              requirements:
         
     | 
| 
       192 
     | 
    
         
            -
              - -  
     | 
| 
      
 192 
     | 
    
         
            +
              - - ">="
         
     | 
| 
       193 
193 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       194 
194 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       195 
195 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       196 
196 
     | 
    
         
             
              requirements:
         
     | 
| 
       197 
     | 
    
         
            -
              - -  
     | 
| 
      
 197 
     | 
    
         
            +
              - - ">="
         
     | 
| 
       198 
198 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       199 
199 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       200 
200 
     | 
    
         
             
            requirements: []
         
     | 
| 
       201 
201 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       202 
     | 
    
         
            -
            rubygems_version: 2. 
     | 
| 
      
 202 
     | 
    
         
            +
            rubygems_version: 2.2.2
         
     | 
| 
       203 
203 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       204 
204 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       205 
205 
     | 
    
         
             
            summary: Gem for interacting with the Inbox API
         
     |