class Lita::Handlers::RedditImage

Constants

VERSION

Public Instance Methods

fetch(response) click to toggle source
# File lib/lita/handlers/reddit_image.rb, line 17
def fetch(response)
  (subreddit, query) = response.matches.to_a.flatten

  subreddit.strip!
  query.strip!

  json = JSON.parse(RestClient.get(reddit_url(subreddit, query), user_agent: reddit_user_agent))

  json['data']['children'].each do |post|

    post_title = post['data']['title']
    post_url = post['data']['url']

    # return if image was found
    if (/[\w:]+\.(jpe?g|png|gif)/i =~ post_url)
      filename = $~
      return response.reply([post_title, post_url].join(": "))
    end

    # keep searching, but wait half a second between requests
    sleep 0.5
  rescue StandardError => e
    Lita.logger.warn("Couldn't fetch image from Reddit: " + e.message)
    response.reply("I couldn't fetch an image from Reddit.")
  end
end

Protected Instance Methods

platform() click to toggle source
# File lib/lita/handlers/reddit_image.rb, line 54
def platform
  'ruby'
end
reddit_url(subreddit, query) click to toggle source
# File lib/lita/handlers/reddit_image.rb, line 46
def reddit_url(subreddit, query)
  URI.parse('https://www.reddit.com/r/' + subreddit + '/search.json?q=' + query + '&restrict_sr=on').to_s
end
reddit_user_agent() click to toggle source
# File lib/lita/handlers/reddit_image.rb, line 50
def reddit_user_agent
  "#{platform}:#{config.app_id}:#{version} (by /u/#{config.username})"
end
version() click to toggle source
# File lib/lita/handlers/reddit_image.rb, line 58
def version
  VERSION
end

Private Instance Methods

content_type(filename) click to toggle source
# File lib/lita/handlers/reddit_image.rb, line 64
def content_type(filename)
  case filename
  when /[\w:]+\.jpe?g/i
    'image/jpeg'
  when /[\w:]+\.png/i
    'image/png'
  when /[\w:]+\.gif/i
    'image/gif'
  else
    'image/jpeg'
  end
end