globus_client 0.13.0 → 0.15.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: 9129e55c5e5e6f4f62fc0d8912eca9310eff036e1c0095d24cae07367947054c
4
- data.tar.gz: 1265f2f6c1b68bb6d76634f7bd636ed920b1095fd3bfd5ab6702525d994bf295
3
+ metadata.gz: e189003b0a3f0592abd4fb7fabb006a3367f3cd330d83d7e46da2c2993bbbc21
4
+ data.tar.gz: 36c6ff9a70ddcfea7be6e1ca044b110adb536aa911adbb1626f5086737342d88
5
5
  SHA512:
6
- metadata.gz: 407e55c907f990f0492898e636525c8238221167fabf6d0b4bccef0c9eb163f0d75b5bb3b05b58130be46bb823b809a524490f762cbd5b3c56143e2abf9fd7c4
7
- data.tar.gz: e7300d3adbaa6b75d43cafe1faae5eccfc212f558ce7d38889438d3ceaac99becc55242d2a10f2ec3eba759d2038649fe2b80585e97cba4e58ebd215b4767594
6
+ metadata.gz: 02cd08266cd52d2a3dd86ded97c8ce0085832fb446223375ab69164ed087187611e184e7cb4555208a0fb30b477e6c8b0e212041073cce2a3c328ddf6412e0c3
7
+ data.tar.gz: 1d54da5c74f41e1a98ecdf0296ee948e14a9e569ed1f58a20f52c96347b1b215a4121050cef2e9c7f3d25d525a5b061e9cfe79cc8517efb1ff896cb517226962
data/.rubocop.yml CHANGED
@@ -1,18 +1,28 @@
1
- inherit_mode:
2
- merge:
3
- - Exclude
1
+ inherit_from: .rubocop_todo.yml
4
2
 
5
3
  require:
6
- - standard
7
- - standard-custom
8
- - standard-performance
9
4
  - rubocop-performance
10
5
  - rubocop-rspec
11
6
 
12
- inherit_gem:
13
- standard: config/base.yml
14
- standard-performance: config/base.yml
15
- standard-custom: config/base.yml
7
+ AllCops:
8
+ TargetRubyVersion: 3.1
9
+ DisplayCopNames: true
10
+ SuggestExtensions: false
11
+ NewCops: disable
12
+ Exclude:
13
+ - bin/**
14
+ - vendor/bundle/**/*
16
15
 
17
- inherit_from:
18
- - .rubocop/custom.yml
16
+ # Per team developer playbook
17
+ RSpec/MultipleMemoizedHelpers:
18
+ Enabled: false
19
+
20
+ # Layout
21
+ Layout/LineLength:
22
+ Max: 150
23
+
24
+ # Naming
25
+ Naming/PredicateName:
26
+ ForbiddenPrefixes:
27
+ - is_
28
+ - have_
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,33 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config --auto-gen-only-exclude`
3
+ # on 2023-09-29 23:59:42 UTC using RuboCop version 1.56.3.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 1
10
+ Lint/StructNewOverride:
11
+ Exclude:
12
+ - 'lib/globus_client/endpoint.rb'
13
+
14
+ # Offense count: 4
15
+ # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes, Max.
16
+ Metrics/AbcSize:
17
+ Exclude:
18
+ - 'lib/globus_client.rb'
19
+ - 'lib/globus_client/endpoint.rb'
20
+ - 'lib/globus_client/unexpected_response.rb'
21
+
22
+ # Offense count: 1
23
+ # Configuration parameters: AllowedMethods, AllowedPatterns, Max.
24
+ Metrics/CyclomaticComplexity:
25
+ Exclude:
26
+ - 'lib/globus_client/endpoint.rb'
27
+
28
+ # Offense count: 3
29
+ # Configuration parameters: CountComments, Max, CountAsOne, AllowedMethods, AllowedPatterns.
30
+ Metrics/MethodLength:
31
+ Exclude:
32
+ - 'lib/globus_client/endpoint.rb'
33
+ - 'lib/globus_client/unexpected_response.rb'
data/Gemfile CHANGED
@@ -1,8 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- source "https://rubygems.org"
3
+ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in globus_client.gemspec
6
6
  gemspec
7
7
 
8
- gem "byebug"
8
+ group :deployment do
9
+ gem 'byebug'
10
+ gem 'rake', '~> 13.0'
11
+ gem 'rspec', '~> 3.0'
12
+ gem 'rubocop-performance'
13
+ gem 'rubocop-rspec'
14
+ gem 'simplecov'
15
+ gem 'webmock'
16
+ end
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- globus_client (0.13.0)
5
- activesupport (>= 4.2, < 8)
4
+ globus_client (0.15.0)
5
+ activesupport (>= 4.2)
6
6
  faraday
7
7
  faraday-retry
8
8
  zeitwerk
@@ -10,111 +10,110 @@ PATH
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- activesupport (7.0.8)
14
- concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ activesupport (8.0.1)
14
+ base64
15
+ benchmark (>= 0.3)
16
+ bigdecimal
17
+ concurrent-ruby (~> 1.0, >= 1.3.1)
18
+ connection_pool (>= 2.2.5)
19
+ drb
15
20
  i18n (>= 1.6, < 2)
21
+ logger (>= 1.4.2)
16
22
  minitest (>= 5.1)
17
- tzinfo (~> 2.0)
18
- addressable (2.8.5)
19
- public_suffix (>= 2.0.2, < 6.0)
23
+ securerandom (>= 0.3)
24
+ tzinfo (~> 2.0, >= 2.0.5)
25
+ uri (>= 0.13.1)
26
+ addressable (2.8.7)
27
+ public_suffix (>= 2.0.2, < 7.0)
20
28
  ast (2.4.2)
21
- base64 (0.1.1)
29
+ base64 (0.2.0)
30
+ benchmark (0.4.0)
31
+ bigdecimal (3.1.9)
22
32
  byebug (11.1.3)
23
- concurrent-ruby (1.2.2)
24
- crack (0.4.5)
33
+ concurrent-ruby (1.3.5)
34
+ connection_pool (2.5.0)
35
+ crack (1.0.0)
36
+ bigdecimal
25
37
  rexml
26
- diff-lcs (1.5.0)
27
- docile (1.4.0)
28
- faraday (2.7.11)
29
- base64
30
- faraday-net_http (>= 2.0, < 3.1)
31
- ruby2_keywords (>= 0.0.4)
32
- faraday-net_http (3.0.2)
33
- faraday-retry (2.2.0)
38
+ diff-lcs (1.5.1)
39
+ docile (1.4.1)
40
+ drb (2.2.1)
41
+ faraday (2.12.2)
42
+ faraday-net_http (>= 2.0, < 3.5)
43
+ json
44
+ logger
45
+ faraday-net_http (3.4.0)
46
+ net-http (>= 0.5.0)
47
+ faraday-retry (2.2.1)
34
48
  faraday (~> 2.0)
35
- hashdiff (1.0.1)
36
- i18n (1.14.1)
49
+ hashdiff (1.1.2)
50
+ i18n (1.14.7)
37
51
  concurrent-ruby (~> 1.0)
38
- json (2.6.3)
39
- language_server-protocol (3.17.0.3)
40
- lint_roller (1.1.0)
41
- minitest (5.20.0)
42
- parallel (1.23.0)
43
- parser (3.2.2.3)
52
+ json (2.9.1)
53
+ language_server-protocol (3.17.0.4)
54
+ logger (1.6.6)
55
+ minitest (5.25.4)
56
+ net-http (0.6.0)
57
+ uri
58
+ parallel (1.26.3)
59
+ parser (3.3.7.1)
44
60
  ast (~> 2.4.1)
45
61
  racc
46
- public_suffix (5.0.3)
47
- racc (1.7.1)
62
+ public_suffix (6.0.1)
63
+ racc (1.8.1)
48
64
  rainbow (3.1.1)
49
- rake (13.0.6)
50
- regexp_parser (2.8.1)
51
- rexml (3.2.6)
52
- rspec (3.12.0)
53
- rspec-core (~> 3.12.0)
54
- rspec-expectations (~> 3.12.0)
55
- rspec-mocks (~> 3.12.0)
56
- rspec-core (3.12.2)
57
- rspec-support (~> 3.12.0)
58
- rspec-expectations (3.12.3)
65
+ rake (13.2.1)
66
+ regexp_parser (2.10.0)
67
+ rexml (3.4.0)
68
+ rspec (3.13.0)
69
+ rspec-core (~> 3.13.0)
70
+ rspec-expectations (~> 3.13.0)
71
+ rspec-mocks (~> 3.13.0)
72
+ rspec-core (3.13.3)
73
+ rspec-support (~> 3.13.0)
74
+ rspec-expectations (3.13.3)
59
75
  diff-lcs (>= 1.2.0, < 2.0)
60
- rspec-support (~> 3.12.0)
61
- rspec-mocks (3.12.6)
76
+ rspec-support (~> 3.13.0)
77
+ rspec-mocks (3.13.2)
62
78
  diff-lcs (>= 1.2.0, < 2.0)
63
- rspec-support (~> 3.12.0)
64
- rspec-support (3.12.1)
65
- rubocop (1.56.3)
66
- base64 (~> 0.1.1)
79
+ rspec-support (~> 3.13.0)
80
+ rspec-support (3.13.2)
81
+ rubocop (1.71.2)
67
82
  json (~> 2.3)
68
83
  language_server-protocol (>= 3.17.0)
69
84
  parallel (~> 1.10)
70
- parser (>= 3.2.2.3)
85
+ parser (>= 3.3.0.2)
71
86
  rainbow (>= 2.2.2, < 4.0)
72
- regexp_parser (>= 1.8, < 3.0)
73
- rexml (>= 3.2.5, < 4.0)
74
- rubocop-ast (>= 1.28.1, < 2.0)
87
+ regexp_parser (>= 2.9.3, < 3.0)
88
+ rubocop-ast (>= 1.38.0, < 2.0)
75
89
  ruby-progressbar (~> 1.7)
76
- unicode-display_width (>= 2.4.0, < 3.0)
77
- rubocop-ast (1.29.0)
78
- parser (>= 3.2.1.0)
79
- rubocop-capybara (2.19.0)
80
- rubocop (~> 1.41)
81
- rubocop-factory_bot (2.24.0)
82
- rubocop (~> 1.33)
83
- rubocop-performance (1.19.1)
84
- rubocop (>= 1.7.0, < 2.0)
85
- rubocop-ast (>= 0.4.0)
86
- rubocop-rspec (2.24.1)
87
- rubocop (~> 1.33)
88
- rubocop-capybara (~> 2.17)
89
- rubocop-factory_bot (~> 2.22)
90
+ unicode-display_width (>= 2.4.0, < 4.0)
91
+ rubocop-ast (1.38.0)
92
+ parser (>= 3.3.1.0)
93
+ rubocop-performance (1.23.1)
94
+ rubocop (>= 1.48.1, < 2.0)
95
+ rubocop-ast (>= 1.31.1, < 2.0)
96
+ rubocop-rspec (3.4.0)
97
+ rubocop (~> 1.61)
90
98
  ruby-progressbar (1.13.0)
91
- ruby2_keywords (0.0.5)
99
+ securerandom (0.4.1)
92
100
  simplecov (0.22.0)
93
101
  docile (~> 1.1)
94
102
  simplecov-html (~> 0.11)
95
103
  simplecov_json_formatter (~> 0.1)
96
- simplecov-html (0.12.3)
104
+ simplecov-html (0.13.1)
97
105
  simplecov_json_formatter (0.1.4)
98
- standard (1.31.1)
99
- language_server-protocol (~> 3.17.0.2)
100
- lint_roller (~> 1.0)
101
- rubocop (~> 1.56.2)
102
- standard-custom (~> 1.0.0)
103
- standard-performance (~> 1.2)
104
- standard-custom (1.0.2)
105
- lint_roller (~> 1.0)
106
- rubocop (~> 1.50)
107
- standard-performance (1.2.0)
108
- lint_roller (~> 1.1)
109
- rubocop-performance (~> 1.19.0)
110
106
  tzinfo (2.0.6)
111
107
  concurrent-ruby (~> 1.0)
112
- unicode-display_width (2.4.2)
113
- webmock (3.19.1)
108
+ unicode-display_width (3.1.4)
109
+ unicode-emoji (~> 4.0, >= 4.0.4)
110
+ unicode-emoji (4.0.4)
111
+ uri (1.0.2)
112
+ webmock (3.25.0)
114
113
  addressable (>= 2.8.0)
115
114
  crack (>= 0.3.2)
116
115
  hashdiff (>= 0.4.0, < 2.0.0)
117
- zeitwerk (2.6.11)
116
+ zeitwerk (2.7.1)
118
117
 
119
118
  PLATFORMS
120
119
  x86_64-darwin-19
@@ -128,9 +127,9 @@ DEPENDENCIES
128
127
  globus_client!
129
128
  rake (~> 13.0)
130
129
  rspec (~> 3.0)
130
+ rubocop-performance
131
131
  rubocop-rspec
132
132
  simplecov
133
- standard
134
133
  webmock
135
134
 
136
135
  BUNDLED WITH
data/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/globus_client.svg)](https://badge.fury.io/rb/globus_client)
2
2
  [![CircleCI](https://circleci.com/gh/sul-dlss/globus_client.svg?style=svg)](https://circleci.com/gh/sul-dlss/globus_client)
3
- [![Code Climate](https://codeclimate.com/github/sul-dlss/globus_client/badges/gpa.svg)](https://codeclimate.com/github/sul-dlss/globus_client)
4
- [![Code Climate Test Coverage](https://api.codeclimate.com/v1/badges/8e6bf1a5d3fc86a6fbd0/test_coverage)](https://codeclimate.com/github/sul-dlss/globus_client/test_coverage)
3
+ [![codecov](https://codecov.io/github/sul-dlss/globus_client/graph/badge.svg?token=ARR042OHR8)](https://codecov.io/github/sul-dlss/globus_client)
5
4
 
6
5
  # GlobusClient
7
6
 
data/Rakefile CHANGED
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/gem_tasks"
4
- require "rspec/core/rake_task"
5
- require "rubocop/rake_task"
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+ require 'rubocop/rake_task'
6
6
 
7
7
  RSpec::Core::RakeTask.new(:spec)
8
8
  RuboCop::RakeTask.new
data/api_test.rb CHANGED
@@ -1,40 +1,40 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require "benchmark"
5
- require "bundler/setup"
6
- require "globus_client"
4
+ require 'benchmark'
5
+ require 'bundler/setup'
6
+ require 'globus_client'
7
7
 
8
- Benchmark.bm(20) do |benchmark|
8
+ Benchmark.bm(20) do |benchmark| # rubocop:disable Metrics/BlockLength
9
9
  user_id, path = *ARGV
10
10
 
11
- benchmark.report("Configure:") do
11
+ benchmark.report('Configure:') do
12
12
  GlobusClient.configure(
13
- client_id: ENV["GLOBUS_CLIENT_ID"],
14
- client_secret: ENV["GLOBUS_CLIENT_SECRET"],
15
- uploads_directory: ENV["GLOBUS_UPLOADS_DIRECTORY"],
16
- transfer_endpoint_id: ENV["GLOBUS_ENDPOINT"]
13
+ client_id: ENV.fetch('GLOBUS_CLIENT_ID', nil),
14
+ client_secret: ENV.fetch('GLOBUS_CLIENT_SECRET', nil),
15
+ uploads_directory: ENV.fetch('GLOBUS_UPLOADS_DIRECTORY', nil),
16
+ transfer_endpoint_id: ENV.fetch('GLOBUS_ENDPOINT', nil)
17
17
  )
18
18
  end
19
19
 
20
- benchmark.report("mkdir:") do
20
+ benchmark.report('mkdir:') do
21
21
  GlobusClient.mkdir(user_id:, path:)
22
22
  end
23
23
 
24
- benchmark.report("user_valid?:") do
24
+ benchmark.report('user_valid?:') do
25
25
  @user_exists = GlobusClient.user_valid?(user_id)
26
26
  end
27
27
 
28
- benchmark.report("before_perms:") do
28
+ benchmark.report('before_perms:') do
29
29
  # Not part of the public API but this allows us to test access changes
30
- @before_permissions = GlobusClient::Endpoint.new(GlobusClient.instance, user_id:, path:).send(:access_rule)["permissions"]
30
+ @before_permissions = GlobusClient::Endpoint.new(user_id:, path:).send(:access_rule)['permissions']
31
31
  end
32
32
 
33
- benchmark.report("has_files?:") do
33
+ benchmark.report('has_files?:') do
34
34
  @has_files = GlobusClient.has_files?(user_id:, path:)
35
35
  end
36
36
 
37
- benchmark.report("list_files:") do
37
+ benchmark.report('list_files:') do
38
38
  GlobusClient.list_files(user_id:, path:) do |files|
39
39
  @files_count = files.count
40
40
  @total_size = files.sum(&:size)
@@ -42,13 +42,13 @@ Benchmark.bm(20) do |benchmark|
42
42
  end
43
43
  end
44
44
 
45
- benchmark.report("disallow_writes:") do
45
+ benchmark.report('disallow_writes:') do
46
46
  GlobusClient.disallow_writes(user_id:, path:)
47
47
  end
48
48
 
49
- benchmark.report("after_perms:") do
49
+ benchmark.report('after_perms:') do
50
50
  # Not part of the public API but this allows us to test access changes
51
- @after_permissions = GlobusClient::Endpoint.new(GlobusClient.instance, user_id:, path:).send(:access_rule)["permissions"]
51
+ @after_permissions = GlobusClient::Endpoint.new(user_id:, path:).send(:access_rule)['permissions']
52
52
  end
53
53
 
54
54
  puts "User #{user_id} exists: #{@user_exists}"
@@ -1,24 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path("lib", __dir__)
3
+ lib = File.expand_path('lib', __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require "globus_client/version"
5
+ require 'globus_client/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = "globus_client"
8
+ spec.name = 'globus_client'
9
9
  spec.version = GlobusClient::VERSION
10
- spec.authors = ["Aaron Collier", "Laura Wrubel", "Mike Giarlo"]
11
- spec.email = ["aaron.collier@stanford.edu", "lwrubel@stanford.edu", "mjgiarlo@stanford.edu"]
10
+ spec.authors = ['Aaron Collier', 'Laura Wrubel', 'Mike Giarlo']
11
+ spec.email = ['aaron.collier@stanford.edu', 'lwrubel@stanford.edu', 'mjgiarlo@stanford.edu']
12
12
 
13
- spec.summary = "Interface for interacting with the Globus API."
14
- spec.description = "This provides API interaction with the Globus API"
15
- spec.homepage = "https://github.com/sul-dlss/globus_client"
16
- spec.required_ruby_version = ">= 2.6.0"
13
+ spec.summary = 'Interface for interacting with the Globus API.'
14
+ spec.description = 'This provides API interaction with the Globus API'
15
+ spec.homepage = 'https://github.com/sul-dlss/globus_client'
16
+ spec.required_ruby_version = '>= 3.1.0'
17
17
 
18
- spec.metadata["homepage_uri"] = spec.homepage
19
- spec.metadata["source_code_uri"] = "https://github.com/sul-dlss/globus_client"
20
- spec.metadata["changelog_uri"] = "https://github.com/sul-dlss/globus_client/releases"
21
- spec.metadata["rubygems_mfa_required"] = "true"
18
+ spec.metadata['homepage_uri'] = spec.homepage
19
+ spec.metadata['source_code_uri'] = 'https://github.com/sul-dlss/globus_client'
20
+ spec.metadata['changelog_uri'] = 'https://github.com/sul-dlss/globus_client/releases'
21
+ spec.metadata['rubygems_mfa_required'] = 'true'
22
22
 
23
23
  # Specify which files should be added to the gem when it is released.
24
24
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -27,19 +27,12 @@ Gem::Specification.new do |spec|
27
27
  (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
28
28
  end
29
29
  end
30
- spec.bindir = "exe"
30
+ spec.bindir = 'exe'
31
31
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
32
- spec.require_paths = ["lib"]
32
+ spec.require_paths = ['lib']
33
33
 
34
- spec.add_dependency "activesupport", ">= 4.2", "< 8"
35
- spec.add_dependency "faraday"
36
- spec.add_dependency "faraday-retry"
37
- spec.add_dependency "zeitwerk"
38
-
39
- spec.add_development_dependency "rake", "~> 13.0"
40
- spec.add_development_dependency "rspec", "~> 3.0"
41
- spec.add_development_dependency "standard"
42
- spec.add_development_dependency "rubocop-rspec"
43
- spec.add_development_dependency "simplecov"
44
- spec.add_development_dependency "webmock"
34
+ spec.add_dependency 'activesupport', '>= 4.2'
35
+ spec.add_dependency 'faraday'
36
+ spec.add_dependency 'faraday-retry'
37
+ spec.add_dependency 'zeitwerk'
45
38
  end
@@ -3,40 +3,32 @@
3
3
  class GlobusClient
4
4
  # The namespace for the "login" command
5
5
  class Authenticator
6
- def self.token(client_id, client_secret, auth_url)
7
- new(client_id, client_secret, auth_url).token
8
- end
9
-
10
- def initialize(client_id, client_secret, auth_url)
11
- @client_id = client_id
12
- @client_secret = client_secret
13
- @auth_url = auth_url
6
+ def self.token
7
+ new.token
14
8
  end
15
9
 
16
10
  # Request an access_token
17
11
  def token
18
- response = connection.post("/v2/oauth2/token", form_data)
12
+ response = connection.post('/v2/oauth2/token', form_data)
19
13
 
20
14
  UnexpectedResponse.call(response) unless response.success?
21
15
 
22
- JSON.parse(response.body)["access_token"]
16
+ JSON.parse(response.body)['access_token']
23
17
  end
24
18
 
25
19
  private
26
20
 
27
- attr_reader :client_id, :client_secret, :auth_url
28
-
29
21
  def connection
30
- Faraday.new(url: auth_url)
22
+ Faraday.new(url: GlobusClient.config.auth_url)
31
23
  end
32
24
 
33
25
  def form_data
34
26
  {
35
- client_id:,
36
- client_secret:,
37
- encoding: "form",
38
- grant_type: "client_credentials",
39
- scope: "urn:globus:auth:scope:transfer.api.globus.org:all"
27
+ client_id: GlobusClient.config.client_id,
28
+ client_secret: GlobusClient.config.client_secret,
29
+ encoding: 'form',
30
+ grant_type: 'client_credentials',
31
+ scope: 'urn:globus:auth:scope:transfer.api.globus.org:all'
40
32
  }
41
33
  end
42
34
  end
@@ -2,18 +2,18 @@
2
2
 
3
3
  class GlobusClient
4
4
  # The namespace for endpoint API operations
5
- class Endpoint
6
- PATH_SEPARATOR = "/"
5
+ class Endpoint # rubocop:disable Metrics/ClassLength
6
+ PATH_SEPARATOR = '/'
7
7
 
8
8
  FileInfo = Struct.new(:name, :size)
9
9
 
10
- # @param client [GlobusClient] a configured instance of the GlobusClient
11
10
  # @param path [String] the path to operate on
12
11
  # @param user_id [String] a Globus user ID (e.g., a @stanford.edu email address)
13
- def initialize(client, path:, user_id:)
14
- @client = client
12
+ # @param notify_email [Boolean] indicates if we should ask Globus to send emails on access change (default: true)
13
+ def initialize(path:, user_id:, notify_email: true)
15
14
  @user_id = user_id
16
15
  @path = path
16
+ @notify_email = notify_email
17
17
  end
18
18
 
19
19
  def has_files?
@@ -30,41 +30,43 @@ class GlobusClient
30
30
  def mkdir
31
31
  # transfer API does not support recursive directory creation
32
32
  paths.each do |path|
33
- client.post(
34
- base_url: client.config.transfer_url,
33
+ GlobusClient.instance.post(
34
+ base_url: GlobusClient.config.transfer_url,
35
35
  path: "#{transfer_path}/mkdir",
36
- body: {DATA_TYPE: "mkdir", path:},
37
- expected_response: ->(resp) { resp.status == 502 && JSON.parse(resp.body)["code"] == "ExternalError.MkdirFailed.Exists" }
36
+ body: { DATA_TYPE: 'mkdir', path: },
37
+ expected_response: lambda { |resp|
38
+ resp.status == 502 && JSON.parse(resp.body)['code'] == 'ExternalError.MkdirFailed.Exists'
39
+ }
38
40
  )
39
41
  end
40
42
  end
41
43
 
42
44
  # Assign a user read/write permissions for a directory https://docs.globus.org/api/transfer/acl/#rest_access_create
43
45
  def allow_writes
44
- access_request(permissions: "rw")
46
+ access_request(permissions: 'rw')
45
47
  end
46
48
 
47
49
  # Assign a user read-only permissions for a directory https://docs.globus.org/api/transfer/acl/#rest_access_create
48
50
  def disallow_writes
49
- update_access_request(permissions: "r")
51
+ update_access_request(permissions: 'r')
50
52
  end
51
53
 
52
54
  # Delete the access rule https://docs.globus.org/api/transfer/acl/#delete_access_rule
53
55
  def delete_access_rule
54
- raise(StandardError, "Access rule not found for #{path}") if !access_rule_id
56
+ raise(StandardError, "Access rule not found for #{path}") unless access_rule_id
55
57
 
56
- client.delete(
57
- base_url: client.config.transfer_url,
58
+ GlobusClient.instance.delete(
59
+ base_url: GlobusClient.config.transfer_url,
58
60
  path: "#{access_path}/#{access_rule_id}"
59
61
  )
60
62
  end
61
63
 
62
64
  private
63
65
 
64
- attr_reader :client, :path, :user_id
66
+ attr_reader :path, :user_id, :notify_email
65
67
 
66
68
  def globus_identity_id
67
- Identity.new(client).get_identity_id(user_id)
69
+ Identity.new.get_identity_id(user_id)
68
70
  end
69
71
 
70
72
  # Builds up a path from a list of path elements. E.g., input would look like:
@@ -74,7 +76,7 @@ class GlobusClient
74
76
  def paths
75
77
  @paths ||= path_segments.map.with_index do |_segment, index|
76
78
  File
77
- .join(client.config.uploads_directory, path_segments.slice(..index))
79
+ .join(GlobusClient.config.uploads_directory, path_segments.slice(..index))
78
80
  .concat(PATH_SEPARATOR)
79
81
  end
80
82
  end
@@ -95,27 +97,27 @@ class GlobusClient
95
97
  # @param files [Array<FileInfo>] an array of FileInfo structs, each of which has a name and a size
96
98
  # @param return_presence [Boolean] if true, return a boolean to indicate if any files at all are present, short-circuiting the recursive operation
97
99
  def ls_path(filepath, files, return_presence: false)
98
- response = client.get(
99
- base_url: client.config.transfer_url,
100
+ response = GlobusClient.instance.get(
101
+ base_url: GlobusClient.config.transfer_url,
100
102
  path: "#{transfer_path}/ls",
101
- params: {path: filepath}
103
+ params: { path: filepath }
102
104
  )
103
105
 
104
- response["DATA"]
105
- .select { |object| object["type"] == "file" }
106
+ response['DATA']
107
+ .select { |object| object['type'] == 'file' }
106
108
  .each do |file|
107
109
  return true if return_presence
108
110
 
109
- files << FileInfo.new("#{filepath}#{file["name"]}", file["size"])
111
+ files << FileInfo.new("#{filepath}#{file['name']}", file['size'])
110
112
  end
111
113
 
112
- response["DATA"]
113
- .select { |object| object["type"] == "dir" }
114
+ response['DATA']
115
+ .select { |object| object['type'] == 'dir' }
114
116
  .each do |dir|
115
117
  # NOTE: This allows the recursive method to short-circuit iff ls_path
116
118
  # returns true, which only happens when return_presence is true
117
119
  # and the first file is found in the ls operation.
118
- return true if ls_path("#{filepath}#{dir["name"]}/", files, return_presence:) == true
120
+ return true if ls_path("#{filepath}#{dir['name']}/", files, return_presence:) == true
119
121
  end
120
122
 
121
123
  return false if return_presence
@@ -127,58 +129,59 @@ class GlobusClient
127
129
  if access_rule_id
128
130
  update_access_request(permissions:)
129
131
  else
130
- client.post(
131
- base_url: client.config.transfer_url,
132
+ body = {
133
+ DATA_TYPE: 'access',
134
+ principal_type: 'identity',
135
+ principal: globus_identity_id,
136
+ path: full_path,
137
+ permissions:
138
+ }
139
+ body[:notify_email] = user_id if notify_email
140
+ GlobusClient.instance.post(
141
+ base_url: GlobusClient.config.transfer_url,
132
142
  path: access_path,
133
- body: {
134
- DATA_TYPE: "access",
135
- principal_type: "identity",
136
- principal: globus_identity_id,
137
- path: full_path,
138
- permissions:,
139
- notify_email: user_id
140
- }
143
+ body:
141
144
  )
142
145
  end
143
146
  end
144
147
 
145
148
  def update_access_request(permissions:)
146
- raise(StandardError, "Access rule not found for #{path}") if !access_rule_id
149
+ raise(StandardError, "Access rule not found for #{path}") unless access_rule_id
147
150
 
148
- client.put(
149
- base_url: client.config.transfer_url,
151
+ GlobusClient.instance.put(
152
+ base_url: GlobusClient.config.transfer_url,
150
153
  path: "#{access_path}/#{access_rule_id}",
151
154
  body: {
152
- DATA_TYPE: "access",
155
+ DATA_TYPE: 'access',
153
156
  permissions:
154
157
  }
155
158
  )
156
159
  end
157
160
 
158
161
  def access_rule
159
- response = client.get(
160
- base_url: client.config.transfer_url,
162
+ response = GlobusClient.instance.get(
163
+ base_url: GlobusClient.config.transfer_url,
161
164
  path: access_list_path,
162
- content_type: "application/json"
165
+ content_type: 'application/json'
163
166
  )
164
167
 
165
- response.fetch("DATA").find { |acl| acl["path"] == full_path }
168
+ response.fetch('DATA').find { |acl| acl['path'] == full_path }
166
169
  end
167
170
 
168
171
  def access_rule_id
169
- access_rule&.fetch("id")
172
+ access_rule&.fetch('id')
170
173
  end
171
174
 
172
175
  def transfer_path
173
- "/v0.10/operation/endpoint/#{client.config.transfer_endpoint_id}"
176
+ "/v0.10/operation/endpoint/#{GlobusClient.config.transfer_endpoint_id}"
174
177
  end
175
178
 
176
179
  def access_path
177
- "/v0.10/endpoint/#{client.config.transfer_endpoint_id}/access"
180
+ "/v0.10/endpoint/#{GlobusClient.config.transfer_endpoint_id}/access"
178
181
  end
179
182
 
180
183
  def access_list_path
181
- "/v0.10/endpoint/#{client.config.transfer_endpoint_id}/access_list"
184
+ "/v0.10/endpoint/#{GlobusClient.config.transfer_endpoint_id}/access_list"
182
185
  end
183
186
  end
184
187
  end
@@ -3,36 +3,28 @@
3
3
  class GlobusClient
4
4
  # Lookup of a Globus identity ID
5
5
  class Identity
6
- def initialize(client)
7
- @client = client
8
- end
9
-
10
6
  # @param user_id [String] the username in the form of an email addresss
11
7
  # @return [Hash] id and status of Globus identity
12
8
  def get_identity(user_id)
13
- response = client.get(
14
- base_url: client.config.auth_url,
15
- path: "/v2/api/identities",
16
- params: {usernames: user_id}
9
+ response = GlobusClient.instance.get(
10
+ base_url: GlobusClient.config.auth_url,
11
+ path: '/v2/api/identities',
12
+ params: { usernames: user_id }
17
13
  )
18
14
 
19
- response["identities"].find { |id| id["username"] == user_id }
15
+ response['identities'].find { |id| id['username'] == user_id }
20
16
  end
21
17
 
22
18
  # @param user_id [String] the username in the form of an email addresss
23
19
  # @return [Boolean] whether the account has a valid status
24
20
  def valid?(user_id)
25
- ["used", "private", "unused"].include?(get_identity(user_id)["status"])
21
+ %w[used private unused].include?(get_identity(user_id)['status'])
26
22
  end
27
23
 
28
24
  # @param user_id [String] the username in the form of an email addresss
29
25
  # @return [String] UUID for Globus identity
30
26
  def get_identity_id(user_id)
31
- get_identity(user_id)["id"]
27
+ get_identity(user_id)['id']
32
28
  end
33
-
34
- private
35
-
36
- attr_reader :client
37
29
  end
38
30
  end
@@ -39,7 +39,7 @@ class GlobusClient
39
39
  when 502
40
40
  raise EndpointError, "Other error with endpoint: #{response.status} #{response.body}."
41
41
  when 503
42
- raise ServiceUnavailable, "The service is down for maintenance."
42
+ raise ServiceUnavailable, 'The service is down for maintenance.'
43
43
  else
44
44
  raise StandardError, "Unexpected response: #{response.status} #{response.body}."
45
45
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class GlobusClient
4
- VERSION = "0.13.0"
4
+ VERSION = '0.15.0'
5
5
  end
data/lib/globus_client.rb CHANGED
@@ -1,18 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "active_support/core_ext/module/delegation"
4
- require "active_support/core_ext/object/blank"
5
- require "faraday"
6
- require "faraday/retry"
7
- require "ostruct"
8
- require "singleton"
9
- require "zeitwerk"
3
+ require 'active_support/core_ext/module/delegation'
4
+ require 'active_support/core_ext/object/blank'
5
+ require 'faraday'
6
+ require 'faraday/retry'
7
+ require 'singleton'
8
+ require 'zeitwerk'
10
9
 
11
10
  # Load the gem's internal dependencies: use Zeitwerk instead of needing to manually require classes
12
11
  Zeitwerk::Loader.for_gem.setup
13
12
 
14
13
  # Client for interacting with the Globus API
15
- class GlobusClient
14
+ class GlobusClient # rubocop:disable Metrics/ClassLength
16
15
  include Singleton
17
16
 
18
17
  class << self
@@ -22,8 +21,10 @@ class GlobusClient
22
21
  # @param transfer_endpoint_id [String] the transfer API endpoint ID supplied by Globus
23
22
  # @param transfer_url [String] the transfer API URL
24
23
  # @param auth_url [String] the authentication API URL
25
- def configure(client_id:, client_secret:, uploads_directory:, transfer_endpoint_id:, transfer_url: default_transfer_url, auth_url: default_auth_url)
26
- instance.config = OpenStruct.new(
24
+ # rubocop:disable Metrics/ParameterLists
25
+ def configure(client_id:, client_secret:, uploads_directory:, transfer_endpoint_id:,
26
+ transfer_url: default_transfer_url, auth_url: default_auth_url)
27
+ instance.config = Config.new(
27
28
  # For the initial token, use a dummy value to avoid hitting any APIs
28
29
  # during configuration, allowing `with_token_refresh_when_unauthorized` to handle
29
30
  # auto-magic token refreshing. Why not immediately get a valid token? Our apps
@@ -34,7 +35,7 @@ class GlobusClient
34
35
  # NOTE: `nil` and blank string cannot be used as dummy values here as
35
36
  # they lead to a malformed request to be sent, which triggers an
36
37
  # exception not rescued by `with_token_refresh_when_unauthorized`
37
- token: "a temporary dummy token to avoid hitting the API before it is needed",
38
+ token: 'a temporary dummy token to avoid hitting the API before it is needed',
38
39
  client_id:,
39
40
  client_secret:,
40
41
  uploads_directory:,
@@ -45,16 +46,17 @@ class GlobusClient
45
46
 
46
47
  self
47
48
  end
49
+ # rubocop:enable Metrics/ParameterLists
48
50
 
49
51
  delegate :config, :disallow_writes, :delete_access_rule, :file_count, :list_files, :mkdir, :total_size,
50
- :user_valid?, :get_filenames, :has_files?, :delete, :get, :post, :put, to: :instance
52
+ :user_valid?, :get_filenames, :has_files?, :delete, :get, :post, :put, to: :instance
51
53
 
52
54
  def default_transfer_url
53
- "https://transfer.api.globusonline.org"
55
+ 'https://transfer.api.globusonline.org'
54
56
  end
55
57
 
56
58
  def default_auth_url
57
- "https://auth.globus.org"
59
+ 'https://auth.globus.org'
58
60
  end
59
61
  end
60
62
 
@@ -67,8 +69,8 @@ class GlobusClient
67
69
  def get(base_url:, path:, params: {}, content_type: nil)
68
70
  response = with_token_refresh_when_unauthorized do
69
71
  connection(base_url).get(path, params) do |request|
70
- request.headers["Authorization"] = "Bearer #{config.token}"
71
- request.headers["Content-Type"] = content_type if content_type
72
+ request.headers['Authorization'] = "Bearer #{config.token}"
73
+ request.headers['Content-Type'] = content_type if content_type
72
74
  end
73
75
  end
74
76
 
@@ -84,11 +86,11 @@ class GlobusClient
84
86
  # @param path [String] the path to the Globus API request
85
87
  # @param body [String] the body of the Globus API request
86
88
  # @param expected_response [#call] an expected response handler to allow short-circuiting the unexpected response
87
- def post(base_url:, path:, body:, expected_response: ->(resp) { false })
89
+ def post(base_url:, path:, body:, expected_response: ->(_resp) { false })
88
90
  response = with_token_refresh_when_unauthorized do
89
91
  connection(base_url).post(path) do |request|
90
- request.headers["Authorization"] = "Bearer #{config.token}"
91
- request.headers["Content-Type"] = "application/json"
92
+ request.headers['Authorization'] = "Bearer #{config.token}"
93
+ request.headers['Content-Type'] = 'application/json'
92
94
  request.body = body.to_json
93
95
  end
94
96
  end
@@ -107,8 +109,8 @@ class GlobusClient
107
109
  def put(base_url:, path:, body:)
108
110
  response = with_token_refresh_when_unauthorized do
109
111
  connection(base_url).put(path) do |request|
110
- request.headers["Authorization"] = "Bearer #{config.token}"
111
- request.headers["Content-Type"] = "application/json"
112
+ request.headers['Authorization'] = "Bearer #{config.token}"
113
+ request.headers['Content-Type'] = 'application/json'
112
114
  request.body = body.to_json
113
115
  end
114
116
  end
@@ -126,7 +128,7 @@ class GlobusClient
126
128
  def delete(base_url:, path:)
127
129
  response = with_token_refresh_when_unauthorized do
128
130
  connection(base_url).delete(path) do |request|
129
- request.headers["Authorization"] = "Bearer #{config.token}"
131
+ request.headers['Authorization'] = "Bearer #{config.token}"
130
132
  end
131
133
  end
132
134
 
@@ -138,7 +140,7 @@ class GlobusClient
138
140
  end
139
141
 
140
142
  def mkdir(...)
141
- Endpoint.new(self, ...).tap do |endpoint|
143
+ Endpoint.new(...).tap do |endpoint|
142
144
  endpoint.mkdir
143
145
  endpoint.allow_writes
144
146
  end
@@ -146,57 +148,59 @@ class GlobusClient
146
148
 
147
149
  def disallow_writes(...)
148
150
  Endpoint
149
- .new(self, ...)
151
+ .new(...)
150
152
  .disallow_writes
151
153
  end
152
154
 
153
155
  def delete_access_rule(...)
154
156
  Endpoint
155
- .new(self, ...)
157
+ .new(...)
156
158
  .delete_access_rule
157
159
  end
158
160
 
159
161
  # NOTE: Can't use the `...` (argument forwarding) operator here because we
160
162
  # want to route the keyword args to `Endpoint#new` and the block arg to
161
163
  # `Endpoint#list_files`
162
- def list_files(**keywords, &block)
164
+ def list_files(**keywords, &)
163
165
  Endpoint
164
- .new(self, **keywords)
165
- .list_files(&block)
166
+ .new(**keywords)
167
+ .list_files(&)
166
168
  end
167
169
 
168
170
  def file_count(...)
169
171
  Endpoint
170
- .new(self, ...)
172
+ .new(...)
171
173
  .list_files { |files| return files.count }
172
174
  end
173
175
 
174
176
  def total_size(...)
175
177
  Endpoint
176
- .new(self, ...)
178
+ .new(...)
177
179
  .list_files { |files| return files.sum(&:size) }
178
180
  end
179
181
 
180
182
  def get_filenames(...)
181
183
  Endpoint
182
- .new(self, ...)
184
+ .new(...)
183
185
  .list_files { |files| return files.map(&:name) }
184
186
  end
185
187
 
186
188
  def has_files?(...)
187
189
  Endpoint
188
- .new(self, ...)
190
+ .new(...)
189
191
  .has_files?
190
192
  end
191
193
 
192
194
  def user_valid?(...)
193
195
  Identity
194
- .new(self)
196
+ .new
195
197
  .valid?(...)
196
198
  end
197
199
 
198
200
  private
199
201
 
202
+ Config = Struct.new(:client_id, :auth_url, :client_secret, :transfer_endpoint_id, :transfer_url, :uploads_directory, :token, keyword_init: true)
203
+
200
204
  def connection(base_url)
201
205
  Faraday.new(url: base_url) do |conn|
202
206
  conn.request :retry, {
@@ -226,7 +230,7 @@ class GlobusClient
226
230
 
227
231
  # if unauthorized, token has likely expired. try to get a new token and then retry the same request(s).
228
232
  if response.status == 401
229
- config.token = Authenticator.token(config.client_id, config.client_secret, config.auth_url)
233
+ config.token = Authenticator.token
230
234
  response = yield
231
235
  end
232
236
 
metadata CHANGED
@@ -1,16 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: globus_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Collier
8
8
  - Laura Wrubel
9
9
  - Mike Giarlo
10
- autorequire:
11
10
  bindir: exe
12
11
  cert_chain: []
13
- date: 2023-09-27 00:00:00.000000000 Z
12
+ date: 2025-02-18 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: activesupport
@@ -19,9 +18,6 @@ dependencies:
19
18
  - - ">="
20
19
  - !ruby/object:Gem::Version
21
20
  version: '4.2'
22
- - - "<"
23
- - !ruby/object:Gem::Version
24
- version: '8'
25
21
  type: :runtime
26
22
  prerelease: false
27
23
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,9 +25,6 @@ dependencies:
29
25
  - - ">="
30
26
  - !ruby/object:Gem::Version
31
27
  version: '4.2'
32
- - - "<"
33
- - !ruby/object:Gem::Version
34
- version: '8'
35
28
  - !ruby/object:Gem::Dependency
36
29
  name: faraday
37
30
  requirement: !ruby/object:Gem::Requirement
@@ -74,90 +67,6 @@ dependencies:
74
67
  - - ">="
75
68
  - !ruby/object:Gem::Version
76
69
  version: '0'
77
- - !ruby/object:Gem::Dependency
78
- name: rake
79
- requirement: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - "~>"
82
- - !ruby/object:Gem::Version
83
- version: '13.0'
84
- type: :development
85
- prerelease: false
86
- version_requirements: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - "~>"
89
- - !ruby/object:Gem::Version
90
- version: '13.0'
91
- - !ruby/object:Gem::Dependency
92
- name: rspec
93
- requirement: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - "~>"
96
- - !ruby/object:Gem::Version
97
- version: '3.0'
98
- type: :development
99
- prerelease: false
100
- version_requirements: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - "~>"
103
- - !ruby/object:Gem::Version
104
- version: '3.0'
105
- - !ruby/object:Gem::Dependency
106
- name: standard
107
- requirement: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- version: '0'
112
- type: :development
113
- prerelease: false
114
- version_requirements: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- version: '0'
119
- - !ruby/object:Gem::Dependency
120
- name: rubocop-rspec
121
- requirement: !ruby/object:Gem::Requirement
122
- requirements:
123
- - - ">="
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
- type: :development
127
- prerelease: false
128
- version_requirements: !ruby/object:Gem::Requirement
129
- requirements:
130
- - - ">="
131
- - !ruby/object:Gem::Version
132
- version: '0'
133
- - !ruby/object:Gem::Dependency
134
- name: simplecov
135
- requirement: !ruby/object:Gem::Requirement
136
- requirements:
137
- - - ">="
138
- - !ruby/object:Gem::Version
139
- version: '0'
140
- type: :development
141
- prerelease: false
142
- version_requirements: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - ">="
145
- - !ruby/object:Gem::Version
146
- version: '0'
147
- - !ruby/object:Gem::Dependency
148
- name: webmock
149
- requirement: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - ">="
152
- - !ruby/object:Gem::Version
153
- version: '0'
154
- type: :development
155
- prerelease: false
156
- version_requirements: !ruby/object:Gem::Requirement
157
- requirements:
158
- - - ">="
159
- - !ruby/object:Gem::Version
160
- version: '0'
161
70
  description: This provides API interaction with the Globus API
162
71
  email:
163
72
  - aaron.collier@stanford.edu
@@ -167,11 +76,9 @@ executables: []
167
76
  extensions: []
168
77
  extra_rdoc_files: []
169
78
  files:
170
- - ".autoupdate/postupdate"
171
79
  - ".rspec"
172
80
  - ".rubocop.yml"
173
- - ".rubocop/custom.yml"
174
- - ".standard.yml"
81
+ - ".rubocop_todo.yml"
175
82
  - Gemfile
176
83
  - Gemfile.lock
177
84
  - LICENSE
@@ -192,7 +99,6 @@ metadata:
192
99
  source_code_uri: https://github.com/sul-dlss/globus_client
193
100
  changelog_uri: https://github.com/sul-dlss/globus_client/releases
194
101
  rubygems_mfa_required: 'true'
195
- post_install_message:
196
102
  rdoc_options: []
197
103
  require_paths:
198
104
  - lib
@@ -200,15 +106,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
200
106
  requirements:
201
107
  - - ">="
202
108
  - !ruby/object:Gem::Version
203
- version: 2.6.0
109
+ version: 3.1.0
204
110
  required_rubygems_version: !ruby/object:Gem::Requirement
205
111
  requirements:
206
112
  - - ">="
207
113
  - !ruby/object:Gem::Version
208
114
  version: '0'
209
115
  requirements: []
210
- rubygems_version: 3.4.19
211
- signing_key:
116
+ rubygems_version: 3.6.3
212
117
  specification_version: 4
213
118
  summary: Interface for interacting with the Globus API.
214
119
  test_files: []
@@ -1,19 +0,0 @@
1
- #!/bin/bash --login
2
-
3
- # This script is called by our weekly dependency update job in Jenkins after updating Ruby and other deps
4
-
5
- # Switch to Ruby 3.1 for GlobusClient (3.0 is default in Jenkinsfile)
6
- rvm use 3.1.2@globus_client --create &&
7
- gem install bundler &&
8
- bundle install --gemfile Gemfile
9
-
10
- standardrb --fix > globus_client_standard.txt
11
-
12
- retVal=$?
13
-
14
- git commit -am "Update to latest standard style guide"
15
-
16
- if [ $retVal -ne 0 ]; then
17
- echo "ERROR UPDATING RUBY TO STANDARD STYLE (globus_client)"
18
- cat globus_client_standard.txt
19
- fi
data/.rubocop/custom.yml DELETED
@@ -1,80 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: 3.1
3
- DisplayCopNames: true
4
- SuggestExtensions: false
5
- Exclude:
6
- - bin/**
7
- - vendor/bundle/**/*
8
-
9
- # Per team developer playbook
10
- RSpec/MultipleMemoizedHelpers:
11
- Enabled: false
12
-
13
- RSpec/BeEq: # new in 2.9.0
14
- Enabled: true
15
- RSpec/BeNil: # new in 2.9.0
16
- Enabled: true
17
- RSpec/ChangeByZero: # new in 2.11
18
- Enabled: true
19
- RSpec/ClassCheck: # new in 2.13
20
- Enabled: true
21
- RSpec/ExcessiveDocstringSpacing: # new in 2.5
22
- Enabled: true
23
- RSpec/IdenticalEqualityAssertion: # new in 2.4
24
- Enabled: true
25
- RSpec/NoExpectationExample: # new in 2.13
26
- Enabled: true
27
- RSpec/SortMetadata: # new in 2.14
28
- Enabled: true
29
- RSpec/SubjectDeclaration: # new in 2.5
30
- Enabled: true
31
- RSpec/VerifiedDoubleReference: # new in 2.10.0
32
- Enabled: true
33
- Capybara/NegationMatcher: # new in 2.14
34
- Enabled: true
35
- Capybara/SpecificActions: # new in 2.14
36
- Enabled: true
37
- Capybara/SpecificFinders: # new in 2.13
38
- Enabled: true
39
- Capybara/SpecificMatcher: # new in 2.12
40
- Enabled: true
41
- FactoryBot/ConsistentParenthesesStyle: # new in 2.14
42
- Enabled: true
43
- FactoryBot/SyntaxMethods: # new in 2.7
44
- Enabled: true
45
- RSpec/Rails/AvoidSetupHook: # new in 2.4
46
- Enabled: true
47
- RSpec/Rails/HaveHttpStatus: # new in 2.12
48
- Enabled: true
49
- RSpec/Rails/InferredSpecType: # new in 2.14
50
- Enabled: true
51
- Capybara/MatchStyle: # new in 2.17
52
- Enabled: true
53
- FactoryBot/AssociationStyle: # new in 2.23
54
- Enabled: true
55
- FactoryBot/FactoryAssociationWithStrategy: # new in 2.23
56
- Enabled: true
57
- FactoryBot/FactoryNameStyle: # new in 2.16
58
- Enabled: true
59
- FactoryBot/RedundantFactoryOption: # new in 2.23
60
- Enabled: true
61
- RSpec/BeEmpty: # new in 2.20
62
- Enabled: true
63
- RSpec/ContainExactly: # new in 2.19
64
- Enabled: true
65
- RSpec/DuplicatedMetadata: # new in 2.16
66
- Enabled: true
67
- RSpec/IndexedLet: # new in 2.20
68
- Enabled: false # Sometimes indices *are* meaningful
69
- RSpec/MatchArray: # new in 2.19
70
- Enabled: true
71
- RSpec/PendingWithoutReason: # new in 2.16
72
- Enabled: true
73
- RSpec/RedundantAround: # new in 2.19
74
- Enabled: true
75
- RSpec/SkipBlockInsideExample: # new in 2.19
76
- Enabled: true
77
- RSpec/Rails/MinitestAssertions: # new in 2.17
78
- Enabled: true
79
- RSpec/Rails/TravelAround: # new in 2.19
80
- Enabled: true
data/.standard.yml DELETED
@@ -1 +0,0 @@
1
- parallel: true