Class: Reverie
- Inherits:
-
Object
- Object
- Reverie
- Defined in:
- lib/reverie/version.rb,
lib/reverie/reverie.rb
Overview
Reverie version
Constant Summary collapse
- DH_URI =
URI 'https://api.dreamhost.com/'
- IP_URI =
URI 'http://myexternalip.com/raw'
- CONF =
Configliere::DEFAULT_CONFIG_LOCATION[:user_config][:reverie]
- OPENSSL_OPTIONS =
{ use_ssl: true, ssl_version: :TLSv1, verify_mode: OpenSSL::SSL::VERIFY_PEER }
- VERSION =
'1.0.4'
Instance Attribute Summary collapse
-
#args ⇒ Object
Returns the value of attribute args.
-
#conf ⇒ Object
Returns the value of attribute conf.
-
#log ⇒ Object
Returns the value of attribute log.
Class Method Summary collapse
Instance Method Summary collapse
- #get_ip ⇒ Object
- #init_args ⇒ Object
- #init_conf ⇒ Object
- #init_log ⇒ Object
-
#initialize ⇒ Reverie
constructor
A new instance of Reverie.
- #replace_record(record, ip) ⇒ Object
- #settings ⇒ Object
- #update_dns ⇒ Object
Constructor Details
#initialize ⇒ Reverie
Returns a new instance of Reverie.
43 44 45 46 47 48 49 |
# File 'lib/reverie/reverie.rb', line 43 def initialize Settings.resolve! init_conf init_log init_args end |
Instance Attribute Details
#args ⇒ Object
Returns the value of attribute args.
18 19 20 |
# File 'lib/reverie/reverie.rb', line 18 def args @args end |
#conf ⇒ Object
Returns the value of attribute conf.
18 19 20 |
# File 'lib/reverie/reverie.rb', line 18 def conf @conf end |
#log ⇒ Object
Returns the value of attribute log.
18 19 20 |
# File 'lib/reverie/reverie.rb', line 18 def log @log end |
Class Method Details
Instance Method Details
#get_ip ⇒ Object
110 111 112 113 114 115 116 117 |
# File 'lib/reverie/reverie.rb', line 110 def get_ip log.debug "connecting to #{IP_URI}" ip = Net::HTTP.get_response(IP_URI).body.strip log.debug "got #{ip}" ip if ip =~ Resolv::IPv4::Regex rescue Net::ReadTimeout log.warn :timeout, 'IP Lookup', IP_URI end |
#init_args ⇒ Object
51 52 53 54 55 56 57 |
# File 'lib/reverie/reverie.rb', line 51 def init_args @args = { key: Settings[:key], record: Settings[:record], format: 'yaml' } end |
#init_conf ⇒ Object
59 60 61 62 |
# File 'lib/reverie/reverie.rb', line 59 def init_conf @conf = Settings.delete('conf') || CONF Settings.read conf end |
#init_log ⇒ Object
64 65 66 67 68 |
# File 'lib/reverie/reverie.rb', line 64 def init_log @log = Logger.new(Settings.log || STDOUT) log.level = Settings.delete('debug') ? Logger::DEBUG : Logger::INFO Settings.delete('log') unless Settings.log end |
#replace_record(record, ip) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/reverie/reverie.rb', line 89 def replace_record(record, ip) return false unless record && ip status, res = api_call :list_records return false unless status == 'success' res.detect { |r| r['record'] == record && r['editable'] == 1 }.tap do |r| api_call :remove_record, record: record, type: r['type'], value: r['value'] if r end status, _ = api_call :add_record, record: record, type: 'A', value: ip, comment: "Reverie (#{ Time.now })" status == 'success' end |
#settings ⇒ Object
70 71 72 |
# File 'lib/reverie/reverie.rb', line 70 def settings Settings end |
#update_dns ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/reverie/reverie.rb', line 74 def update_dns last_update = Time.now - (Settings[:updated_at] || Time.mktime(0)) if (last_update < 900 and log.debug "too soon, updated #{last_update}s ago") || ((ip = get_ip).nil? and log.debug "get_ip failed") || (ip == Settings[:ip] and log.debug "not updating #{Settings[:record]}") || (!replace_record Settings[:record], ip and log.debug "replace_record failed") return end Settings.merge! ip: ip, updated_at: Time.now Settings.save! conf log.info "#{Settings[:record]} updated to #{ip}" end |