MidnightRiders/MemberPortal

View on GitHub
lib/facebook_api.rb

Summary

Maintainability
A
25 mins
Test Coverage
# Module to interact with Facebook's Graph API
module FacebookApi

  # Returns *Array*. Events from the Riders Page.
  def self.events
    if !@updated_at || @updated_at < Time.now - 15.minutes
      @events = get_events
      if @events['error']
        @auth_token = refresh_auth_token
        @events = get_events
      else
        @updated_at = Time.now
      end
    end
    @events ||= get_events
  end

  # Sets and stores auth_token from API
  def self.auth_token
    @auth_token ||= get_auth_token
  end

  # Sets auth_token
  def self.refresh_auth_token
    @auth_token = get_auth_token
  end

  protected

  # Retrieves auth_token from API
  def self.get_auth_token
    uri = URI("https://graph.facebook.com/oauth/access_token?client_id=560921750673121&client_secret=#{ENV['FACEBOOK_SECRET']}&grant_type=client_credentials")
    Net::HTTP.get(uri)
  rescue => e
    Rails.logger.warn 'FacebookApi Error:'
    Rails.logger.warn e
  end

  # Retrieves events from API
  def self.get_events
    response = {}
    begin
      if auth_token
        uri = URI("https://graph.facebook.com/MidnightRiders/events?#{URI.encode_www_form_component(auth_token)}")
        response = Net::HTTP.get(uri)
        response = JSON.parse(response)
      end
    rescue => e
      Rails.logger.error 'FacebookApi Error:'
      Rails.logger.error e
    end
    response
  end
end