Skip to content

Commit 41fcd88

Browse files
authored
Merge pull request #305 from github/hosom/reuse-github-rest-connections
Reuse GitHub organization data and REST connections
2 parents 90a6ac6 + 684adbf commit 41fcd88

9 files changed

Lines changed: 25 additions & 4 deletions

File tree

Gemfile.lock

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
PATH
22
remote: .
33
specs:
4-
entitlements-github-plugin (1.2.4)
4+
entitlements-github-plugin (1.2.5)
55
contracts (~> 0.17.0)
66
faraday (~> 2.0)
7+
faraday-net_http_persistent (~> 2.3)
78
faraday-retry (~> 2.0)
89
octokit (~> 4.25)
910
retryable (~> 3.0, >= 3.0.5)
@@ -53,6 +54,9 @@ GEM
5354
logger
5455
faraday-net_http (3.4.4)
5556
net-http (~> 0.5)
57+
faraday-net_http_persistent (2.3.1)
58+
faraday (~> 2.5)
59+
net-http-persistent (>= 4.0.4, < 5)
5660
faraday-retry (2.4.0)
5761
faraday (~> 2.0)
5862
hashdiff (1.2.1)
@@ -66,6 +70,8 @@ GEM
6670
mutex_m (0.3.0)
6771
net-http (0.9.1)
6872
uri (>= 0.11.1)
73+
net-http-persistent (4.0.8)
74+
connection_pool (>= 2.2.4, < 4)
6975
net-ldap (0.20.0)
7076
base64
7177
ostruct

entitlements-github-plugin.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
1818

1919
s.add_dependency "contracts", "~> 0.17.0"
2020
s.add_dependency "faraday", "~> 2.0"
21+
s.add_dependency "faraday-net_http_persistent", "~> 2.3"
2122
s.add_dependency "faraday-retry", "~> 2.0"
2223
s.add_dependency "octokit", "~> 4.25"
2324
s.add_dependency "retryable", "~> 3.0", ">= 3.0.5"

lib/entitlements/backend/github_org/provider.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ def role_name(role_identifier)
104104
# Returns an Entitlements::Models::Group object.
105105
Contract String => Entitlements::Models::Group
106106
def role_to_group(role)
107-
members = github.org_members.keys.select { |username| github.org_members[username] == role }
107+
org_members = github.org_members
108+
members = org_members.select { |_, member_role| member_role == role }.keys
108109
Entitlements::Models::Group.new(
109110
dn: role_dn(role),
110111
members: Set.new(members),

lib/entitlements/service/github.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
require_relative "../config/retry"
44

5+
require "faraday/net_http_persistent"
56
require "net/http"
67
require "octokit"
78
require "uri"
@@ -169,6 +170,9 @@ def invalidate_org_members_predictive_cache
169170
def octokit
170171
@octokit ||= begin
171172
client = Octokit::Client.new(access_token: token)
173+
middleware = Octokit::Default.middleware.dup
174+
middleware.adapter :net_http_persistent
175+
client.middleware = middleware
172176
client.api_endpoint = addr if addr
173177
client.auto_paginate = true
174178
client.per_page = 100

lib/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
module Entitlements
44
module Version
5-
VERSION = "1.2.4"
5+
VERSION = "1.2.5"
66
end
77
end

spec/unit/entitlements/backend/github_org/provider_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434

3535
it "pulls the role name from the distinguished name" do
3636
allow(subject).to receive(:github).and_return(github)
37-
allow(github).to receive(:org_members).and_return(members_and_roles)
37+
expect(github).to receive(:org_members).once.and_return(members_and_roles)
3838
result = subject.read("member")
3939
expect(result).to be_a_kind_of(Entitlements::Models::Group)
4040
expect(result.member_strings).to eq(member_strings_set)

spec/unit/entitlements/service/github_spec.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,15 @@
2929
end
3030
end
3131

32+
describe "#octokit" do
33+
it "uses persistent HTTP connections" do
34+
client = subject.send(:octokit)
35+
36+
expect(client.middleware.adapter.klass).to eq(Faraday::Adapter::NetHttpPersistent)
37+
expect(subject.send(:octokit)).to equal(client)
38+
end
39+
end
40+
3241
describe "#org_members" do
3342
let(:members_and_roles) do
3443
{
8.5 KB
Binary file not shown.
27 KB
Binary file not shown.

0 commit comments

Comments
 (0)