Skip to content

Instantly share code, notes, and snippets.

@Keqi
Created January 21, 2020 06:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Keqi/349e9ca094266f2e930be214fc2e9ab1 to your computer and use it in GitHub Desktop.
Save Keqi/349e9ca094266f2e930be214fc2e9ab1 to your computer and use it in GitHub Desktop.
require 'httparty'
class UsersWorker
include Sidekiq::Worker
HOSTNAME = 'https://interview-api-app.herokuapp.com/users'
def perform(options={})
page_size = options[:page_size] || 10
page = options[:page] || 1
max_pages = options[:max_pages] || Float::INFINITY
while(true) do
users = fetch_users(page, page_size)
users.each do |user_hsh|
user = User.find_or_initialize_by(id: user_hsh['id'])
user.update_attributes(user_hsh)
end
page += 1
break if users.blank? || page > max_pages
end
end
private
def query_params(page, page_size)
{
offset: (page-1)*page_size,
limit: page_size
}.to_query
end
def fetch_users(page, page_size)
url = "#{HOSTNAME}?#{query_params(page, page_size)}"
headers = {
"Authorization": ENV['AUTHORIZATION_KEY'],
}
response = HTTParty.get(url, headers: headers)
users = JSON.parse(response.body)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment