class Aquatone::Detector

Attributes

host[R]
resource[R]

Public Class Methods

descendants() click to toggle source
# File lib/aquatone/detector.rb, line 18
def self.descendants
  detectors = ObjectSpace.each_object(Class).select { |klass| klass < self }
  detectors.sort { |x, y| x.meta[:service] <=> y.meta[:service] }
end
meta() click to toggle source
# File lib/aquatone/detector.rb, line 9
def self.meta
  @meta || fail(MetadataNotSetError, "Metadata has not been set")
end
meta=(meta) click to toggle source
# File lib/aquatone/detector.rb, line 13
def self.meta=(meta)
  validate_metadata(meta)
  @meta = meta
end
new(host, resource) click to toggle source
# File lib/aquatone/detector.rb, line 28
def initialize(host, resource)
  @host     = host
  @resource = resource
end
sluggified_name() click to toggle source
# File lib/aquatone/detector.rb, line 23
def self.sluggified_name
  return meta[:slug].downcase if meta[:slug]
  meta[:service].strip.downcase.gsub(/[^a-z0-9]+/, '-').gsub("--", "-")
end

Protected Class Methods

validate_metadata(meta) click to toggle source
# File lib/aquatone/detector.rb, line 85
def self.validate_metadata(meta)
  fail InvalidMetadataError, "Metadata is not a hash" unless meta.is_a?(Hash)
  fail InvalidMetadataError, "Metadata is empty" if meta.empty?
  fail InvalidMetadataError, "Metadata is missing key: service" unless meta.key?(:service)
  fail InvalidMetadataError, "Metadata is missing key: service_website" unless meta.key?(:service_website)
  fail InvalidMetadataError, "Metadata is missing key: author" unless meta.key?(:author)
  fail InvalidMetadataError, "Metadata is missing key: description" unless meta.key?(:description)
end

Public Instance Methods

positive?() click to toggle source
# File lib/aquatone/detector.rb, line 37
def positive?
  run
rescue
  false
end
run() click to toggle source
# File lib/aquatone/detector.rb, line 33
def run
  fail NotImplementedError
end

Protected Instance Methods

apex_resource?() click to toggle source
# File lib/aquatone/detector.rb, line 49
def apex_resource?
  resource.is_a?(Resolv::DNS::Resource::IN::A)
end
cname_resource?() click to toggle source
# File lib/aquatone/detector.rb, line 45
def cname_resource?
  resource.is_a?(Resolv::DNS::Resource::IN::CNAME)
end
failure(message) click to toggle source
# File lib/aquatone/detector.rb, line 81
def failure(message)
  fail Error, message
end
get_request(uri, options={}) click to toggle source
# File lib/aquatone/detector.rb, line 57
def get_request(uri, options={})
  options = {
    :timeout => 10
  }.merge(options)
  Aquatone::HttpClient.get(uri, options)
end
post_request(uri, body=nil, options={}) click to toggle source
# File lib/aquatone/detector.rb, line 64
def post_request(uri, body=nil, options={})
  options = {
    :body    => body,
    :timeout => 10
  }.merge(options)
  Aquatone::HttpClient.post(uri, options)
end
random_sleep(seconds) click to toggle source
# File lib/aquatone/detector.rb, line 76
def random_sleep(seconds)
  random_sleep = ((1 - (rand(30) * 0.01)) * seconds.to_i)
  sleep(random_sleep)
end
resource_value() click to toggle source
# File lib/aquatone/detector.rb, line 53
def resource_value
  cname_resource? ? resource.name.to_s : resource.address.to_s
end
url_escape(string) click to toggle source
# File lib/aquatone/detector.rb, line 72
def url_escape(string)
  CGI.escape(string)
end