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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cd53bf1526acf4b05dcf83b888767dea4a2f6f3d9bcb9147b9a10778e5f0d859
4
- data.tar.gz: ceab9581e73753f3f7125c9aaf3b811877c47c1128a17c50afa989966f86e8a3
3
+ metadata.gz: 35d6567652802d9963868db543e89b97214563bd8a153d3247ce7a719147d19a
4
+ data.tar.gz: 6160ee8c1d52d1df44e8cc011c6e5299e8b5adfdcffc6c4abea46086a99f2542
5
5
  SHA512:
6
- metadata.gz: fa545cd50ffcb06f1afc54453b79db053e38e8646badf6a66c9ab8b13658c178b4c44a07ffeb6aec1905931be9e5a75473115f8742741e31877eb00a51137179
7
- data.tar.gz: ddb3b721b49af57b392923c272b397732a27ed4426c5acaed858a6f0e525c173ea600d271912d265027c70217ae54bb5516d2fcc8c716ba7cfab77cf37c78521
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: ['2.7', '3.0', '3.1', '3.2']
18
+ ruby-version: ['3.3', '3.4', '4.0']
16
19
 
17
20
  steps:
18
- - uses: actions/checkout@v4
19
-
20
- - name: Set up Ruby
21
- uses: ruby/setup-ruby@v1
21
+ - uses: actions/checkout@v7
22
22
  with:
23
- ruby-version: ${{ matrix.ruby-version }}
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
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.7
2
+ TargetRubyVersion: 3.3
3
3
 
4
4
  plugins:
5
5
  - rubocop-rspec
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.23.0 and higher, this gem requires Ruby 2.7 or higher.
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 = '>= 2.7'
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', '~> 1.0'
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', '~> 3.7.0'
33
- spec.add_development_dependency 'rubyzip', '~> 2.3'
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 'hashie', '>= 3.5', '< 6'
40
- spec.add_runtime_dependency 'httpclient', '~> 2.8'
41
- spec.add_runtime_dependency 'jwt', '>= 1.4', '< 4'
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
@@ -174,7 +174,7 @@ module Boxr
174
174
 
175
175
  private
176
176
 
177
- PARALLEL_GEM_REQUIREMENT = Gem::Requirement.create('~> 1.0').freeze
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
- # Ruby 2.4 unified Fixnum and Bignum into Integer. This tests for Ruby 2.4
328
- if 1.instance_of?(Integer)
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 Fixnum, or object that responds to :id')
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Boxr
4
- VERSION = '1.24.1'
4
+ VERSION = '1.25.0'
5
5
  end
@@ -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
- secure_compare(generate_signature(key), signature)
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
@@ -1,6 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'base64'
4
+ require 'date'
5
+ require 'digest/sha1'
3
6
  require 'json'
7
+ require 'openssl'
8
+ require 'time'
4
9
  require 'httpclient'
5
10
  require 'hashie'
6
11
  require 'addressable/template'
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.24.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.0'
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.0'
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: 3.7.0
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: 3.7.0
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: '2.3'
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: '2.3'
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: '3.5'
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: '3.5'
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.8'
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.8'
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: '1.4'
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: '1.4'
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: '2.7'
355
+ version: '3.3'
329
356
  required_rubygems_version: !ruby/object:Gem::Requirement
330
357
  requirements:
331
358
  - - ">="