class SocialNet::Byte::Api::Request

Public Class Methods

new(attrs = {}) click to toggle source
# File lib/social_net/byte/api/request.rb, line 10
def initialize(attrs = {})
  @host = 'api.byte.co'
  @username = attrs[:username]
  @endpoint = attrs.fetch :endpoint, "/account/id/#{@username}/posts"
  @block = attrs.fetch :block, -> (request) {add_access_token_and_cursor! request}
  @next_page = attrs[:next_page] if attrs[:next_page]
  @method = attrs.fetch :method, :get
end

Public Instance Methods

run() click to toggle source
# File lib/social_net/byte/api/request.rb, line 19
def run
  print "#{as_curl}\n"
  case response = run_http_request
  when Net::HTTPOK
    rate_limit_reset response.header["x-ratelimit-remaining"].to_i
    JSON response.body
  else
    raise Errors::ResponseError, response
  end
end

Private Instance Methods

add_access_token_and_cursor!(request) click to toggle source
# File lib/social_net/byte/api/request.rb, line 49
def add_access_token_and_cursor!(request)
  request.add_field 'Authorization', SocialNet::Byte.configuration.access_token
end
as_curl() click to toggle source
# File lib/social_net/byte/api/request.rb, line 66
def as_curl
  'curl'.tap do |curl|
    curl <<  " -X #{http_request.method}"
    http_request.each_header do |name, value|
      curl << %Q{ -H "#{name}: #{value}"}
    end
    curl << %Q{ -d '#{http_request.body}'} if http_request.body
    curl << %Q{ "#{@uri.to_s}"}
  end
end
http_request() click to toggle source
# File lib/social_net/byte/api/request.rb, line 38
def http_request
  http_class = "Net::HTTP::#{@method.capitalize}".constantize
  @http_request ||= http_class.new(uri.request_uri).tap do |request|
    @block.call request
  end
end
query() click to toggle source
# File lib/social_net/byte/api/request.rb, line 53
def query
  {}.tap do |query|
    query.merge! cursor: @next_page if @next_page
  end.to_param
end
rate_limit_reset(number_of_tries) click to toggle source
# File lib/social_net/byte/api/request.rb, line 59
def rate_limit_reset(number_of_tries)
  if number_of_tries == 1
    puts "Sleeping 20 seconds to reset the rate limit"
    sleep 20
  end
end
run_http_request() click to toggle source
# File lib/social_net/byte/api/request.rb, line 32
def run_http_request
  Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
    http.request http_request
  end
end
uri() click to toggle source
# File lib/social_net/byte/api/request.rb, line 45
def uri
  @uri ||= URI::HTTPS.build host: @host, path: @endpoint, query: query
end