Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 24 additions & 4 deletions lib/jekyll-github-metadata/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ def method_missing(method_name, *args, &block)
method = method_name.to_s
if accepts_client_method?(method_name)
key = cache_key(method_name, args)
Jekyll::GitHubMetadata.log :debug, "Calling @client.#{method}(#{args.map(&:inspect).join(", ")})"
GitHubMetadata.log :debug, "Calling @client.#{method}(#{args.map(&:inspect).join(", ")})"
cache[key] ||= save_from_errors { @client.public_send(method_name, *args, &block) }
elsif @client.respond_to?(method_name)
raise InvalidMethodError, "#{method_name} is not whitelisted on #{inspect}"
Expand All @@ -68,24 +68,44 @@ def method_missing(method_name, *args, &block)
end

def save_from_errors(default = false)
unless internet_connected?
GitHubMetadata.log :warn, "No internet connection. GitHub metadata may be missing or incorrect."
return default
end

yield @client
rescue Octokit::Unauthorized
raise BadCredentialsError, "The GitHub API credentials you provided aren't valid."
rescue Faraday::Error::ConnectionFailed, Octokit::TooManyRequests => e
Jekyll::GitHubMetadata.log :warn, e.message
GitHubMetadata.log :warn, e.message
default
rescue Octokit::NotFound
default
end

def inspect
"#<#{self.class.name} @client=#{client_inspect}>"
"#<#{self.class.name} @client=#{client_inspect} @internet_connected=#{internet_connected?}>"
end

def authenticated?
[email protected]_token.to_s.empty?
end

def internet_connected?
return @internet_connected if defined?(@internet_connected)

require "resolv"
begin
Resolv::DNS.open do |dns|
dns.timeouts = 2
dns.getaddress("api.github.com")
end
@internet_connected = true
rescue Resolv::ResolvError
@internet_connected = false
end
end

private

def client_inspect
Expand All @@ -102,7 +122,7 @@ def pluck_auth_method
elsif !ENV["NO_NETRC"] && File.exist?(File.join(ENV["HOME"], ".netrc")) && safe_require("netrc")
{ :netrc => true }
else
Jekyll::GitHubMetadata.log :warn, "No GitHub API authentication could be found." \
GitHubMetadata.log :warn, "No GitHub API authentication could be found." \
" Some fields may be missing or have incorrect data."
{}.freeze
end
Expand Down
2 changes: 1 addition & 1 deletion spec/client_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
it "raises an error if an Octokit::Client method is called that's not whitelisted" do
expect(lambda do
subject.combined_status("jekyll/github-metadata", "refs/master")
end).to raise_error(described_class::InvalidMethodError, "combined_status is not whitelisted on #<Jekyll::GitHubMetadata::Client @client=#<Octokit::Client (authenticated)>>")
end).to raise_error(described_class::InvalidMethodError, "combined_status is not whitelisted on #<Jekyll::GitHubMetadata::Client @client=#<Octokit::Client (authenticated)> @internet_connected=true>")
end

it "can check if it's authenticated" do
Expand Down