Class: FeatureMap::Private::CodeCov
- Inherits:
-
Object
- Object
- FeatureMap::Private::CodeCov
show all
- Defined in:
- lib/feature_map/private/code_cov.rb
Overview
This class is responsible for all interactions with the CodeCov platform.
Defined Under Namespace
Classes: ApiError, ConfigurationError
Constant Summary
collapse
- CODE_COV_API_BASE_URL =
'https://api.codecov.io/api/v2/'
Class Method Summary
collapse
Class Method Details
.build_coverage_status(commit_details) ⇒ Object
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/feature_map/private/code_cov.rb', line 28
def self.build_coverage_status(commit_details)
file_coverage_details = commit_details.dig('report', 'files')
raise ApiError, 'No file coverage information retruned from CodeCov.' unless file_coverage_details
file_coverage_details.each_with_object({}) do |file_coverage, coverage_stats|
file_path = file_coverage['name']
file_coverage_stats = file_coverage['totals']
next if !file_path || !file_coverage_stats
coverage_stats[file_path] = {
'lines' => file_coverage_stats['lines'],
'hits' => file_coverage_stats['hits'],
'misses' => file_coverage_stats['misses']
}
end
end
|
.conn ⇒ Object
62
63
64
65
66
67
|
# File 'lib/feature_map/private/code_cov.rb', line 62
def self.conn
@conn ||= Faraday.new(url: CODE_COV_API_BASE_URL) do |f|
f.request :json
f.response :json
end
end
|
.fetch_commit_details(commit_sha, api_token) ⇒ Object
22
23
24
25
26
|
# File 'lib/feature_map/private/code_cov.rb', line 22
def self.fetch_commit_details(commit_sha, api_token)
conn.get("#{service}/#{owner}/repos/#{repo}/commits/#{commit_sha}",
{},
{ 'Authorization' => "Bearer #{api_token}" })
end
|
.fetch_coverage_stats(commit_sha, api_token) ⇒ Object
15
16
17
18
19
20
|
# File 'lib/feature_map/private/code_cov.rb', line 15
def self.fetch_coverage_stats(commit_sha, api_token)
commit_details_response = fetch_commit_details(commit_sha, api_token)
raise ApiError, "Failed to retrieve CodeCov stats for commit #{commit_sha}. Response: #{commit_details_response.status} - #{commit_details_response.body}" unless commit_details_response.success?
build_coverage_status(commit_details_response.body)
end
|
.owner ⇒ Object
52
53
54
55
|
# File 'lib/feature_map/private/code_cov.rb', line 52
def self.owner
Private.configuration.code_cov['owner'] ||
(raise ConfigurationError, 'Missing CodeCov configuration: owner')
end
|
.repo ⇒ Object
57
58
59
60
|
# File 'lib/feature_map/private/code_cov.rb', line 57
def self.repo
Private.configuration.code_cov['repo'] ||
(raise ConfigurationError, 'Missing CodeCov configuration: repo')
end
|
.service ⇒ Object
TODO: Move these values to config.
47
48
49
50
|
# File 'lib/feature_map/private/code_cov.rb', line 47
def self.service
Private.configuration.code_cov['service'] ||
(raise ConfigurationError, 'Missing CodeCov configuration: service')
end
|