globus_client 0.13.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
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