box-api 0.1.6 → 0.1.7
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.
- data/.gitignore +2 -0
- data/Gemfile.lock +1 -1
- data/README.md +6 -0
- data/box-api.gemspec +1 -1
- data/examples/app_data.yml +2 -5
- data/lib/box/account.rb +1 -1
- data/lib/box/api.rb +2 -0
- data/lib/box/folder.rb +4 -1
- data/lib/box/item.rb +7 -1
- data/spec/file_spec.rb +1 -1
- data/spec/folder_spec.rb +10 -10
- data/spec/helper/account.yml +1 -1
- metadata +4 -4
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -8,6 +8,12 @@ You can use the Box.net API to create applications and websites that integrate w
|
|
8
8
|
* Move, rename and delete files
|
9
9
|
* Share files
|
10
10
|
|
11
|
+
### Install ###
|
12
|
+
|
13
|
+
gem install box-api
|
14
|
+
|
15
|
+
That's it!
|
16
|
+
|
11
17
|
### Usage ###
|
12
18
|
|
13
19
|
You must first obtain an API key by [registering your Box.net application](http://www.box.net/developers/services).
|
data/box-api.gemspec
CHANGED
data/examples/app_data.yml
CHANGED
data/lib/box/account.rb
CHANGED
@@ -54,7 +54,7 @@ module Box
|
|
54
54
|
|
55
55
|
# the user must visit this url to allow the application to access their account
|
56
56
|
def authorize_url(ticket = self.ticket)
|
57
|
-
"#{ api.
|
57
|
+
"#{ api.base_url }/auth/#{ ticket }"
|
58
58
|
end
|
59
59
|
|
60
60
|
# using the ticket, we get the auth_token providing the user has already allowed our application the privilege
|
data/lib/box/api.rb
CHANGED
@@ -6,6 +6,8 @@ module Box
|
|
6
6
|
class Api
|
7
7
|
include HTTMultiParty # a slight modification to HTTParty, adding multi-part upload support
|
8
8
|
|
9
|
+
attr_accessor :base_url, :upload_url
|
10
|
+
|
9
11
|
def initialize(key, url = 'https://box.net', upload_url = 'https://upload.box.net', version = '1.0')
|
10
12
|
@default_params = { :api_key => key } # add the api_key to every query
|
11
13
|
|
data/lib/box/folder.rb
CHANGED
@@ -7,6 +7,7 @@ module Box
|
|
7
7
|
|
8
8
|
def self.type; 'folder'; end
|
9
9
|
|
10
|
+
# override the existing info method so that we create empty folders/files first
|
10
11
|
def info(refresh = false)
|
11
12
|
return self if @cached_info and not refresh
|
12
13
|
|
@@ -50,7 +51,7 @@ module Box
|
|
50
51
|
# search for items using criteria
|
51
52
|
def find(criteria)
|
52
53
|
recursive = criteria.delete(:recursive)
|
53
|
-
recursive =
|
54
|
+
recursive = false if recursive == nil # default to false for performance reasons
|
54
55
|
|
55
56
|
tree if recursive # get the full tree
|
56
57
|
|
@@ -103,6 +104,7 @@ module Box
|
|
103
104
|
end
|
104
105
|
end
|
105
106
|
|
107
|
+
# update the cached status of all sub items, as we got the entire tree
|
106
108
|
def force_cached_tree
|
107
109
|
create_sub_items(nil, Box::Folder)
|
108
110
|
create_sub_items(nil, Box::File)
|
@@ -119,6 +121,7 @@ module Box
|
|
119
121
|
end
|
120
122
|
end
|
121
123
|
|
124
|
+
# search for any files/folders that match the criteria sent
|
122
125
|
def find!(criteria, recursive)
|
123
126
|
matches = (files + folders).collect do |item| # search over our files and folders
|
124
127
|
match = criteria.all? do |key, value| # make sure all criteria pass
|
data/lib/box/item.rb
CHANGED
@@ -11,6 +11,7 @@ module Box
|
|
11
11
|
update_info(info) # merges with the info hash, and renames some fields
|
12
12
|
end
|
13
13
|
|
14
|
+
# return the string representation of this item (file or folder)
|
14
15
|
def self.type; raise "Overwrite this method"; end
|
15
16
|
def self.types; type + 's'; end
|
16
17
|
|
@@ -29,6 +30,7 @@ module Box
|
|
29
30
|
|
30
31
|
self
|
31
32
|
end
|
33
|
+
|
32
34
|
# move the item to the destination folder
|
33
35
|
def move(destination)
|
34
36
|
@api.move(type, id, destination.id)
|
@@ -69,6 +71,7 @@ module Box
|
|
69
71
|
self
|
70
72
|
end
|
71
73
|
|
74
|
+
# set the description of the item
|
72
75
|
def description(message)
|
73
76
|
@api.set_description(type, id, message)
|
74
77
|
|
@@ -102,10 +105,11 @@ module Box
|
|
102
105
|
# sub-classes are meant to implement this
|
103
106
|
def get_info(*args); Hash.new; end
|
104
107
|
|
108
|
+
# takes in a hash of info, cleans it, and merges it into the existing info
|
105
109
|
def update_info(info)
|
106
110
|
ninfo = Hash.new
|
107
111
|
|
108
|
-
#
|
112
|
+
# some fields are named 'file_id' or 'id' inconsistently, so trim the type off
|
109
113
|
info.each do |name, value|
|
110
114
|
if name.to_s =~ /^#{ type }_(.+)$/; ninfo[$1] = value
|
111
115
|
else; ninfo[name.to_s] = value; end
|
@@ -114,11 +118,13 @@ module Box
|
|
114
118
|
@data.merge!(ninfo) # merge in the updated info
|
115
119
|
end
|
116
120
|
|
121
|
+
# delete the cache for a specific info
|
117
122
|
def delete_info(field)
|
118
123
|
@cached_info = false
|
119
124
|
@data.delete(field)
|
120
125
|
end
|
121
126
|
|
127
|
+
# delete the entire cache
|
122
128
|
def clear_info
|
123
129
|
@cached_info = false
|
124
130
|
@data.clear
|
data/spec/file_spec.rb
CHANGED
@@ -9,7 +9,7 @@ describe Box::File do
|
|
9
9
|
describe "operations" do
|
10
10
|
before(:all) do
|
11
11
|
@root = get_root
|
12
|
-
spec = @root.find(:name => 'rspec folder', :type => 'folder'
|
12
|
+
spec = @root.find(:name => 'rspec folder', :type => 'folder').first
|
13
13
|
spec.delete if spec
|
14
14
|
end
|
15
15
|
|
data/spec/folder_spec.rb
CHANGED
@@ -9,7 +9,7 @@ describe Box::Folder do
|
|
9
9
|
context "with api" do
|
10
10
|
before(:all) do
|
11
11
|
@root = get_root
|
12
|
-
spec = @root.find(:name => 'rspec folder', :type => 'folder'
|
12
|
+
spec = @root.find(:name => 'rspec folder', :type => 'folder').first
|
13
13
|
spec.delete if spec
|
14
14
|
end
|
15
15
|
|
@@ -58,27 +58,27 @@ describe Box::Folder do
|
|
58
58
|
describe "#find" do
|
59
59
|
describe "single result" do
|
60
60
|
it "finds existing item" do
|
61
|
-
file = @root.find(:name => 'expected.1.swf').first
|
61
|
+
file = @root.find(:name => 'expected.1.swf', :recursive => true).first
|
62
62
|
file.id.should == '61679540'
|
63
63
|
file.name.should == 'expected.1.swf'
|
64
64
|
end
|
65
65
|
|
66
66
|
it "finds non-existant file" do
|
67
|
-
file = @root.find(:name => 'notfound.png').first
|
67
|
+
file = @root.find(:name => 'notfound.png', :recursive => true).first
|
68
68
|
file.should be nil
|
69
69
|
end
|
70
70
|
|
71
71
|
it "finds specified format" do
|
72
|
-
folder = @root.find(:name => 'tests', :type => 'folder').first
|
72
|
+
folder = @root.find(:name => 'tests', :type => 'folder', :recursive => true).first
|
73
73
|
folder.id.should == '7065552'
|
74
74
|
folder.name.should == 'tests'
|
75
75
|
|
76
|
-
file = @root.find(:name => 'tests', :type => 'file').first
|
76
|
+
file = @root.find(:name => 'tests', :type => 'file', :recursive => true).first
|
77
77
|
file.should be nil
|
78
78
|
end
|
79
79
|
|
80
80
|
it "finds specified criteria" do
|
81
|
-
file = @root.find(:type => 'file', :sha1 => 'f7379ffe883fdc355fbe47e8a4b3073f21ac0f6d').first
|
81
|
+
file = @root.find(:type => 'file', :sha1 => 'f7379ffe883fdc355fbe47e8a4b3073f21ac0f6d', :recursive => true).first
|
82
82
|
file.id.should == '61669270'
|
83
83
|
file.name.should == 'file.pdf'
|
84
84
|
end
|
@@ -89,25 +89,25 @@ describe Box::Folder do
|
|
89
89
|
end
|
90
90
|
|
91
91
|
it "finds multiple criteria" do
|
92
|
-
file = @root.find(:updated => 1304959908, :size => 20372).first
|
92
|
+
file = @root.find(:updated => 1304959908, :size => 20372, :recursive => true).first
|
93
93
|
file.id.should == '61679546'
|
94
94
|
file.name.should == 'expected.3.swf'
|
95
95
|
end
|
96
96
|
|
97
97
|
it "requires both criteria" do
|
98
|
-
file = @root.find(:updated => 1304, :size => 20372).first
|
98
|
+
file = @root.find(:updated => 1304, :size => 20372, :recursive => true).first
|
99
99
|
file.should be nil
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
103
|
describe "multiple results" do
|
104
104
|
it "finds multiple files" do
|
105
|
-
items = @root.find(:name => 'expected.1.swf')
|
105
|
+
items = @root.find(:name => 'expected.1.swf', :recursive => true)
|
106
106
|
items.should have(2).items
|
107
107
|
end
|
108
108
|
|
109
109
|
it "finds all files" do
|
110
|
-
files = @root.find(:type => 'file')
|
110
|
+
files = @root.find(:type => 'file', :recursive => true)
|
111
111
|
files.should have(9).items
|
112
112
|
files.first.name.should == 'file.pdf'
|
113
113
|
end
|
data/spec/helper/account.yml
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: box-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.7
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Box.net
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-07-
|
14
|
+
date: 2011-07-29 00:00:00 -04:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
@@ -108,7 +108,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
108
108
|
requirements:
|
109
109
|
- - ">="
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
hash:
|
111
|
+
hash: -2887608171974797695
|
112
112
|
segments:
|
113
113
|
- 0
|
114
114
|
version: "0"
|
@@ -117,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
117
|
requirements:
|
118
118
|
- - ">="
|
119
119
|
- !ruby/object:Gem::Version
|
120
|
-
hash:
|
120
|
+
hash: -2887608171974797695
|
121
121
|
segments:
|
122
122
|
- 0
|
123
123
|
version: "0"
|