Class: LinkOracle::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/link_oracle/request.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url) ⇒ Request

Returns a new instance of Request.



5
6
7
# File 'lib/link_oracle/request.rb', line 5

def initialize(url)
  @url = url
end

Instance Attribute Details

#urlObject (readonly)

Returns the value of attribute url.



3
4
5
# File 'lib/link_oracle/request.rb', line 3

def url
  @url
end

Instance Method Details

#encode_url(url) ⇒ Object



33
34
35
36
# File 'lib/link_oracle/request.rb', line 33

def encode_url(url)
  return if url.nil? || url.empty?
  URI.encode(url)
end

#error_classObject



60
61
62
63
64
65
66
# File 'lib/link_oracle/request.rb', line 60

def error_class
  return if response.response_code == 200
  {
    404 => PageNotFound,
    403 => PermissionDenied
  }[response.response_code] || BadThingsHappened
end

#parsed_dataObject



68
69
70
71
72
# File 'lib/link_oracle/request.rb', line 68

def parsed_data
  ::Nokogiri::HTML.parse(response.body_str)
rescue
  raise ParsingError
end

#parsed_urlObject



9
10
11
12
13
# File 'lib/link_oracle/request.rb', line 9

def parsed_url
  validate_url
  validate_request
  results
end

#requestObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/link_oracle/request.rb', line 42

def request
  c = ::Curl::Easy.new(url)
  c.follow_location = true
  c.max_redirects = 100 #there will never ever be this many redirects unless it's looping. #sorrynotsorry
  c.headers["User-Agent"] = "link_oracle#{LinkOracle::VERSION}"
  begin
    c.perform
  rescue ::Curl::Err::SSLConnectError
    c.ssl_version = 3
    c.perform
  end
  c
rescue Curl::Err::HostResolutionError
  raise ServerNotFound
rescue Curl::Err::SSLCACertificateError, Curl::Err::SSLPeerCertificateError
  raise BadSslCertificate
end

#responseObject



38
39
40
# File 'lib/link_oracle/request.rb', line 38

def response
  @response ||= request
end

#resultsObject



15
16
17
18
19
20
# File 'lib/link_oracle/request.rb', line 15

def results
  {
    parsed_data: parsed_data,
    url: url
  }
end

#validate_requestObject



22
23
24
# File 'lib/link_oracle/request.rb', line 22

def validate_request
  raise error_class if error_class
end

#validate_urlObject



26
27
28
29
30
31
# File 'lib/link_oracle/request.rb', line 26

def validate_url
  encoded_url = encode_url(url)
  !!URI.parse(encoded_url)
rescue URI::InvalidURIError
  raise InvalidUrl, url
end