JamesChevalier/Little-Corner

View on GitHub
app/controllers/foursquare_controller.rb

Summary

Maintainability
A
2 hrs
Test Coverage
# Connects to Foursquare via API
class FoursquareController < ApplicationController

  def callback
    if FOURSQUARE_OAUTH_TOKEN.blank?
      uri                    = URI.parse('https://foursquare.com/oauth2/access_token'\
                                         "?client_id=#{FOURSQUARE_CLIENT_ID}"\
                                         "&client_secret=#{FOURSQUARE_CLIENT_SECRET}"\
                                         '&grant_type=authorization_code'\
                                         "&redirect_uri=#{FOURSQUARE_CALLBACK_URL}"\
                                         "&code=#{params[:code]}")
      http                   = Net::HTTP.new(uri.host, uri.port)
      http.use_ssl           = true
      http.verify_mode       = OpenSSL::SSL::VERIFY_NONE
      request                = Net::HTTP::Get.new(uri.request_uri)
      response               = JSON.parse(http.request(request).body)
      client                 = OAuth2::Client.new(FOURSQUARE_CLIENT_ID,
                                                  FOURSQUARE_CLIENT_SECRET,
                                                  site: 'http://foursquare.com/oauth2/',
                                                  request_token_path: '/oauth2/request_token',
                                                  access_token_path: '/oauth2/access_token',
                                                  authorize_path: '/oauth2/authenticate?response_type=code',
                                                  parse_json: true)
      access_token           = OAuth2::AccessToken.new(client, response['access_token'])
      session[:access_token] = access_token.token
    else
      redirect_to foursquare_url
    end
  end

  def connect
    if FOURSQUARE_OAUTH_TOKEN.blank?
      redirect_to 'http://foursquare.com/oauth2/authenticate'\
                  "?client_id=#{FOURSQUARE_CLIENT_ID}"\
                  '&response_type=code'\
                  "&redirect_uri=#{FOURSQUARE_CALLBACK_URL}/"
    else
      redirect_to foursquare_url
    end
  end

  def index
    @foursquare_badges      = Rails.cache.fetch('foursquare_badges', expires_in: 12.hours, race_condition_ttl: 10) do
      foursquare_connection = Foursquare2::Client.new(client_id: FOURSQUARE_CLIENT_ID,
                                                      client_secret: FOURSQUARE_CLIENT_SECRET,
                                                      oauth_token: FOURSQUARE_OAUTH_TOKEN,
                                                      api_version: '20140201') unless foursquare_connection
      foursquare_connection.user_badges('self')
    end
    @foursquare_mayorships  = Rails.cache.fetch('foursquare_mayorships', expires_in: 12.hours, race_condition_ttl: 10) do
      foursquare_connection = Foursquare2::Client.new(client_id: FOURSQUARE_CLIENT_ID,
                                                      client_secret: FOURSQUARE_CLIENT_SECRET,
                                                      oauth_token: FOURSQUARE_OAUTH_TOKEN,
                                                      api_version: '20140201') unless foursquare_connection
      foursquare_connection.user_mayorships('self')
    end
    @foursquare_tips        = Rails.cache.fetch('foursquare_tips', expires_in: 12.hours, race_condition_ttl: 10) do
      foursquare_connection = Foursquare2::Client.new(client_id: FOURSQUARE_CLIENT_ID,
                                                      client_secret: FOURSQUARE_CLIENT_SECRET,
                                                      oauth_token: FOURSQUARE_OAUTH_TOKEN,
                                                      api_version: '20140201') unless foursquare_connection
      foursquare_connection.user_tips('self')
    end
  end

end