boxr 1.8.0 → 1.11.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 06a2fa3c34dacf915b7bb788e854bc9235d2eb0cd92c7ca59e480737553146c4
4
- data.tar.gz: 7413454a658067aabe3ff90625e30a029335166ed50f7e05569cd2fe4e583e84
3
+ metadata.gz: 81bc808dde71fc65c270c2a145ee55c5dd6ac48ef964e9156512dbc04bb6ddf7
4
+ data.tar.gz: cc3d5e5140ef46fc95ff138d1fa79534e0bae12dc14e04bc54d212236cfc0ab9
5
5
  SHA512:
6
- metadata.gz: 74d6a804d79c88de453c3d348a69950b9a08f85da70ae258ad689daf50c3318dd7eb776763c371f600981a1a2ad2c10652811d2a031a6059b1426abb8fdb61ed
7
- data.tar.gz: 3b525fa9e91ee3417247128fb733e6feecaaf328916bcb1cca51ded9f0a2ef9d288f7d33a8f6cabf54580c6505d4e4e9a914f495c115bd17b43a1785ba36d57b
6
+ metadata.gz: 8f9bbc5f449301705e0919f122f9d55819ea7be821f2e081ee5d5f913db4d4cddf31d50f98cb831f4a9bbb2b59687a39ccbbecd71ac5d489d33d81760ea43b2e
7
+ data.tar.gz: 2181831ee3b4732c7ad4152aad85b51ef8f7dd951f25ab1cc6059b031f8653e6554961e3159585fe1ef1d72f125f0afe2d916f1acf4f0c26b7d69aaf2b5c0701
data/.env.example CHANGED
@@ -1,4 +1,4 @@
1
- #1. go to https://developers.box.com,
1
+ #1. go to https://developers.box.com,
2
2
  #2. find or create your Box Content API app for testing
3
3
  #3. click 'Edit Application'
4
4
  #4. check the boxes for 'Read and write all files and folders' and 'Manage an enterprise'
@@ -11,5 +11,5 @@ BOX_DEVELOPER_TOKEN={a valid developer token for your Box app}
11
11
  BOX_CLIENT_ID={client id of your Box app}
12
12
  BOX_CLIENT_SECRET={client secret of your Box app}
13
13
  BOX_ENTERPRISE_ID={box enterprise id}
14
- JWT_SECRET_KEY_PATH={path to your JWT private key}
15
- JWT_SECRET_KEY_PASSWORD={JWT private key password}
14
+ JWT_PRIVATE_KEY_PATH={path to your JWT private key}
15
+ JWT_PRIVATE_KEY_PASSWORD={JWT private key password}
data/.gitignore CHANGED
@@ -14,6 +14,7 @@
14
14
  /tmp/
15
15
  *.gem
16
16
  *.bundle
17
+ *.pem
17
18
  *.so
18
19
  *.o
19
20
  *.a
data/README.md CHANGED
@@ -1,4 +1,7 @@
1
1
  # Boxr
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/boxr.svg)](https://badge.fury.io/rb/boxr)
4
+
2
5
  Boxr is a Ruby client library for the Box V2 Content API. Box employees affectionately refer to one another as Boxers, hence the name of this gem.
3
6
 
4
7
  The purpose of this gem is to provide a clear, efficient, and intentional method of interacting with the Box Content API. As with any SDK that wraps a REST API, it is important to fully understand the Box Content API at the REST endpoint level. You are strongly encouraged to read through the Box documentation located [here](https://box-content.readme.io/).
@@ -392,9 +395,11 @@ update_folder_metadata(folder, updates, scope, template)
392
395
  delete_metadata(file, scope: :global, template: :properties)
393
396
  delete_folder_metadata(folder, scope, template)
394
397
 
395
- enterprise_metadata
398
+ get_enterprise_templates
399
+ get_metadata_template_by_name(scope, template_key)
396
400
 
397
- metadata_schema(scope, template_key)
401
+ create_metadata_template(display_name, template_key: nil, fields: [], hidden: nil)
402
+ delete_metadata_template(scope, template_key)
398
403
  ```
399
404
 
400
405
  #### [Watermarking](https://box-content.readme.io/reference#watermarking)
data/lib/boxr/auth.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  module Boxr
2
2
 
3
3
  JWT_GRANT_TYPE="urn:ietf:params:oauth:grant-type:jwt-bearer"
4
+ TOKEN_EXCHANGE_TOKEN_TYPE="urn:ietf:params:oauth:token-type:access_token"
5
+ TOKEN_EXCHANGE_GRANT_TYPE="urn:ietf:params:oauth:grant-type:token-exchange"
4
6
 
5
7
  def self.oauth_url(state, host: "app.box.com", response_type: "code", scope: nil, folder_id: nil, client_id: ENV['BOX_CLIENT_ID'])
6
8
  template = Addressable::Template.new("https://{host}/api/oauth2/authorize{?query*}")
@@ -8,13 +10,13 @@ module Boxr
8
10
  query = {"response_type" => "#{response_type}", "state" => "#{state}", "client_id" => "#{client_id}"}
9
11
  query["scope"] = "#{scope}" unless scope.nil?
10
12
  query["folder_id"] = "#{folder_id}" unless folder_id.nil?
11
-
13
+
12
14
  uri = template.expand({"host" => "#{host}", "query" => query})
13
15
  uri
14
16
  end
15
17
 
16
18
  def self.get_tokens(code=nil, grant_type: "authorization_code", assertion: nil, scope: nil, username: nil, client_id: ENV['BOX_CLIENT_ID'], client_secret: ENV['BOX_CLIENT_SECRET'])
17
- uri = "https://api.box.com/oauth2/token"
19
+ uri = Boxr::Client::AUTH_URI
18
20
  body = "grant_type=#{grant_type}&client_id=#{client_id}&client_secret=#{client_secret}"
19
21
  body = body + "&code=#{code}" unless code.nil?
20
22
  body = body + "&scope=#{scope}" unless scope.nil?
@@ -25,7 +27,7 @@ module Boxr
25
27
  end
26
28
 
27
29
  def self.get_enterprise_token(private_key: ENV['JWT_PRIVATE_KEY'], private_key_password: ENV['JWT_PRIVATE_KEY_PASSWORD'],
28
- public_key_id: ENV['JWT_PUBLIC_KEY_ID'], enterprise_id: ENV['BOX_ENTERPRISE_ID'],
30
+ public_key_id: ENV['JWT_PUBLIC_KEY_ID'], enterprise_id: ENV['BOX_ENTERPRISE_ID'],
29
31
  client_id: ENV['BOX_CLIENT_ID'], client_secret: ENV['BOX_CLIENT_SECRET'])
30
32
  unlocked_private_key = unlock_key(private_key, private_key_password)
31
33
  assertion = jwt_assertion(unlocked_private_key, client_id, enterprise_id, "enterprise", public_key_id)
@@ -40,19 +42,31 @@ module Boxr
40
42
  end
41
43
 
42
44
  def self.refresh_tokens(refresh_token, client_id: ENV['BOX_CLIENT_ID'], client_secret: ENV['BOX_CLIENT_SECRET'])
43
- uri = "https://api.box.com/oauth2/token"
45
+ uri = Boxr::Client::AUTH_URI
44
46
  body = "grant_type=refresh_token&refresh_token=#{refresh_token}&client_id=#{client_id}&client_secret=#{client_secret}"
45
47
 
46
48
  auth_post(uri, body)
47
49
  end
48
50
 
49
51
  def self.revoke_tokens(token, client_id: ENV['BOX_CLIENT_ID'], client_secret: ENV['BOX_CLIENT_SECRET'])
50
- uri = "https://api.box.com/oauth2/revoke"
52
+ uri = Boxr::Client::REVOKE_AUTH_URI
51
53
  body = "client_id=#{client_id}&client_secret=#{client_secret}&token=#{token}"
52
54
 
53
55
  auth_post(uri, body)
54
56
  end
55
57
 
58
+ # Exchange an existing token for a lesser-scoped token
59
+ def self.exchange_token(subject_token, scope, resource_id: nil, resource_type: :file)
60
+ uri = Boxr::Client::AUTH_URI
61
+ resouce_uri = resource_type == :file ? Boxr::Client::FILES_URI : Boxr::Client::FOLDERS_URI
62
+ resource_url = "#{resouce_uri}/#{resource_id}"
63
+
64
+ body = "subject_token=#{subject_token}&subject_token_type=#{TOKEN_EXCHANGE_TOKEN_TYPE}&scope=#{scope}&grant_type=#{TOKEN_EXCHANGE_GRANT_TYPE}"
65
+ body = body + "&resource=#{resource_url}" unless resource_id.nil?
66
+
67
+ auth_post(uri, body)
68
+ end
69
+
56
70
  class << self
57
71
  alias :get_token :get_tokens
58
72
  alias :refresh_token :refresh_tokens
@@ -67,14 +81,14 @@ module Boxr
67
81
  iss: iss,
68
82
  sub: sub,
69
83
  box_sub_type: box_sub_type,
70
- aud: "https://api.box.com/oauth2/token",
84
+ aud: Boxr::Client::AUTH_URI,
71
85
  jti: SecureRandom.hex(64),
72
86
  exp: (Time.now.utc + 10).to_i
73
87
  }
74
88
 
75
89
  additional_headers = {}
76
90
  additional_headers['kid'] = public_key_id unless public_key_id.nil?
77
-
91
+
78
92
  JWT.encode(payload, private_key, "RS256", additional_headers)
79
93
  end
80
94
 
@@ -98,5 +112,4 @@ module Boxr
98
112
  OpenSSL::PKey::RSA.new(private_key, private_key_password)
99
113
  end
100
114
  end
101
-
102
- end
115
+ end
data/lib/boxr/client.rb CHANGED
@@ -8,6 +8,8 @@ module Boxr
8
8
  #UPLOAD_URI = "https://upload.wcheng.inside-box.net/api/2.0"
9
9
 
10
10
  API_URI = "https://api.box.com/2.0"
11
+ AUTH_URI = "https://api.box.com/oauth2/token"
12
+ REVOKE_AUTH_URI = "https://api.box.com/oauth2/revoke"
11
13
  UPLOAD_URI = "https://upload.box.com/api/2.0"
12
14
  FILES_URI = "#{API_URI}/files"
13
15
  FILES_UPLOAD_URI = "#{UPLOAD_URI}/files/content"
data/lib/boxr/files.rb CHANGED
@@ -75,6 +75,7 @@ module Boxr
75
75
 
76
76
  def download_file(file, version: nil, follow_redirect: true)
77
77
  file_id = ensure_id(file)
78
+
78
79
  begin
79
80
  uri = "#{FILES_URI}/#{file_id}/content"
80
81
  query = {}
@@ -85,7 +86,8 @@ module Boxr
85
86
  location = response.header['Location'][0]
86
87
 
87
88
  if(follow_redirect)
88
- file, response = get(location, process_response: false)
89
+ file_content, response = get(location, process_response: false)
90
+ return file_content
89
91
  else
90
92
  return location #simply return the url
91
93
  end
@@ -93,9 +95,7 @@ module Boxr
93
95
  retry_after_seconds = response.header['Retry-After'][0]
94
96
  sleep retry_after_seconds.to_i
95
97
  end
96
- end until file
97
-
98
- file
98
+ end until file_content
99
99
  end
100
100
 
101
101
  def download_url(file, version: nil)
@@ -104,27 +104,31 @@ module Boxr
104
104
 
105
105
  def upload_file(path_to_file, parent, name: nil, content_created_at: nil, content_modified_at: nil,
106
106
  preflight_check: true, send_content_md5: true)
107
-
108
- parent_id = ensure_id(parent)
109
-
110
107
  filename = name ? name : File.basename(path_to_file)
111
- preflight_check(path_to_file, filename, parent_id) if preflight_check
112
-
113
- file_info = nil
114
- response = nil
115
108
 
116
109
  File.open(path_to_file) do |file|
117
- content_md5 = send_content_md5 ? Digest::SHA1.file(file).hexdigest : nil
110
+ upload_file_from_io(file, parent, name: filename, content_created_at: content_created_at, content_modified_at: content_modified_at, preflight_check: preflight_check, send_content_md5: send_content_md5)
111
+ end
112
+ end
118
113
 
119
- attributes = {name: filename, parent: {id: parent_id}}
120
- attributes[:content_created_at] = content_created_at.to_datetime.rfc3339 unless content_created_at.nil?
121
- attributes[:content_modified_at] = content_modified_at.to_datetime.rfc3339 unless content_modified_at.nil?
114
+ def upload_file_from_io(io, parent, name:, content_created_at: nil, content_modified_at: nil, preflight_check: true, send_content_md5: true)
115
+ parent_id = ensure_id(parent)
122
116
 
123
- body = {attributes: JSON.dump(attributes), file: file}
117
+ preflight_check(io, name, parent_id) if preflight_check
124
118
 
125
- file_info, response = post(FILES_UPLOAD_URI, body, process_body: false, content_md5: content_md5)
119
+ if send_content_md5
120
+ content_md5 = Digest::SHA1.hexdigest(io.read)
121
+ io.rewind
126
122
  end
127
123
 
124
+ attributes = {name: name, parent: {id: parent_id}}
125
+ attributes[:content_created_at] = content_created_at.to_datetime.rfc3339 unless content_created_at.nil?
126
+ attributes[:content_modified_at] = content_modified_at.to_datetime.rfc3339 unless content_modified_at.nil?
127
+
128
+ body = {attributes: JSON.dump(attributes), file: io}
129
+
130
+ file_info, response = post(FILES_UPLOAD_URI, body, process_body: false, content_md5: content_md5)
131
+
128
132
  file_info.entries[0]
129
133
  end
130
134
 
@@ -254,8 +258,8 @@ module Boxr
254
258
 
255
259
  private
256
260
 
257
- def preflight_check(path_to_file, filename, parent_id)
258
- size = File.size(path_to_file)
261
+ def preflight_check(io, filename, parent_id)
262
+ size = File.size(io)
259
263
 
260
264
  #TODO: need to make sure that figuring out the filename from the path_to_file works for people using Windows
261
265
  attributes = {name: filename, parent: {id: "#{parent_id}"}, size: size}
data/lib/boxr/groups.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  module Boxr
2
2
  class Client
3
3
 
4
- def groups(fields: [])
4
+ def groups(fields: [], offset: 0, limit: DEFAULT_LIMIT)
5
5
  query = build_fields_query(fields, GROUP_FIELDS_QUERY)
6
- groups = get_all_with_pagination(GROUPS_URI, query: query, offset: 0, limit: DEFAULT_LIMIT)
6
+ groups = get_all_with_pagination(GROUPS_URI, query: query, offset: offset, limit: limit)
7
7
  end
8
8
 
9
9
  def group_from_id(group_id, fields: [])
@@ -39,21 +39,21 @@ module Boxr
39
39
  result
40
40
  end
41
41
 
42
- def group_memberships(group)
42
+ def group_memberships(group, offset: 0, limit: DEFAULT_LIMIT)
43
43
  group_id = ensure_id(group)
44
44
  uri = "#{GROUPS_URI}/#{group_id}/memberships"
45
- memberships = get_all_with_pagination(uri, offset: 0, limit: DEFAULT_LIMIT)
45
+ memberships = get_all_with_pagination(uri, offset: offset, limit: limit)
46
46
  end
47
47
 
48
- def group_memberships_for_user(user)
48
+ def group_memberships_for_user(user, offset: 0, limit: DEFAULT_LIMIT)
49
49
  user_id = ensure_id(user)
50
50
  uri = "#{USERS_URI}/#{user_id}/memberships"
51
- memberships = get_all_with_pagination(uri, offset: 0, limit: DEFAULT_LIMIT)
51
+ memberships = get_all_with_pagination(uri, offset: offset, limit: limit)
52
52
  end
53
53
 
54
- def group_memberships_for_me
54
+ def group_memberships_for_me(offset: 0, limit: DEFAULT_LIMIT)
55
55
  uri = "#{USERS_URI}/me/memberships"
56
- memberships = get_all_with_pagination(uri, offset: 0, limit: DEFAULT_LIMIT)
56
+ memberships = get_all_with_pagination(uri, offset: offset, limit: limit)
57
57
  end
58
58
 
59
59
  def group_membership_from_id(membership_id)
@@ -89,11 +89,11 @@ module Boxr
89
89
  result
90
90
  end
91
91
 
92
- def group_collaborations(group)
92
+ def group_collaborations(group, offset: 0, limit: DEFAULT_LIMIT)
93
93
  group_id = ensure_id(group)
94
94
  uri = "#{GROUPS_URI}/#{group_id}/collaborations"
95
- collaborations = get_all_with_pagination(uri, offset: 0, limit: DEFAULT_LIMIT)
95
+ collaborations = get_all_with_pagination(uri, offset: offset, limit: limit)
96
96
  end
97
97
 
98
98
  end
99
- end
99
+ end
data/lib/boxr/metadata.rb CHANGED
@@ -77,12 +77,33 @@ module Boxr
77
77
  ent_metadata, response = get(uri)
78
78
  ent_metadata
79
79
  end
80
+ alias :get_enterprise_templates :enterprise_metadata
80
81
 
81
82
  def metadata_schema(scope, template_key)
82
83
  uri = "#{METADATA_TEMPLATES_URI}/#{scope}/#{template_key}/schema"
83
84
  schema, response = get(uri)
84
85
  schema
85
86
  end
87
+ alias :get_metadata_template_by_name :metadata_schema
88
+
89
+ def create_metadata_template(display_name, template_key: nil, fields: [], hidden: nil)
90
+ uri = "#{METADATA_TEMPLATES_URI}/schema"
91
+ schema = {
92
+ scope: "enterprise",
93
+ displayName: display_name,
94
+ }
95
+ schema[:templateKey] = template_key unless template_key.nil?
96
+ schema[:hidden] = hidden unless hidden.nil?
97
+ schema[:fields] = fields unless fields.empty?
98
+
99
+ metadata_template, response = post(uri, schema, content_type: "application/json")
100
+ metadata_template
101
+ end
86
102
 
103
+ def delete_metadata_template(scope, template_key)
104
+ uri = "#{METADATA_TEMPLATES_URI}/#{scope}/#{template_key}/schema"
105
+ result, response = delete(uri)
106
+ result
107
+ end
87
108
  end
88
- end
109
+ end
data/lib/boxr/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Boxr
2
- VERSION = "1.8.0"
2
+ VERSION = "1.11.1"
3
3
  end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ #rake spec SPEC_OPTS="-e \"invokes auth operations"\"
4
+ describe 'auth operations' do
5
+ it "invokes auth operations" do
6
+ private_key = OpenSSL::PKey::RSA.new(File.read(ENV['JWT_PRIVATE_KEY_PATH']), ENV['JWT_PRIVATE_KEY_PASSWORD'])
7
+
8
+ puts "get enterprise token"
9
+ enterprise_token = Boxr::get_enterprise_token(private_key: private_key)
10
+ expect(enterprise_token).to include('access_token', 'expires_in')
11
+
12
+ puts "downgrade token"
13
+ child_token = Boxr::exchange_token(enterprise_token['access_token'], 'root_readonly')
14
+ expect(child_token).to include('access_token','expires_in')
15
+
16
+ # Currently cannot test due to user requiring
17
+ puts "get user token"
18
+ second_test_user = BOX_CLIENT.create_user("Second Test User", login: "second_test_user@#{('a'..'z').to_a.shuffle[0,10].join}.com", role: 'user', is_platform_access_only: true)
19
+ user_token = Boxr::get_user_token(second_test_user.id, private_key: private_key)
20
+ expect(user_token).to include('access_token','expires_in')
21
+
22
+ puts "revoke user token"
23
+ user_client = Boxr::Client.new(user_token['access_token'])
24
+ expect(user_client.root_folder_items).to eq []
25
+ Boxr::revoke_token(user_token['access_token'])
26
+ expect{user_client.root_folder_items}.to raise_error{Boxr::BoxrError}
27
+
28
+ puts "cleanup data"
29
+ BOX_CLIENT.delete_user(second_test_user, force: true)
30
+ end
31
+ end
@@ -32,6 +32,6 @@ describe 'collaborations operations' do
32
32
  expect(pending_collaborations).to eq([])
33
33
 
34
34
  puts "add invalid collaboration"
35
- expect { BOX_CLIENT.add_collaboration(@test_folder, {id: @test_user.id, type: :user}, :invalid_role)}.to raise_error
35
+ expect { BOX_CLIENT.add_collaboration(@test_folder, {id: @test_user.id, type: :user}, :invalid_role)}.to raise_error{Boxr::BoxrError}
36
36
  end
37
37
  end
@@ -12,6 +12,11 @@ describe "file operations" do
12
12
  new_file = BOX_CLIENT.upload_file("./spec/test_files/#{TEST_FILE_NAME}", @test_folder, name: TEST_FILE_NAME_CUSTOM)
13
13
  expect(new_file.name).to eq(TEST_FILE_NAME_CUSTOM)
14
14
 
15
+ puts "upload a file from IO"
16
+ io = File.open("./spec/test_files/#{TEST_FILE_NAME}")
17
+ new_file = BOX_CLIENT.upload_file_from_io(io, @test_folder, name: TEST_FILE_NAME_IO)
18
+ expect(new_file.name).to eq(TEST_FILE_NAME_IO)
19
+
15
20
  puts "get file using path"
16
21
  file = BOX_CLIENT.file_from_path("/#{TEST_FOLDER_NAME}/#{TEST_FILE_NAME}")
17
22
  expect(file.id).to eq(test_file.id)
@@ -50,13 +55,16 @@ describe "file operations" do
50
55
  expect(unlocked_file.lock).to be_nil
51
56
 
52
57
  puts "download file"
53
- file = BOX_CLIENT.download_file(test_file)
58
+ file_content = BOX_CLIENT.download_file(test_file)
54
59
  f = File.open("./spec/test_files/#{DOWNLOADED_TEST_FILE_NAME}", 'w+')
55
- f.write(file)
60
+ f.write(file_content)
56
61
  f.close
57
62
  expect(FileUtils.identical?("./spec/test_files/#{TEST_FILE_NAME}","./spec/test_files/#{DOWNLOADED_TEST_FILE_NAME}")).to eq(true)
58
63
  File.delete("./spec/test_files/#{DOWNLOADED_TEST_FILE_NAME}")
59
64
 
65
+ puts "download invalid file"
66
+ expect { BOX_CLIENT.download_file('INVALID_FILE_NAME.pdf') }.to raise_exception(Boxr::BoxrError)
67
+
60
68
  puts "upload new version of file"
61
69
  new_version = BOX_CLIENT.upload_new_version_of_file("./spec/test_files/#{TEST_FILE_NAME}", test_file)
62
70
  expect(new_version.id).to eq(test_file.id)
@@ -29,6 +29,8 @@ describe 'file metadata operations' do
29
29
  #NOTE: this test will fail unless you create a metadata template called 'test' with two attributes: 'a' of type text, and 'b' of type text
30
30
  it "invokes folder metadata operations" do
31
31
  new_folder = BOX_CLIENT.create_folder(SUB_FOLDER_NAME, @test_folder)
32
+ fields = [{displayName: "a", type: "string"},{displayName: "b", type: "string"}]
33
+ metadata_template = BOX_CLIENT.create_metadata_template("test", fields: fields)
32
34
 
33
35
  puts "create folder metadata"
34
36
  meta = {"a" => "hello", "b" => "world"}
@@ -48,5 +50,24 @@ describe 'file metadata operations' do
48
50
  puts "delete folder metadata"
49
51
  result = BOX_CLIENT.delete_folder_metadata(new_folder, "enterprise", "test")
50
52
  expect(result).to eq({})
53
+
54
+ puts "cleanup metadata template"
55
+ template_key = metadata_template["templateKey"]
56
+ scope = metadata_template["scope"]
57
+ BOX_CLIENT.delete_metadata_template(scope, template_key)
58
+ end
59
+
60
+ #rake spec SPEC_OPTS="-e \"invokes metadata template operations"\"
61
+ it "invokes metadata template operations" do
62
+ puts "create metadata template"
63
+ metadata_template = BOX_CLIENT.create_metadata_template("Test Template")
64
+ expect(metadata_template["displayName"]).to eq("Test Template")
65
+
66
+ template_key = metadata_template["templateKey"]
67
+ scope = metadata_template["scope"]
68
+
69
+ puts "delete metadata template"
70
+ result = BOX_CLIENT.delete_metadata_template(scope, template_key)
71
+ expect(result).to eq({})
51
72
  end
52
73
  end
data/spec/boxr_spec.rb CHANGED
@@ -10,7 +10,11 @@ describe Boxr::Client do
10
10
 
11
11
  #REQUIRED BOX SETTINGS
12
12
  # 1. The developer token used must have admin or co-admin priviledges
13
+ # 1.5 In the admin settings, advanced features must be enabled (perform as user and create user access tokens)
13
14
  # 2. Enterprise settings must allow Admin and Co-admins to permanently delete content in Trash
15
+ # 3. In Box Admin settings, you must authorize the app.
16
+ # - Admin Console > Enterprise Settings > Apps > Custom Applications > Authorize New App. Insert you client ID (API key)
17
+ # - You may need to re-authorize the app if you're running into issues with user tokens
14
18
 
15
19
  #follow the directions in .env.example to set up your BOX_DEVELOPER_TOKEN
16
20
  #keep in mind it is only valid for 60 minutes
@@ -25,6 +29,7 @@ describe Boxr::Client do
25
29
  SUB_FOLDER_DESCRIPTION = 'This was created by the Boxr test suite'
26
30
  TEST_FILE_NAME = 'test file.txt'
27
31
  TEST_FILE_NAME_CUSTOM = 'test file custom.txt'
32
+ TEST_FILE_NAME_IO = 'test file io.txt'
28
33
  DOWNLOADED_TEST_FILE_NAME = 'downloaded test file.txt'
29
34
  COMMENT_MESSAGE = 'this is a comment'
30
35
  REPLY_MESSAGE = 'this is a comment reply'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: boxr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 1.11.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chad Burnette
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-31 00:00:00.000000000 Z
11
+ date: 2019-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -209,6 +209,7 @@ files:
209
209
  - lib/boxr/version.rb
210
210
  - lib/boxr/watermarking.rb
211
211
  - lib/boxr/web_links.rb
212
+ - spec/boxr/auth_spec.rb
212
213
  - spec/boxr/collaborations_spec.rb
213
214
  - spec/boxr/comments_spec.rb
214
215
  - spec/boxr/files_spec.rb
@@ -247,6 +248,7 @@ signing_key:
247
248
  specification_version: 4
248
249
  summary: A Ruby client library for the Box V2 Content API.
249
250
  test_files:
251
+ - spec/boxr/auth_spec.rb
250
252
  - spec/boxr/collaborations_spec.rb
251
253
  - spec/boxr/comments_spec.rb
252
254
  - spec/boxr/files_spec.rb