class RedditApi::Client

Constants

DEFAULT_MAX_FAILURES
DEFAULT_SLEEP_TIME

Attributes

client[R]
failures[RW]
max_failures[R]
null_response_factory[R]
parser[R]
requestor[R]
sleep_time[RW]

Public Class Methods

new(args = {}) click to toggle source
# File lib/reddit_api/client.rb, line 20
def initialize(args = {})
  @client = args.fetch(:client, HTTParty)
  @requestor = args.fetch(:requestor, RedditApi::Requestor.new(client: client))
  @parser = args.fetch(:parser, RedditApi::ResponseParser)
  @null_response_factory = RedditApi:: NullResponse
  @failures = args.fetch(:failures, 0)
  @max_failures = args.fetch(:max_fail, DEFAULT_MAX_FAILURES)
  @sleep_time = args.fetch(:sleep_time, DEFAULT_SLEEP_TIME)
end
sleep_time() click to toggle source
# File lib/reddit_api/client.rb, line 6
def self.sleep_time
  if ENV["ENVIRONMENT"] == "TEST"
    0
  else
    2
  end
end

Public Instance Methods

get(query) click to toggle source
# File lib/reddit_api/client.rb, line 30
def get(query)
  while query.capture_count < query.count && failures < max_failures
    response = send_request(query)
    response = parser.parse_response(response, query.count)
    update_progress(query, response)
  end
  reset_failures
end

Private Instance Methods

reset_failures() click to toggle source
# File lib/reddit_api/client.rb, line 68
def reset_failures
  self.failures = 0
end
send_request(query) click to toggle source
# File lib/reddit_api/client.rb, line 44
def send_request(query)
  sleep(sleep_time)
  request = requestor.build(query)
  response = client.get(*request)
  response || null_response_factory.new
end
update_failures(captured_before, captured_after, count) click to toggle source
# File lib/reddit_api/client.rb, line 62
def update_failures(captured_before, captured_after, count)
  if captured_before >= captured_after
    self.failures += 1
  end
end
update_progress(query, response) click to toggle source
# File lib/reddit_api/client.rb, line 51
def update_progress(query, response)
  captured_before = query.capture_count
  update_query(query, response)
  captured_after = query.capture_count
  update_failures(captured_before, captured_after, query.count)
end
update_query(query, response) click to toggle source
# File lib/reddit_api/client.rb, line 58
def update_query(query, response)
  query.add_records(response)
end