boxr 1.24.1 → 1.25.0
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 +4 -4
- data/.github/workflows/ruby-tests.yml +6 -24
- data/.rubocop.yml +1 -1
- data/README.md +2 -1
- data/boxr.gemspec +15 -10
- data/lib/boxr/chunked_uploads.rb +1 -1
- data/lib/boxr/client.rb +5 -9
- data/lib/boxr/version.rb +1 -1
- data/lib/boxr/webhook_validator.rb +3 -7
- data/lib/boxr.rb +5 -0
- metadata +63 -36
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 35d6567652802d9963868db543e89b97214563bd8a153d3247ce7a719147d19a
|
|
4
|
+
data.tar.gz: 6160ee8c1d52d1df44e8cc011c6e5299e8b5adfdcffc6c4abea46086a99f2542
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2717e203c30878c7066f51e75167d74e9869ee32dbfb0b37c6e4fa93b33686304f40993518bdc917199952498e6139be8433c0a0236af726c5028fea5cae8f84
|
|
7
|
+
data.tar.gz: 2a6130fe0e350652f32f89d52b33a91e1785f66b4b723cf67f8a47d591f97f8fd67f3c3588af03401537ca0c0858aad4aa3940b456a615978674539b5ddea015
|
|
@@ -6,45 +6,27 @@ on:
|
|
|
6
6
|
pull_request:
|
|
7
7
|
branches: [ main, master ]
|
|
8
8
|
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
9
12
|
jobs:
|
|
10
13
|
test:
|
|
11
14
|
runs-on: ubuntu-latest
|
|
12
15
|
|
|
13
16
|
strategy:
|
|
14
17
|
matrix:
|
|
15
|
-
ruby-version: ['
|
|
18
|
+
ruby-version: ['3.3', '3.4', '4.0']
|
|
16
19
|
|
|
17
20
|
steps:
|
|
18
|
-
- uses: actions/checkout@
|
|
19
|
-
|
|
20
|
-
- name: Set up Ruby
|
|
21
|
-
uses: ruby/setup-ruby@v1
|
|
21
|
+
- uses: actions/checkout@v7
|
|
22
22
|
with:
|
|
23
|
-
|
|
24
|
-
bundler-cache: true
|
|
25
|
-
bundler: '2.4.22'
|
|
26
|
-
|
|
27
|
-
- name: Run unit tests
|
|
28
|
-
run: bundle exec rspec spec/unit/
|
|
29
|
-
env:
|
|
30
|
-
BOX_DEVELOPER_TOKEN: test_token
|
|
31
|
-
|
|
32
|
-
test_bundler_2_5:
|
|
33
|
-
runs-on: ubuntu-latest
|
|
34
|
-
|
|
35
|
-
strategy:
|
|
36
|
-
matrix:
|
|
37
|
-
ruby-version: [ '3.3', '3.4']
|
|
38
|
-
|
|
39
|
-
steps:
|
|
40
|
-
- uses: actions/checkout@v4
|
|
23
|
+
persist-credentials: false
|
|
41
24
|
|
|
42
25
|
- name: Set up Ruby
|
|
43
26
|
uses: ruby/setup-ruby@v1
|
|
44
27
|
with:
|
|
45
28
|
ruby-version: ${{ matrix.ruby-version }}
|
|
46
29
|
bundler-cache: true
|
|
47
|
-
bundler: '2.5.23'
|
|
48
30
|
|
|
49
31
|
- name: Run unit tests
|
|
50
32
|
run: bundle exec rspec spec/unit/
|
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
|
@@ -15,7 +15,8 @@ Boxr follows Semantic Versioning since version 1.5.0
|
|
|
15
15
|
## Requirements
|
|
16
16
|
This gem requires a Ruby version depending on the version of the gem you are using. We aim to deprecate support for EOL Ruby versions.
|
|
17
17
|
|
|
18
|
-
- For version 1.
|
|
18
|
+
- For version 1.25.0 and higher, this gem requires Ruby 3.3 or higher.
|
|
19
|
+
- For versions 1.23.0 to 1.24.x, this gem requires Ruby 2.7 or higher.
|
|
19
20
|
- For version 1.22.0 and lower, this gem requires Ruby 2.0.0 or higher.
|
|
20
21
|
|
|
21
22
|
|
data/boxr.gemspec
CHANGED
|
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
|
8
8
|
spec.authors = ['Chad Burnette', 'Xavier Hocquet']
|
|
9
9
|
spec.email = ['chadburnette@me.com', 'xhocquet@gmail.com']
|
|
10
10
|
spec.summary = 'A Ruby client library for the Box V2 Content API.'
|
|
11
|
-
spec.description = ''
|
|
11
|
+
spec.description = 'Wraps the Box V2 Content API: files, folders, metadata, users and more.'
|
|
12
12
|
spec.homepage = 'https://github.com/cburnette/boxr'
|
|
13
13
|
spec.license = 'MIT'
|
|
14
14
|
|
|
@@ -16,27 +16,32 @@ Gem::Specification.new do |spec|
|
|
|
16
16
|
f.match(%r{^(test|spec|features)/})
|
|
17
17
|
end
|
|
18
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
19
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
20
19
|
spec.require_paths = ['lib']
|
|
21
20
|
|
|
22
|
-
spec.required_ruby_version = '>=
|
|
21
|
+
spec.required_ruby_version = '>= 3.3'
|
|
22
|
+
|
|
23
|
+
spec.metadata = {
|
|
24
|
+
'source_code_uri' => 'https://github.com/cburnette/boxr',
|
|
25
|
+
'bug_tracker_uri' => 'https://github.com/cburnette/boxr/issues',
|
|
26
|
+
'changelog_uri' => 'https://github.com/cburnette/boxr/releases'
|
|
27
|
+
}
|
|
23
28
|
|
|
24
29
|
spec.add_development_dependency 'awesome_print', '~> 1.8'
|
|
25
|
-
spec.add_development_dependency 'bundler', '>= 2.4' # Keep this locked for Ruby 2.7 compatibility
|
|
26
30
|
spec.add_development_dependency 'dotenv', '~> 2.8'
|
|
27
|
-
spec.add_development_dependency 'parallel', '
|
|
31
|
+
spec.add_development_dependency 'parallel', '>= 1.27', '< 3'
|
|
28
32
|
spec.add_development_dependency 'rake', '~> 13.1'
|
|
29
33
|
spec.add_development_dependency 'rspec', '~> 3.13.1'
|
|
30
34
|
spec.add_development_dependency 'rubocop', '~> 1.0'
|
|
31
35
|
spec.add_development_dependency 'rubocop-rake', '~> 0.7.1'
|
|
32
|
-
spec.add_development_dependency 'rubocop-rspec', '
|
|
33
|
-
spec.add_development_dependency 'rubyzip', '~>
|
|
36
|
+
spec.add_development_dependency 'rubocop-rspec', '>= 3.10.2', '< 4'
|
|
37
|
+
spec.add_development_dependency 'rubyzip', '~> 3.4'
|
|
34
38
|
spec.add_development_dependency 'simplecov', '~> 0.22'
|
|
35
39
|
spec.add_development_dependency 'sin_lru_redux', '~> 2.5'
|
|
36
40
|
spec.add_development_dependency 'webmock', '~> 3.19'
|
|
37
41
|
|
|
38
42
|
spec.add_runtime_dependency 'addressable', '~> 2.8'
|
|
39
|
-
spec.add_runtime_dependency '
|
|
40
|
-
spec.add_runtime_dependency '
|
|
41
|
-
spec.add_runtime_dependency '
|
|
43
|
+
spec.add_runtime_dependency 'base64', '>= 0.1', '< 1'
|
|
44
|
+
spec.add_runtime_dependency 'hashie', '>= 5.1', '< 6'
|
|
45
|
+
spec.add_runtime_dependency 'httpclient', '>= 2.10', '< 3'
|
|
46
|
+
spec.add_runtime_dependency 'jwt', '>= 2.8', '< 4'
|
|
42
47
|
end
|
data/lib/boxr/chunked_uploads.rb
CHANGED
|
@@ -174,7 +174,7 @@ module Boxr
|
|
|
174
174
|
|
|
175
175
|
private
|
|
176
176
|
|
|
177
|
-
PARALLEL_GEM_REQUIREMENT = Gem::Requirement.create('
|
|
177
|
+
PARALLEL_GEM_REQUIREMENT = Gem::Requirement.create('>= 1.0').freeze
|
|
178
178
|
|
|
179
179
|
def chunked_upload_to_session_from_io(io, session, n_threads: 1, # rubocop:disable Metrics
|
|
180
180
|
content_created_at: nil, content_modified_at: nil)
|
data/lib/boxr/client.rb
CHANGED
|
@@ -9,6 +9,7 @@ module Boxr
|
|
|
9
9
|
REVOKE_AUTH_URI = 'https://api.box.com/oauth2/revoke'
|
|
10
10
|
UPLOAD_URI = 'https://upload.box.com/api/2.0'
|
|
11
11
|
|
|
12
|
+
# rubocop:disable Style/MutableConstant
|
|
12
13
|
ARCHIVES_URI = "#{API_URI}/archives"
|
|
13
14
|
COLLABORATIONS_URI = "#{API_URI}/collaborations"
|
|
14
15
|
COLLECTIONS_URI = "#{API_URI}/collections"
|
|
@@ -30,6 +31,7 @@ module Boxr
|
|
|
30
31
|
WEB_LINKS_URI = "#{API_URI}/web_links"
|
|
31
32
|
WEBHOOKS_URI = "#{API_URI}/webhooks"
|
|
32
33
|
ZIP_DOWNLOADS_URI = "#{API_URI}/zip_downloads"
|
|
34
|
+
# rubocop:enable Style/MutableConstant
|
|
33
35
|
|
|
34
36
|
BOX_VERSION_HEADER_2025 = { 'box-version' => '2025.0' }.freeze
|
|
35
37
|
|
|
@@ -324,19 +326,13 @@ module Boxr
|
|
|
324
326
|
end
|
|
325
327
|
|
|
326
328
|
def ensure_id(item)
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
return ensure_path_segment(item) if item.instance_of?(String) ||
|
|
330
|
-
item.instance_of?(Integer) || item.nil?
|
|
331
|
-
elsif item.instance_of?(String) || item.instance_of?(Integer) || item.instance_of?(Integer) || item.nil?
|
|
332
|
-
if item.instance_of?(String) || item.instance_of?(Integer) || item.instance_of?(Integer) || item.nil?
|
|
333
|
-
return ensure_path_segment(item)
|
|
334
|
-
end
|
|
329
|
+
if item.instance_of?(String) || item.instance_of?(Integer) || item.nil?
|
|
330
|
+
return ensure_path_segment(item)
|
|
335
331
|
end
|
|
336
332
|
|
|
337
333
|
return ensure_path_segment(item.id) if item.respond_to?(:id)
|
|
338
334
|
|
|
339
|
-
raise BoxrError.new(boxr_message: 'Expecting an id of class String or
|
|
335
|
+
raise BoxrError.new(boxr_message: 'Expecting an id of class String or Integer, or object that responds to :id')
|
|
340
336
|
end
|
|
341
337
|
|
|
342
338
|
def ensure_path_segment(value)
|
data/lib/boxr/version.rb
CHANGED
|
@@ -56,16 +56,12 @@ module Boxr
|
|
|
56
56
|
current_time - delivery_time
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
-
def secure_compare(expected, actual)
|
|
60
|
-
return false unless expected.bytesize == actual.bytesize
|
|
61
|
-
|
|
62
|
-
expected.bytes.zip(actual.bytes).reduce(0) { |result, (x, y)| result | (x ^ y) }.zero?
|
|
63
|
-
end
|
|
64
|
-
|
|
65
59
|
def signature_valid?(key, signature)
|
|
66
60
|
return false if key.empty? || !signature.is_a?(String)
|
|
67
61
|
|
|
68
|
-
|
|
62
|
+
expected = generate_signature(key)
|
|
63
|
+
expected.bytesize == signature.bytesize &&
|
|
64
|
+
OpenSSL.fixed_length_secure_compare(expected, signature)
|
|
69
65
|
end
|
|
70
66
|
end
|
|
71
67
|
end
|
data/lib/boxr.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: boxr
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.25.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chad Burnette
|
|
@@ -24,20 +24,6 @@ dependencies:
|
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '1.8'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: bundler
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - ">="
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '2.4'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ">="
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '2.4'
|
|
41
27
|
- !ruby/object:Gem::Dependency
|
|
42
28
|
name: dotenv
|
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -56,16 +42,22 @@ dependencies:
|
|
|
56
42
|
name: parallel
|
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
|
58
44
|
requirements:
|
|
59
|
-
- - "
|
|
45
|
+
- - ">="
|
|
60
46
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '1.
|
|
47
|
+
version: '1.27'
|
|
48
|
+
- - "<"
|
|
49
|
+
- !ruby/object:Gem::Version
|
|
50
|
+
version: '3'
|
|
62
51
|
type: :development
|
|
63
52
|
prerelease: false
|
|
64
53
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
54
|
requirements:
|
|
66
|
-
- - "
|
|
55
|
+
- - ">="
|
|
67
56
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '1.
|
|
57
|
+
version: '1.27'
|
|
58
|
+
- - "<"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '3'
|
|
69
61
|
- !ruby/object:Gem::Dependency
|
|
70
62
|
name: rake
|
|
71
63
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -126,30 +118,36 @@ dependencies:
|
|
|
126
118
|
name: rubocop-rspec
|
|
127
119
|
requirement: !ruby/object:Gem::Requirement
|
|
128
120
|
requirements:
|
|
129
|
-
- - "
|
|
121
|
+
- - ">="
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: 3.10.2
|
|
124
|
+
- - "<"
|
|
130
125
|
- !ruby/object:Gem::Version
|
|
131
|
-
version:
|
|
126
|
+
version: '4'
|
|
132
127
|
type: :development
|
|
133
128
|
prerelease: false
|
|
134
129
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
130
|
requirements:
|
|
136
|
-
- - "
|
|
131
|
+
- - ">="
|
|
132
|
+
- !ruby/object:Gem::Version
|
|
133
|
+
version: 3.10.2
|
|
134
|
+
- - "<"
|
|
137
135
|
- !ruby/object:Gem::Version
|
|
138
|
-
version:
|
|
136
|
+
version: '4'
|
|
139
137
|
- !ruby/object:Gem::Dependency
|
|
140
138
|
name: rubyzip
|
|
141
139
|
requirement: !ruby/object:Gem::Requirement
|
|
142
140
|
requirements:
|
|
143
141
|
- - "~>"
|
|
144
142
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: '
|
|
143
|
+
version: '3.4'
|
|
146
144
|
type: :development
|
|
147
145
|
prerelease: false
|
|
148
146
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
147
|
requirements:
|
|
150
148
|
- - "~>"
|
|
151
149
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: '
|
|
150
|
+
version: '3.4'
|
|
153
151
|
- !ruby/object:Gem::Dependency
|
|
154
152
|
name: simplecov
|
|
155
153
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -206,13 +204,33 @@ dependencies:
|
|
|
206
204
|
- - "~>"
|
|
207
205
|
- !ruby/object:Gem::Version
|
|
208
206
|
version: '2.8'
|
|
207
|
+
- !ruby/object:Gem::Dependency
|
|
208
|
+
name: base64
|
|
209
|
+
requirement: !ruby/object:Gem::Requirement
|
|
210
|
+
requirements:
|
|
211
|
+
- - ">="
|
|
212
|
+
- !ruby/object:Gem::Version
|
|
213
|
+
version: '0.1'
|
|
214
|
+
- - "<"
|
|
215
|
+
- !ruby/object:Gem::Version
|
|
216
|
+
version: '1'
|
|
217
|
+
type: :runtime
|
|
218
|
+
prerelease: false
|
|
219
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
220
|
+
requirements:
|
|
221
|
+
- - ">="
|
|
222
|
+
- !ruby/object:Gem::Version
|
|
223
|
+
version: '0.1'
|
|
224
|
+
- - "<"
|
|
225
|
+
- !ruby/object:Gem::Version
|
|
226
|
+
version: '1'
|
|
209
227
|
- !ruby/object:Gem::Dependency
|
|
210
228
|
name: hashie
|
|
211
229
|
requirement: !ruby/object:Gem::Requirement
|
|
212
230
|
requirements:
|
|
213
231
|
- - ">="
|
|
214
232
|
- !ruby/object:Gem::Version
|
|
215
|
-
version: '
|
|
233
|
+
version: '5.1'
|
|
216
234
|
- - "<"
|
|
217
235
|
- !ruby/object:Gem::Version
|
|
218
236
|
version: '6'
|
|
@@ -222,7 +240,7 @@ dependencies:
|
|
|
222
240
|
requirements:
|
|
223
241
|
- - ">="
|
|
224
242
|
- !ruby/object:Gem::Version
|
|
225
|
-
version: '
|
|
243
|
+
version: '5.1'
|
|
226
244
|
- - "<"
|
|
227
245
|
- !ruby/object:Gem::Version
|
|
228
246
|
version: '6'
|
|
@@ -230,23 +248,29 @@ dependencies:
|
|
|
230
248
|
name: httpclient
|
|
231
249
|
requirement: !ruby/object:Gem::Requirement
|
|
232
250
|
requirements:
|
|
233
|
-
- - "
|
|
251
|
+
- - ">="
|
|
234
252
|
- !ruby/object:Gem::Version
|
|
235
|
-
version: '2.
|
|
253
|
+
version: '2.10'
|
|
254
|
+
- - "<"
|
|
255
|
+
- !ruby/object:Gem::Version
|
|
256
|
+
version: '3'
|
|
236
257
|
type: :runtime
|
|
237
258
|
prerelease: false
|
|
238
259
|
version_requirements: !ruby/object:Gem::Requirement
|
|
239
260
|
requirements:
|
|
240
|
-
- - "
|
|
261
|
+
- - ">="
|
|
241
262
|
- !ruby/object:Gem::Version
|
|
242
|
-
version: '2.
|
|
263
|
+
version: '2.10'
|
|
264
|
+
- - "<"
|
|
265
|
+
- !ruby/object:Gem::Version
|
|
266
|
+
version: '3'
|
|
243
267
|
- !ruby/object:Gem::Dependency
|
|
244
268
|
name: jwt
|
|
245
269
|
requirement: !ruby/object:Gem::Requirement
|
|
246
270
|
requirements:
|
|
247
271
|
- - ">="
|
|
248
272
|
- !ruby/object:Gem::Version
|
|
249
|
-
version: '
|
|
273
|
+
version: '2.8'
|
|
250
274
|
- - "<"
|
|
251
275
|
- !ruby/object:Gem::Version
|
|
252
276
|
version: '4'
|
|
@@ -256,11 +280,11 @@ dependencies:
|
|
|
256
280
|
requirements:
|
|
257
281
|
- - ">="
|
|
258
282
|
- !ruby/object:Gem::Version
|
|
259
|
-
version: '
|
|
283
|
+
version: '2.8'
|
|
260
284
|
- - "<"
|
|
261
285
|
- !ruby/object:Gem::Version
|
|
262
286
|
version: '4'
|
|
263
|
-
description: ''
|
|
287
|
+
description: 'Wraps the Box V2 Content API: files, folders, metadata, users and more.'
|
|
264
288
|
email:
|
|
265
289
|
- chadburnette@me.com
|
|
266
290
|
- xhocquet@gmail.com
|
|
@@ -317,7 +341,10 @@ files:
|
|
|
317
341
|
homepage: https://github.com/cburnette/boxr
|
|
318
342
|
licenses:
|
|
319
343
|
- MIT
|
|
320
|
-
metadata:
|
|
344
|
+
metadata:
|
|
345
|
+
source_code_uri: https://github.com/cburnette/boxr
|
|
346
|
+
bug_tracker_uri: https://github.com/cburnette/boxr/issues
|
|
347
|
+
changelog_uri: https://github.com/cburnette/boxr/releases
|
|
321
348
|
rdoc_options: []
|
|
322
349
|
require_paths:
|
|
323
350
|
- lib
|
|
@@ -325,7 +352,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
325
352
|
requirements:
|
|
326
353
|
- - ">="
|
|
327
354
|
- !ruby/object:Gem::Version
|
|
328
|
-
version: '
|
|
355
|
+
version: '3.3'
|
|
329
356
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
330
357
|
requirements:
|
|
331
358
|
- - ">="
|