Class: Homebase
- Inherits:
-
Object
show all
- Defined in:
- lib/homebase.rb,
lib/homebase/version.rb
Defined Under Namespace
Classes: Error, ParseError, RequestError
Constant Summary
collapse
- API_PREFIX =
'https://api.digitalocean.com/v2'
- PUBLIC_IP_URI =
URI('https://api.ipify.org/?format=text')
- DOMAIN_RECORDS_FORMAT =
"#{API_PREFIX}/domains/%<domain_name>s/records"
- DOMAIN_RECORD_FORMAT =
"#{API_PREFIX}/domains/%<domain_name>s/records/%<record_id>d"
- VERSION =
'0.1.1'
Instance Method Summary
collapse
Instance Method Details
#get_record_by_name(domain_name, record_name, token) ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/homebase.rb', line 31
def get_record_by_name(domain_name, record_name, token)
uri = URI(DOMAIN_RECORDS_FORMAT % {domain_name: domain_name})
req = Net::HTTP::Get.new(uri)
req['Content-Type'] = 'application/json'
req['Authorization'] = "Bearer #{token}"
body = Net::HTTP.start(uri.host, uri.port,
use_ssl: uri.scheme == 'https') do |http|
res = http.request req
raise RequestError, "Error - #{res.code}", caller if res.code != '200'
res.body
end
begin
records = JSON.parse(body, symbolize_names: true)[:domain_records]
rescue JSON::ParserError
raise ParseError, 'Invalid JSON Response', caller
end
records.find { |record| record[:name] == record_name }
end
|
#public_ip(opts = {}) ⇒ Object
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/homebase.rb', line 17
def public_ip(opts = {})
return @public_ip if @public_ip && !opts[:force]
res = Net::HTTP.get_response(PUBLIC_IP_URI)
raise(RequestError, "Invalid IP response #{res.code}",
caller) if res.code != '200'
ip = res.body.strip
begin
IPAddr.new(ip)
rescue IPAddr::InvalidAddressError
raise ParseError, 'Invalid Public IP', caller
end
@public_ip = ip
end
|
#update_record(domain_name, record_id, data, token) ⇒ Object
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/homebase.rb', line 51
def update_record(domain_name, record_id, data, token)
uri = URI(DOMAIN_RECORD_FORMAT % {domain_name: domain_name,
record_id: record_id})
req = Net::HTTP::Put.new(uri)
req['Content-Type'] = 'application/json'
req['Authorization'] = "Bearer #{token}"
req.body = { data: data }.to_json
Net::HTTP.start(uri.host, uri.port,
use_ssl: uri.scheme == 'https') do |http|
res = http.request req
raise RequestError, "Error - #{res.code}", caller if res.code != '200'
res
end
end
|
#update_record_with_public_ip(domain_name, record_name, token) ⇒ Object
66
67
68
69
70
|
# File 'lib/homebase.rb', line 66
def update_record_with_public_ip(domain_name, record_name, token)
record = get_record_by_name(domain_name, record_name, token)
result = update_record(domain_name, record[:id], public_ip, token)
{ result: result, ip: public_ip }
end
|