Class: PublicIp::Service::Simple

Inherits:
Object
  • Object
show all
Defined in:
lib/public_ip/service/simple.rb

Direct Known Subclasses

JsonType, MatchedExpression, ParsedHTML, Plain

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#headersObject (readonly)

Returns the value of attribute headers.



12
13
14
# File 'lib/public_ip/service/simple.rb', line 12

def headers
  @headers
end

#uriObject (readonly)

Returns the value of attribute uri.



11
12
13
# File 'lib/public_ip/service/simple.rb', line 11

def uri
  @uri
end

Class Method Details

.headersObject



30
31
32
# File 'lib/public_ip/service/simple.rb', line 30

def self.headers
  {}
end

.ipObject



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/public_ip/service/simple.rb', line 14

def self.ip
  response = perform_request

  ip_address = extract_ip(response)

  unless IPAddress.valid?(ip_address)
    raise PublicIp::Service::InvalidIpAddress, "#{ip_address} is not a valid ip address"
  end

  ip_address
end

.perform_requestObject



45
46
47
48
49
50
51
52
# File 'lib/public_ip/service/simple.rb', line 45

def self.perform_request
  Timeout.timeout(PublicIp::TIMEOUT_IN_SECS, PublicIp::Service::TimedOut) do
    request = Net::HTTP::Get.new(uri, headers)
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = (uri.scheme == 'https')
    http.request(request)
  end
end

.symbolObject

Perform a demodulize and underscore (as in Rails)



35
36
37
38
39
40
41
42
43
# File 'lib/public_ip/service/simple.rb', line 35

def self.symbol
  symbol = name.match(/(?:.*)::(.*)$/)[1]
  symbol.gsub!(/::/, '/')
  symbol.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
  symbol.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
  symbol.tr!('-', '_')
  symbol.downcase!
  symbol.to_sym
end

.uriObject



26
27
28
# File 'lib/public_ip/service/simple.rb', line 26

def self.uri
  raise 'Not implemented'
end