box-api 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -331,5 +331,35 @@ module Box
331
331
  def file_embed(id, options = Hash.new)
332
332
  query_rest('s_create_file_embed', { :action => :create_file_embed, :file_id => id }.merge(options))
333
333
  end
334
+
335
+ # Share an item publically, making it accessible via a share link.
336
+ #
337
+ # @param [String] target The type of item.
338
+ # @param [String] target_id The id of the item to share.
339
+ # @param [Hash] options Extra options related to notifications. Please
340
+ # read the developer documentation for more details.
341
+ def share_public(target, target_id, options = Hash.new)
342
+ query_rest('share_ok', { :action => :public_share, :target => target, :target_id => target_id }.merge(options))
343
+ end
344
+
345
+ # Share an item privately, making it accessible only via email.
346
+ #
347
+ # @param [String] target The type of item.
348
+ # @param [String] target_id The id of the item to share.
349
+ # @param [Array] emails The email addresses of the individuals to share with.
350
+ # @param [Hash] options Extra options related to notifications. Please
351
+ # read the developer documentation for more details.
352
+ #
353
+ def share_private(target, target_id, emails, options = Hash.new)
354
+ query_rest('private_share_ok', { :action => :private_share, :target => target, :target_id => target_id, :emails => emails }.merge(options))
355
+ end
356
+
357
+ # Stop sharing an item publically.
358
+ #
359
+ # @param [String] target The type of item.
360
+ # @param [String] target_id The id of the item to unshare.
361
+ def unshare_public(target, target_id)
362
+ query_rest('unshare_ok', :action => :public_unshare, :target => target, :target_id => target_id)
363
+ end
334
364
  end
335
365
  end
@@ -29,6 +29,9 @@ module Box
29
29
  class AccountExceeded < Exception; end
30
30
  class SizeExceeded < Exception; end
31
31
 
32
+ # Sharing specific responses
33
+ class NotShared < Exception; end
34
+
32
35
  # Given a status, returning a cooresponding Exception class.
33
36
  #
34
37
  # @param [String] status The failing status to look for.
@@ -52,6 +55,8 @@ module Box
52
55
  when "get_auth_token_error", "e_register"
53
56
  Generic
54
57
  # Folder/File specific responses
58
+ when "wrong_node"
59
+ InvalidItem
55
60
  when "e_folder_id"
56
61
  InvalidFolder
57
62
  when "no_parent"
@@ -74,6 +79,13 @@ module Box
74
79
  # Comment specific responses
75
80
  when "get_comments_error", "add_comment_error", "delete_comment_error"
76
81
  Generic
82
+ # Sharing specific responses
83
+ when "file_not_shared"
84
+ NotShared
85
+ when "wrong input params"
86
+ InvalidInput
87
+ when "share_error", "unshare_error", "private_share_error"
88
+ Generic
77
89
  else
78
90
  Unknown
79
91
  end
@@ -67,8 +67,14 @@ module Box
67
67
  # when generating the embed code.
68
68
  # @return [String] HTML code to use to embed the file.
69
69
  #
70
+ # @note This function will share the file if it is not already shared.
70
71
  def embed_code(options = Hash.new)
71
- @api.file_embed(id, options)['file_embed_html']
72
+ begin
73
+ @api.file_embed(id, options)['file_embed_html']
74
+ rescue Api::NotShared
75
+ share_public
76
+ retry
77
+ end
72
78
  end
73
79
 
74
80
  protected
@@ -169,12 +169,40 @@ module Box
169
169
  @data.key?(sym.to_s) or super
170
170
  end
171
171
 
172
- # Consider the item cached. This prevents an additional api
173
- # when we know the item is fully fetched.
172
+ # Consider the item cached. This prevents an additional api when we
173
+ # know the item is fully fetched.
174
174
  def force_cached_info
175
175
  @cached_info = true
176
176
  end
177
177
 
178
+ # Generates a share link for this item.
179
+ #
180
+ # @param [Hash] options Special options related to notification. See
181
+ # the developer wiki for details instructions.
182
+ # @return The public name of the item. In order to access this item
183
+ # on the web, prefix this value with 'http://www.box.net/shared/'.
184
+ #
185
+ # TODO: Document the options.
186
+ def share_public(options = Hash.new)
187
+ @api.share_public(type, id, options)['public_name']
188
+ end
189
+
190
+ # Shares this item privately with the given email addresses.
191
+ #
192
+ # @param [Array] emails The Box users to share this item with.
193
+ # @param [Hash] options Special options related to notification. See
194
+ # the developer wiki for details instructions.
195
+ def share_private(emails, options = Hash.new)
196
+ @api.share_private(type, id, emails, options)
197
+
198
+ true
199
+ end
200
+
201
+ # Unshares this item.
202
+ def unshare
203
+ @api.unshare(type, id)
204
+ end
205
+
178
206
  protected
179
207
 
180
208
  # Fetches this item's info from the api.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: box-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-11-08 00:00:00.000000000 Z
13
+ date: 2011-11-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: httmultiparty
17
- requirement: &2156752360 !ruby/object:Gem::Requirement
17
+ requirement: &2153669280 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 0.3.6
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2156752360
25
+ version_requirements: *2153669280
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: launchy
28
- requirement: &2156751520 !ruby/object:Gem::Requirement
28
+ requirement: &2153668860 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *2156751520
36
+ version_requirements: *2153668860
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rake
39
- requirement: &2156750700 !ruby/object:Gem::Requirement
39
+ requirement: &2153668360 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *2156750700
47
+ version_requirements: *2153668360
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rspec
50
- requirement: &2156739960 !ruby/object:Gem::Requirement
50
+ requirement: &2153667820 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,7 +55,7 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *2156739960
58
+ version_requirements: *2153667820
59
59
  description: Box-api is a collection of classes that implement functions defined in
60
60
  the Box public API. See http://developer.box.net for more information.
61
61
  email:
@@ -87,6 +87,7 @@ files:
87
87
  - doc/Box/Api/NoAccess.html
88
88
  - doc/Box/Api/NoParent.html
89
89
  - doc/Box/Api/NotAuthorized.html
90
+ - doc/Box/Api/NotShared.html
90
91
  - doc/Box/Api/Restricted.html
91
92
  - doc/Box/Api/SizeExceeded.html
92
93
  - doc/Box/Api/Unknown.html
@@ -144,7 +145,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
145
  version: '0'
145
146
  segments:
146
147
  - 0
147
- hash: -77914252247933561
148
+ hash: 2152248300867732637
148
149
  required_rubygems_version: !ruby/object:Gem::Requirement
149
150
  none: false
150
151
  requirements:
@@ -153,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
154
  version: '0'
154
155
  segments:
155
156
  - 0
156
- hash: -77914252247933561
157
+ hash: 2152248300867732637
157
158
  requirements: []
158
159
  rubyforge_project:
159
160
  rubygems_version: 1.8.10