Sha256: b58c0782e41fb75b1161c45abc12178d4abc22069639ad54b8863592ae4df6eb

Contents?: true

Size: 1.87 KB

Versions: 2

Compression:

Stored size: 1.87 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, options, shrinker = LinkShrink::Config.api)
      parse(request(url, shrinker).body, options, shrinker)
    end

    def parse(response, options, shrinker)
      if shrinker.content_type.eql?('text/plain')
        response
      else
        process_response(response, options, shrinker)
      end
    end

    def process_response(response, options, shrinker, json = JSONParser)
      option      = Options.new(options)
      parsed_json = json.parse_json(response)
      plain       = parsed_json['id']

      if option.json? && option.qr_code?
        if option.image_size?
          return parsed_json.merge(qr_code: shrinker.generate_chart_url(plain, options.fetch(:image_size))).to_json
        end
        return parsed_json.merge(qr_code: shrinker.generate_chart_url(plain)).to_json
      end

      case
        when option.json?
          json.cleanup_json(response)
        when option.qr_code?
          if option.image_size?
            return shrinker.generate_chart_url(plain, options.fetch(:image_size))
          end
          shrinker.generate_chart_url(plain)
        when option.image_size?
          shrinker.generate_chart_url(plain, options.fetch(:image_size))
        else
          plain
      end
    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.5 lib/link_shrink/request.rb
link_shrink-0.0.4 lib/link_shrink/request.rb