class ActivePublicResources::Drivers::Quizlet

Constants

DRIVER_NAME

Public Class Methods

new(config_options={}) click to toggle source
# File lib/active_public_resources/drivers/quizlet.rb, line 9
def initialize(config_options={})
  validate_options(config_options, [:client_id])
  @client_id = config_options[:client_id]
end

Public Instance Methods

perform_request(request_criteria) click to toggle source
# File lib/active_public_resources/drivers/quizlet.rb, line 14
def perform_request(request_criteria)
  raise StandardError.new("driver has not been initialized properly") unless @client_id.present?
  request_criteria.validate_presence!([:query])

  uri = URI('https://api.quizlet.com/2.0/search/sets')
  params = {
    'q'         => request_criteria.query,
    'page'      => request_criteria.page     || 1,
    'per_page'  => request_criteria.per_page || 25,
    'client_id' => @client_id
  }
  uri.query = URI.encode_www_form(params)
  res = Net::HTTP.get_response(uri)
  results = JSON.parse(res.body)

  return parse_results(request_criteria, results)
end

Private Instance Methods

next_criteria(request_criteria, results) click to toggle source
# File lib/active_public_resources/drivers/quizlet.rb, line 43
def next_criteria(request_criteria, results)
  if results['total_pages'] > results['page']
    return RequestCriteria.new({
      :query    => request_criteria.query,
      :page     => (request_criteria.page || 1) + 1,
      :per_page => (request_criteria.per_page || 25)
    })
  end
end
parse_quiz(data) click to toggle source
# File lib/active_public_resources/drivers/quizlet.rb, line 53
def parse_quiz(data)
  quiz = ActivePublicResources::ResponseTypes::Quiz.new
  quiz.id            = data['id']
  quiz.title         = data['title']
  quiz.description   = data['description']
  quiz.url           = data['url']
  quiz.username      = data['username']
  quiz.term_count    = data['term_count']
  quiz.created_date  = Time.at(data['created_date']).utc.to_date
  quiz.has_images    = data['has_images']
  quiz.subjects      = data['subjects']

  # Return Types

  quiz.return_types << APR::ReturnTypes::Url.new(
    :driver => DRIVER_NAME,
    :remote_id => quiz.id,
    :url   => quiz.url,
    :text  => quiz.title,
    :title => quiz.title
  )

  # See http://quizlet.com/help/can-i-embed-quizlet-on-my-website
  quiz.return_types << APR::ReturnTypes::Iframe.new(
    :driver => DRIVER_NAME,
    :remote_id => quiz.id,
    :url    => "https://quizlet.com/#{quiz.id}/flashcards/embedv2",
    :text   => "Flashcards",
    :title  => quiz.title,
    :width  => "100%",
    :height => 410
  )

  quiz
end
parse_results(request_criteria, results) click to toggle source
# File lib/active_public_resources/drivers/quizlet.rb, line 34
def parse_results(request_criteria, results)
  @driver_response = DriverResponse.new(
    :criteria      => request_criteria,
    :next_criteria => next_criteria(request_criteria, results),
    :total_items   => results['total_results'],
    :items         => results['sets'].map { |data| parse_quiz(data) }
  )
end