rbox 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +19 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +23 -0
- data/lib/rbox.rb +33 -0
- data/lib/rbox/authentication.rb +43 -0
- data/lib/rbox/client.rb +20 -0
- data/lib/rbox/connection.rb +31 -0
- data/lib/rbox/download.rb +9 -0
- data/lib/rbox/item.rb +43 -0
- data/lib/rbox/response/authentication/auth_token.rb +25 -0
- data/lib/rbox/response/authentication/get_account_info.rb +16 -0
- data/lib/rbox/response/authentication/logout.rb +7 -0
- data/lib/rbox/response/authentication/register_new_account.rb +29 -0
- data/lib/rbox/response/authentication/ticket.rb +29 -0
- data/lib/rbox/response/authentication/verify_registration_email.rb +7 -0
- data/lib/rbox/response/base.rb +24 -0
- data/lib/rbox/response/items/account_tree.rb +33 -0
- data/lib/rbox/response/items/file.rb +57 -0
- data/lib/rbox/response/items/folder.rb +64 -0
- data/lib/rbox/utils/collect_nested_key.rb +26 -0
- data/rbox.gemspec +17 -0
- metadata +88 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
faraday (0.8.0)
|
5
|
+
multipart-post (~> 1.1)
|
6
|
+
faraday_middleware (0.8.7)
|
7
|
+
faraday (>= 0.7.4, < 0.9)
|
8
|
+
minitest (2.11.1)
|
9
|
+
multi_xml (0.4.1)
|
10
|
+
multipart-post (1.1.5)
|
11
|
+
rake (0.9.2.2)
|
12
|
+
vcr (2.1.1)
|
13
|
+
|
14
|
+
PLATFORMS
|
15
|
+
ruby
|
16
|
+
|
17
|
+
DEPENDENCIES
|
18
|
+
faraday (>= 0.7.0)
|
19
|
+
faraday_middleware (>= 0.7.0)
|
20
|
+
minitest
|
21
|
+
multi_xml (~> 0.4.1)
|
22
|
+
rake
|
23
|
+
vcr
|
data/lib/rbox.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# Client modules
|
2
|
+
require 'rbox/connection'
|
3
|
+
require 'rbox/authentication'
|
4
|
+
require 'rbox/download'
|
5
|
+
require 'rbox/item'
|
6
|
+
# Client class
|
7
|
+
require 'rbox/client'
|
8
|
+
|
9
|
+
# Utility methods modules
|
10
|
+
require 'rbox/utils/collect_nested_key'
|
11
|
+
|
12
|
+
# Base response module
|
13
|
+
require 'rbox/response/base'
|
14
|
+
# Authentication response classes
|
15
|
+
require 'rbox/response/authentication/ticket'
|
16
|
+
require 'rbox/response/authentication/get_account_info'
|
17
|
+
require 'rbox/response/authentication/verify_registration_email'
|
18
|
+
require 'rbox/response/authentication/auth_token'
|
19
|
+
require 'rbox/response/authentication/logout'
|
20
|
+
require 'rbox/response/authentication/register_new_account'
|
21
|
+
# Items response classes
|
22
|
+
require 'rbox/response/items/account_tree'
|
23
|
+
require 'rbox/response/items/folder'
|
24
|
+
require 'rbox/response/items/file'
|
25
|
+
|
26
|
+
|
27
|
+
module Rbox
|
28
|
+
class << self
|
29
|
+
def new(*arg)
|
30
|
+
Rbox::Client.new(*arg)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Rbox
|
2
|
+
module Authentication
|
3
|
+
|
4
|
+
def get_ticket
|
5
|
+
response = action(:get_ticket)
|
6
|
+
Response::Ticket.new(response, self)
|
7
|
+
end
|
8
|
+
|
9
|
+
def get_auth_token
|
10
|
+
raise 'Ticket is require for this operation' unless ticket
|
11
|
+
|
12
|
+
response = action(:get_auth_token) do |req|
|
13
|
+
req.params[:ticket] = ticket
|
14
|
+
end
|
15
|
+
Response::AuthToken.new(response, self)
|
16
|
+
end
|
17
|
+
|
18
|
+
def logout
|
19
|
+
response = action(:logout)
|
20
|
+
Response::Logout.new(response, self)
|
21
|
+
end
|
22
|
+
|
23
|
+
def register_new_user(login, password)
|
24
|
+
response = action(:register_new_user)
|
25
|
+
Response::RegisterNewUser.new(response, self)
|
26
|
+
end
|
27
|
+
|
28
|
+
def verify_registration_email
|
29
|
+
response = action(:verify_registration_email)
|
30
|
+
Response::VerifyRegistrationEmail.new(response, self)
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_account_info
|
34
|
+
response = action(:get_account_info)
|
35
|
+
Response::GetAccountInfo.new(response, self)
|
36
|
+
end
|
37
|
+
|
38
|
+
def authorize_url
|
39
|
+
"https://www.box.net/api/1.0/auth/#{@ticket}"
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
data/lib/rbox/client.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Rbox
|
2
|
+
class Client
|
3
|
+
include Connection
|
4
|
+
include Authentication
|
5
|
+
include Download
|
6
|
+
include Item
|
7
|
+
|
8
|
+
attr_accessor :config, :api_token, :auth_token, :ticket
|
9
|
+
attr_reader :connection
|
10
|
+
|
11
|
+
def initialize(options = {})
|
12
|
+
@config = options
|
13
|
+
@api_token = @config[:api_token]
|
14
|
+
@auth_token = @config[:auth_token]
|
15
|
+
@ticket = @config[:ticket]
|
16
|
+
@connection = default_connection
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'faraday_middleware'
|
3
|
+
|
4
|
+
module Rbox
|
5
|
+
module Connection
|
6
|
+
|
7
|
+
private
|
8
|
+
def action(action, options = {}, &block)
|
9
|
+
params = { :action => action.to_s }
|
10
|
+
params[:api_key] = api_token if api_token
|
11
|
+
params[:auth_token] = auth_token if auth_token
|
12
|
+
connection.get('/api/1.0/rest') do |req|
|
13
|
+
req.params = req.params.merge(params)
|
14
|
+
block.call(req) if block_given?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def default_connection
|
19
|
+
Faraday.new(:url => 'https://www.box.net/') do |builder|
|
20
|
+
builder.use Faraday::Response::ParseXml
|
21
|
+
builder.use Faraday::Request::UrlEncoded
|
22
|
+
builder.use Faraday::Response::Logger if @config[:logger]
|
23
|
+
builder.use Faraday::Adapter::NetHttp
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def set_connection(*arg, &block)
|
28
|
+
@connection = Faraday.send(:new, *args, &block)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/rbox/item.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
module Rbox
|
2
|
+
module Item
|
3
|
+
|
4
|
+
def get_account_tree(options = { :folder_id => 0 })
|
5
|
+
raise 'Auth token and api key is require for this operation' unless auth_token and api_token
|
6
|
+
|
7
|
+
response = action(:get_account_tree) do |req|
|
8
|
+
req.params['params[]'] = 'nozip'
|
9
|
+
req.params.merge!(options)
|
10
|
+
end
|
11
|
+
Response::AccountTree.new(response, self)
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_file_info(file_id, options = {} )
|
15
|
+
raise 'Auth token and api key is require for this operation' unless auth_token and api_token
|
16
|
+
|
17
|
+
response = action(:get_file_info) do |req|
|
18
|
+
req.params.merge!(options)
|
19
|
+
req.params[:file_id] = file_id
|
20
|
+
end
|
21
|
+
|
22
|
+
response_file = response.body['response']['info']
|
23
|
+
response_file['id'] = response_file['file_id']
|
24
|
+
|
25
|
+
Response::File.new(response_file, self)
|
26
|
+
end
|
27
|
+
|
28
|
+
def public_share(target_id, target_type = 'file')
|
29
|
+
response = action(:public_share) do |req|
|
30
|
+
req.params[:target] = target_type
|
31
|
+
req.params[:target_id] = target_id
|
32
|
+
|
33
|
+
# Yes, we need those empty strings
|
34
|
+
%w(password message emails[]).each do |key|
|
35
|
+
req.params[key] = ''
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
response.body['response']['public_name']
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Rbox
|
2
|
+
module Response
|
3
|
+
class AuthToken
|
4
|
+
include Base
|
5
|
+
|
6
|
+
def initialize(*arg)
|
7
|
+
super(*arg)
|
8
|
+
@client.auth_token = auth_token
|
9
|
+
end
|
10
|
+
|
11
|
+
def auth_token
|
12
|
+
@body_response['auth_token']
|
13
|
+
end
|
14
|
+
|
15
|
+
def user
|
16
|
+
@body_response['user']
|
17
|
+
end
|
18
|
+
|
19
|
+
def attributes
|
20
|
+
{ :user => user, :auth_token => auth_token }
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Rbox
|
2
|
+
module Response
|
3
|
+
class RegisterNewAccount
|
4
|
+
include Base
|
5
|
+
|
6
|
+
def initialize(*arg)
|
7
|
+
super(*arg)
|
8
|
+
@client.auth_token = auth_token
|
9
|
+
end
|
10
|
+
|
11
|
+
def auth_token
|
12
|
+
@body_response['auth_token']
|
13
|
+
end
|
14
|
+
|
15
|
+
def user
|
16
|
+
@body_response['user']
|
17
|
+
end
|
18
|
+
|
19
|
+
def attributes
|
20
|
+
{ :user => user, :auth_token => auth_token }
|
21
|
+
end
|
22
|
+
|
23
|
+
def success?
|
24
|
+
!!(status == 'successful_register')
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Rbox
|
2
|
+
module Response
|
3
|
+
class Ticket
|
4
|
+
include Base
|
5
|
+
|
6
|
+
def initialize(*arg)
|
7
|
+
super(*arg)
|
8
|
+
@client.ticket = ticket
|
9
|
+
end
|
10
|
+
|
11
|
+
def ticket
|
12
|
+
@body_response['ticket']
|
13
|
+
end
|
14
|
+
|
15
|
+
def authentization_url
|
16
|
+
"https://www.box.net/api/1.0/auth/#{ticket}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def auth_token
|
20
|
+
@client.auth_token(ticket)
|
21
|
+
end
|
22
|
+
|
23
|
+
def attributes
|
24
|
+
{ :ticket => @body_response['ticket'] }
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Rbox
|
2
|
+
module Response
|
3
|
+
module Base
|
4
|
+
def initialize(response, client)
|
5
|
+
@response = response
|
6
|
+
@body_response = response.body['response']
|
7
|
+
@client = client
|
8
|
+
raise "Response failure with status code \"#{status}\"" unless success?
|
9
|
+
end
|
10
|
+
|
11
|
+
def success?
|
12
|
+
!!(status =~ /_ok\z/)
|
13
|
+
end
|
14
|
+
|
15
|
+
def status
|
16
|
+
@body_response['status']
|
17
|
+
end
|
18
|
+
|
19
|
+
def method_missing(name, *args, &block)
|
20
|
+
@client.send(name, *args, &block)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Rbox
|
2
|
+
module Response
|
3
|
+
class AccountTree
|
4
|
+
include Base
|
5
|
+
include CollectNestedKey
|
6
|
+
|
7
|
+
def root_folder
|
8
|
+
@root_folder ||= Folder.new(@body_response['tree']['folder'], @client)
|
9
|
+
end
|
10
|
+
alias :tree :root_folder
|
11
|
+
|
12
|
+
def files
|
13
|
+
@files ||= collect_nested_key(@body_response['tree'], 'file').map {|f| File.new(f, @client) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def folders
|
17
|
+
@folder ||= collect_nested_key(@body_response['tree'], 'folder').map {|f| Folder.new(f, @client) }
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_array
|
21
|
+
root_folder.folders.map {|f| f.to_hash } + root_folder.files.map {|f| f.to_hash }
|
22
|
+
end
|
23
|
+
alias :to_a :to_array
|
24
|
+
|
25
|
+
def to_hash
|
26
|
+
root_folder.to_hash
|
27
|
+
end
|
28
|
+
alias :to_h :to_hash
|
29
|
+
alias :attributes :to_hash
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Rbox
|
2
|
+
module Response
|
3
|
+
class File
|
4
|
+
|
5
|
+
ATTRIBUTES = %w(id file_name shared sha1 size shared_link description user_id thumbnail small_thumbnail large_thumbnail larger_thumbnail preview_thumbnail permissions tags)
|
6
|
+
|
7
|
+
ATTRIBUTES.each do |attr_name|
|
8
|
+
define_method(attr_name) do
|
9
|
+
instance_variable_get(:@attributes)[attr_name]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
%w(created updated).each do |attr_name|
|
14
|
+
define_method(attr_name) do
|
15
|
+
Time.at(instance_variable_get(:@attributes)[attr_name])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(attributes, client, parent_folder = nil)
|
20
|
+
@attributes = attributes.dup
|
21
|
+
@client = client
|
22
|
+
@parent_folder = parent_folder
|
23
|
+
end
|
24
|
+
|
25
|
+
def attributes
|
26
|
+
@attributes
|
27
|
+
end
|
28
|
+
|
29
|
+
def download_url
|
30
|
+
@client.download_url(id)
|
31
|
+
end
|
32
|
+
|
33
|
+
# public share
|
34
|
+
# https://www.box.net/api/1.0/rest?action=public_share&api_key=rrc1d3ntb53tt6b2vhail6rdtrsxov3v&auth_token=rpuis3lincpbyz60gyym8s3xhnc6gbcl&target=folder&target_id=709&password=&message=hey&emails[]=email@example.com&emails[]=email2@example.com
|
35
|
+
def public_share!
|
36
|
+
@public_name ||= @client.public_share(self.id, 'file')
|
37
|
+
true
|
38
|
+
end
|
39
|
+
|
40
|
+
def public_share_url
|
41
|
+
if @public_link.nil? || @public_link.empty?
|
42
|
+
public_share!
|
43
|
+
"https://www.box.net/s/#{@public_name}"
|
44
|
+
else
|
45
|
+
@public_link
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_hash
|
50
|
+
hash = ATTRIBUTES.inject({}) {|h,k,v| h[k.to_sym]= @attributes[k]; h }
|
51
|
+
hash[:type] = 'file'
|
52
|
+
hash[:parent_folder_id] = @parent_folder.id if @parent_folder
|
53
|
+
hash
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Rbox
|
2
|
+
module Response
|
3
|
+
class Folder
|
4
|
+
|
5
|
+
ATTRIBUTES = %w(id name description user_id shared shared_link permissions size file_count tags)
|
6
|
+
|
7
|
+
ATTRIBUTES.each do |attr_name|
|
8
|
+
define_method(attr_name) do
|
9
|
+
instance_variable_get(:@attributes)[attr_name]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
%w(created updated).each do |attr_name|
|
14
|
+
define_method(attr_name) do
|
15
|
+
Time.at(instance_variable_get(:@attributes)[attr_name])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(attributes, client, parent_folder = nil)
|
20
|
+
@attributes = attributes.dup
|
21
|
+
@client = client
|
22
|
+
|
23
|
+
@parent_folder = parent_folder
|
24
|
+
|
25
|
+
@folders_attr = [@attributes['folders']['folder']].flatten rescue []
|
26
|
+
@attributes.delete('folders')
|
27
|
+
|
28
|
+
# lol, { files => { file => [file, ...] } }
|
29
|
+
@files_attr = [@attributes['files']['file']].flatten rescue []
|
30
|
+
@attributes.delete('files')
|
31
|
+
end
|
32
|
+
|
33
|
+
def folders
|
34
|
+
@folders ||= @folders_attr.map {|f| Folder.new(f, @client, self) }
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_folder(name, options = {})
|
38
|
+
options[:parent_id] = id
|
39
|
+
@client.create_folder(name, options)
|
40
|
+
end
|
41
|
+
|
42
|
+
def files
|
43
|
+
@files ||= @files_attr.map {|f| File.new(f, @client, self) }
|
44
|
+
end
|
45
|
+
|
46
|
+
def attributes
|
47
|
+
@attributes
|
48
|
+
end
|
49
|
+
|
50
|
+
def root?
|
51
|
+
id == '0'
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_hash
|
55
|
+
hash = ATTRIBUTES.inject({}) {|h,k,v| h[k.to_sym]= @attributes[k]; h }
|
56
|
+
hash[:files] = files.map {|f| f.to_hash }
|
57
|
+
hash[:folders] = folders.map {|f| f.to_hash }
|
58
|
+
hash[:type] = 'folder'
|
59
|
+
hash[:parent_folder_id] = @parent_folder.id if @parent_folder
|
60
|
+
hash
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Rbox
|
2
|
+
module CollectNestedKey
|
3
|
+
|
4
|
+
def collect_nested_key(obj, key)
|
5
|
+
result = []
|
6
|
+
|
7
|
+
case obj
|
8
|
+
when Hash
|
9
|
+
if obj.key? key
|
10
|
+
result << obj[key]
|
11
|
+
else
|
12
|
+
obj.each do |k, child|
|
13
|
+
result += collect_nested_key(child, key)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
when Array
|
17
|
+
obj.each do |child|
|
18
|
+
result += collect_nested_key(child, key)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
result.flatten
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
data/rbox.gemspec
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.add_dependency 'faraday', '>= 0.7'
|
5
|
+
gem.add_dependency 'multi_xml', '~> 0.4.1'
|
6
|
+
|
7
|
+
gem.authors = ["Charles Barbier"]
|
8
|
+
gem.description = %q{A Ruby wrapper for box.com}
|
9
|
+
gem.email = ['unixcharles@gmail.com']
|
10
|
+
gem.files = `git ls-files`.split("\n")
|
11
|
+
gem.homepage = 'https://github.com/unixcharles/rbox'
|
12
|
+
gem.name = 'rbox'
|
13
|
+
gem.require_paths = ['lib']
|
14
|
+
gem.summary = %q{box.com API wrapper}
|
15
|
+
gem.test_files = `git ls-files -- {spec}/*`.split("\n")
|
16
|
+
gem.version = '0.1.0'
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rbox
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Charles Barbier
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-05-14 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: faraday
|
16
|
+
requirement: &70133377507860 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0.7'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70133377507860
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: multi_xml
|
27
|
+
requirement: &70133377507360 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.4.1
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70133377507360
|
36
|
+
description: A Ruby wrapper for box.com
|
37
|
+
email:
|
38
|
+
- unixcharles@gmail.com
|
39
|
+
executables: []
|
40
|
+
extensions: []
|
41
|
+
extra_rdoc_files: []
|
42
|
+
files:
|
43
|
+
- .gitignore
|
44
|
+
- Gemfile
|
45
|
+
- Gemfile.lock
|
46
|
+
- lib/rbox.rb
|
47
|
+
- lib/rbox/authentication.rb
|
48
|
+
- lib/rbox/client.rb
|
49
|
+
- lib/rbox/connection.rb
|
50
|
+
- lib/rbox/download.rb
|
51
|
+
- lib/rbox/item.rb
|
52
|
+
- lib/rbox/response/authentication/auth_token.rb
|
53
|
+
- lib/rbox/response/authentication/get_account_info.rb
|
54
|
+
- lib/rbox/response/authentication/logout.rb
|
55
|
+
- lib/rbox/response/authentication/register_new_account.rb
|
56
|
+
- lib/rbox/response/authentication/ticket.rb
|
57
|
+
- lib/rbox/response/authentication/verify_registration_email.rb
|
58
|
+
- lib/rbox/response/base.rb
|
59
|
+
- lib/rbox/response/items/account_tree.rb
|
60
|
+
- lib/rbox/response/items/file.rb
|
61
|
+
- lib/rbox/response/items/folder.rb
|
62
|
+
- lib/rbox/utils/collect_nested_key.rb
|
63
|
+
- rbox.gemspec
|
64
|
+
homepage: https://github.com/unixcharles/rbox
|
65
|
+
licenses: []
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options: []
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ! '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
requirements: []
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 1.8.10
|
85
|
+
signing_key:
|
86
|
+
specification_version: 3
|
87
|
+
summary: box.com API wrapper
|
88
|
+
test_files: []
|