Sha256: d2d290bdeae25682d1d633f7fefd0a2647803f7e5036c5211d5f1f85519d8e74

Contents?: true

Size: 1.49 KB

Versions: 2

Compression:

Stored size: 1.49 KB

Contents

require 'typhoeus'

module LinkShrink
  # @author Jonah Ruiz <jonah@pixelhipsters.com>
  # Handles request and calls parser
  module Request
    def self.included(base)
      base.extend self
    end

    module_function

    def process_request(url, shrinker = LinkShrink::Config.api)
      parse(request(url, shrinker).body, shrinker)
    end

    def parse(response, shrinker)
      if shrinker.content_type.eql?('text/plain')
        response
      else
        process_response(response, shrinker)
      end
    rescue
      "Error #{response}"
    end

    def process_parse_options(parsed_json, shrinker)
      if shrinker.collection_key && shrinker.url_key
        parsed_json
          .fetch(shrinker.collection_key)
          .fetch(shrinker.url_key)
      else
        parsed_json.fetch(shrinker.url_key)
      end
    rescue
      parsed_json.fetch(shrinker.error_key) { 'Error parsing the request!'}
    end

    def process_response(response, shrinker, json = JSONParser)
      parsed_json = json.parse_json(response)
      process_parse_options(parsed_json, shrinker.class)
    end

    # Calls URL API
    # @see LinkShrink::Shrinkers::Base#api_url
    # @see LinkShrink::Shrinkers::Base#body_parameters
    def request(new_url, shrinker)
      shrinker.url = new_url
      Typhoeus::Request.new(
        shrinker.api_url,
        method:  shrinker.http_method,
        body:    shrinker.body_parameters(shrinker.url),
        headers: { 'Content-Type' => shrinker.content_type }
      ).run
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
link_shrink-0.0.8 lib/link_shrink/request.rb
link_shrink-0.0.7 lib/link_shrink/request.rb