README.markdown in ruby-box-1.11.1 vs README.markdown in ruby-box-1.12.1

- old
+ new

@@ -1,10 +1,12 @@ ruby-box ======== -Mainted by: [Attachments.me](https://attachments.me) +Build Status: [![Build Status](https://travis-ci.org/attachmentsme/ruby-box.png)](https://travis-ci.org/attachmentsme/ruby-box) +Mainted by: [Attachments.me](http://attachments.me) + RubyBox provides a simple, chainable, feature-rich client for [Box's 2.0 API](http://developers.box.com/docs/). Authorization ------------- @@ -36,11 +38,13 @@ client_id: 'your-client-id', client_secret: 'your-client-secret', access_token: 'original-access-token' }) +# you need to persist this somehow. the refresh token will change every time you use it @token = session.refresh_token('your-refresh-token') +save_me_somehow(@token.refresh_token) ``` __3)__ Create a client using a session initialized with the _access\_token_. ```ruby @@ -56,119 +60,204 @@ ``` Usage ===== -Once you've created a client, you can start interacting with the Box API. What follows are some basic examples of RubyBox's usage: +Once you've created a client, you can start interacting with the Box API. What follows are some basic examples of RubyBox's usage. +Warning +======= + +Please note that using a file/folder path is extremely inefficient, as it causes the gem to traverse the directory structure recursively querying each folder in turn. Prefer the `_by_id` methods where possible for single-request access. + +Items +----- + +`File`s and `Folder`s are subclasses of `Item`. `Folder` contents (i.e. files and folders inside that folder) are retrieved in a `mini-format` when the `Folder` instance is loaded. + +There are two caveats to this: + +### Only some fields are available + +a `File` mini looks like this: + +``` +{ + "type": "file", + "id": "5000948880", + "sequence_id": "3", + "etag": "3", + "sha1": "134b65991ed521fcfe4724b7d814ab8ded5185dc", + "name": "tigers.jpeg" +} +``` +a `Folder` mini looks like this: + +``` +{ + "type":"folder", + "id":"301415432", + "sequence_id":"0", + "name":"my first sub-folder" +} +``` + +Requests to fields other than the above (e.g. `file.size`) will cause a one-off hit to the api, so take care when iterating over folder contents lest a single application method result in hundreds of api hits and take forever to complete. + +This can be mitigated by passing a list of extra fields you want to fetch into the `.items` method: + +```ruby +folder = client.folder_by_id(@folder_id) +# retrieve size, created_at, and description for all items in this directory +detailed_items = folder.items(@item_limit, @offset, ['size', 'created_at', 'description']) +``` + +Note: only the `type` and `id` fields are included in addition to whatever you specify using the above method, so you must be explicit. + + Folders ------- * Listing items in a folder: ```ruby -files = client.folder('/image_folder').files # all files in a folder. +files = client.folder('/image_folder').files # all files in a folder using a path. +files = client.folder(@folder_id).files # all files in a folder using an id. folders = client.root_folder.folders # all folders in the root directory. files_and_folders = client.folder('files').items # all files and folders in /files ``` * Creating a folder: ```ruby -client.folder('image_folder').create_subfolder('subfolder') +client.folder_by_id(@folder_id).create_subfolder('subfolder') # using an id. +client.folder('image_folder').create_subfolder('subfolder') # using a path. ``` * Setting the description on a folder: ```ruby -folder = client.folder('image_folder') +folder = client.folder('image_folder') # using a path. folder.description = 'Description on Folder' folder.update ``` * Listing the comments in a discussion surrounding a folder. ```ruby -folder = client.folder('image_folder') +folder = client.folder('image_folder') # lookups by id are more efficient discussion = folder.discussions.first discussion.comments.each {|comment| p comment.message} ``` * Creating a shared link for a folder. ```ruby -folder = client.folder('image_folder').create_shared_link +folder = client.folder('image_folder').create_shared_link # lookups by id are more efficient p folder.shared_link['url'] # https://www.box.com/s/d6de3224958c1755412 ``` Files ----- * Fetching a file's meta information. ```ruby -file = client.file('/image_folder/an-image.jpg') +file = client.file('/image_folder/an-image.jpg')# lookups by id are more efficient +file = client.file(@file_id) p file.name p file.created_at ``` * Uploading a file to a folder. ```ruby -file = client.upload_file('./LICENSE.txt', '/license_folder') +file = client.upload_file('./LICENSE.txt', '/license_folder') # lookups by id are more efficient +file = client.upload_file_by_folder_id('./LICENSE.txt', @folder_id) ``` * Downloading a file. ```ruby f = open('./LOCAL.txt', 'w+') f.write( client.file('/license_folder/LICENSE.txt').download ) f.close() + +# Or you can fetch by file.id, which is more efficient: +f = open('./LOCAL.txt', 'w+') +f.write( client.file_by_id(@file_id).download ) # lookups by id are more efficient +f.close() + +# You can also grab the raw url with +client.file_by_id(@file_id).download_url + +# Note that this URL is not persistent. Clients will need to follow the url immediately in order to +# actually download the file ``` * Deleting a file. ```ruby +client.file_by_id(@file_id).delete # this client.file('/license_folder/LICENSE.txt').delete ``` * Displaying comments on a file. ```ruby -comments = client.file('/image_folder/an-image.jpg').comments +comments = client.file('/image_folder/an-image.jpg').comments # lookups by id are more efficient +comments = client.file_by_id(@file_id).comments + comments.each do |comment| p comment.message end ``` * Creating a shared link for a file. ```ruby file = client.file('/image_folder/an-image.jpg').create_shared_link +file = client.file_by_id(@file_id).create_shared_link # using an id p file.shared_link.url # https://www.box.com/s/d6de3224958c1755412 ``` * Copying a file to another folder. ```ruby -file = client.file('/image_folder/an-image.jpg') + +file = client.file('/one_folder/cow_folder/an-image.jpg') folder = client.folder('image_folder') + +# lookups by id are more efficient + +file = client.file_by_id(@file_id) +folder = client.folder_by_id(@folder_id) + file.copy_to(folder) ``` * Moving a file to another folder. ```ruby -file = client.file('/image_folder/an-image.jpg') + +file = client.file('/one_folder/cow_folder/an-image.jpg') folder = client.folder('image_folder') + +# lookups by id are more efficient + +file = client.file_by_id(@file_id) +folder = client.folder_by_id(@folder_id) + + file.move_to(folder) ``` * Adding a comment to a file. ```ruby -file = client.file('/image_folder/an-image.jpg') +file = client.file('/image_folder/an-image.jpg') # path +file = client.file_by_id(@file_id) # id comment = file.create_comment('Hello World!') ``` Search ------ @@ -194,17 +283,54 @@ eresp.events.each do |ev| p "type=#{ev.event_id} type=#{ev.event_type} user=#{ev.created_by.name}" end ``` +As-User +------- + +* This must be manually enabled for your account by Box Staff. Contact api@box.com for access. [ More Info ] (http://developers.box.com/docs/#users-as-user) + +```ruby +session = RubyBox::Session.new({ + client_id: 'your-client-id', + client_secret: 'your-client-secret', + access_token: 'original-access-token' , + as_user: 'your-users-box-id' +}) +``` +Users +------ + +Current User Info + +```ruby +me = client.me +``` + +Current User's enterprise + +```ruby +me = client.me.enterprise +``` + +An array of Ruby:Box users in an enterprise (Supports Filtering, Limit and Offset) + +```ruby +users = client.users +``` + +* Remeber the API filters "name" and "login" by the start of the string. ie: to get "sean+awesome@gmail.com" an approriate filter term would be "sean" + +```ruby +users = client.users("sean" , 10 , 1) +``` + Contributors ============ -* Benjamin Coe -* Larry Kang -* Dan Reed -* Jesse Miller +* [full list of contributors](https://github.com/attachmentsme/ruby-box/graphs/contributors) Contributing to ruby-box ======================== RubyBox does not yet support all of Box's API Version 2.0 functionality, be liberal with your contributions. @@ -218,6 +344,6 @@ Copyright ========= Copyright (c) 2012 Attachments.me. See LICENSE.txt for -further details. \ No newline at end of file +further details.