Class: BundleSafeUpdate::RubygemsApi
- Inherits:
-
Object
- Object
- BundleSafeUpdate::RubygemsApi
show all
- Defined in:
- lib/bundle_safe_update/rubygems_api.rb
Defined Under Namespace
Classes: ApiError, GemInfo
Constant Summary
collapse
- VERSIONS_API_BASE =
'https://rubygems.org/api/v1/versions'
- OWNERS_API_BASE =
'https://rubygems.org/api/v1/gems'
- GEM_API_BASE =
'https://rubygems.org/api/v1/gems'
- SECONDS_PER_DAY =
86_400
- HTTP_OPEN_TIMEOUT =
10
- HTTP_READ_TIMEOUT =
30
Instance Method Summary
collapse
Constructor Details
#initialize(http_client: nil) ⇒ RubygemsApi
Returns a new instance of RubygemsApi.
20
21
22
|
# File 'lib/bundle_safe_update/rubygems_api.rb', line 20
def initialize(http_client: nil)
@http_client = http_client
end
|
Instance Method Details
#fetch_gem_info(gem_name) ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/bundle_safe_update/rubygems_api.rb', line 63
def fetch_gem_info(gem_name)
uri = URI("#{GEM_API_BASE}/#{gem_name}.json")
response = perform_request(uri)
return nil unless response.is_a?(Net::HTTPSuccess)
data = JSON.parse(response.body)
GemInfo.new(
downloads: data['downloads'],
version_created_at: parse_time(data['version_created_at'])
)
rescue JSON::ParserError
nil
end
|
#fetch_owners(gem_name) ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/bundle_safe_update/rubygems_api.rb', line 50
def fetch_owners(gem_name)
uri = URI("#{OWNERS_API_BASE}/#{gem_name}/owners.json")
response = perform_request(uri)
return [] unless response.is_a?(Net::HTTPSuccess)
JSON
.parse(response.body)
.filter_map { |owner| owner['handle'] }
rescue JSON::ParserError
[]
end
|
#fetch_version_info(gem_name, version) ⇒ Object
24
25
26
27
|
# File 'lib/bundle_safe_update/rubygems_api.rb', line 24
def fetch_version_info(gem_name, version)
versions = fetch_versions(gem_name)
versions.find { |v| v['number'] == version }
end
|
#fetch_versions(gem_name) ⇒ Object
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/bundle_safe_update/rubygems_api.rb', line 29
def fetch_versions(gem_name)
uri = URI("#{VERSIONS_API_BASE}/#{gem_name}.json")
response = perform_request(uri)
unless response.is_a?(Net::HTTPSuccess)
raise ApiError, "Failed to fetch versions for #{gem_name}: #{response.code}"
end
JSON.parse(response.body)
rescue JSON::ParserError => e
raise ApiError, "Invalid JSON response for #{gem_name}: #{e.message}"
end
|
#version_age_days(gem_name, version) ⇒ Object
42
43
44
45
46
47
48
|
# File 'lib/bundle_safe_update/rubygems_api.rb', line 42
def version_age_days(gem_name, version)
info = fetch_version_info(gem_name, version)
return nil unless info
created_at = Time.parse(info['created_at'])
((Time.now - created_at) / SECONDS_PER_DAY).to_i
end
|