Class: Lita::Handlers::WebTitle

Inherits:
Handler
  • Object
show all
Defined in:
lib/lita/handlers/web_title.rb

Constant Summary collapse

URI_PROTOCOLS =
%w( http https )

Instance Method Summary collapse

Instance Method Details

#find_title(html) ⇒ Object



42
43
44
45
46
47
48
49
# File 'lib/lita/handlers/web_title.rb', line 42

def find_title(html)
  title_tag = Nokogiri::HTML(html).css('title').first
  return if title_tag.nil?

  title_tag.text
    .gsub(/(\A\s+|\s+\Z)/, '')
    .gsub(/\s+/, ' ')
end

#parse_uri(uriString) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/lita/handlers/web_title.rb', line 27

def parse_uri(uriString)
  httpRequest = http.get(uriString)
  if httpRequest.status == 200 then
    return unless httpRequest.headers['Content-Type'] =~ %r{text/x?html}
    find_title(httpRequest.body)
  elsif [300, 301, 302, 303].include? httpRequest.status then
    parse_uri httpRequest.headers["Location"]
  else
    nil
  end
rescue Exception => msg
  log.error("lita-web-title: Exception attempting to load URL: #{msg}")
  nil
end

#parse_uri_request(request) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/lita/handlers/web_title.rb', line 13

def parse_uri_request(request)
  requestUri = URI::extract(request.message.body, URI_PROTOCOLS).first
  if config.ignore_patterns then
    if config.ignore_patterns.kind_of?(String) then
      Array(config.ignore_patterns)
    end
    config.ignore_patterns.each do |pattern|
      return if requestUri.match(%r{#{pattern}})
    end
  end
  result = parse_uri(requestUri)
  request.reply(result.delete("\n").strip) unless result.nil?
end