Sha256: d657e5b1da75a09886f53773d0ed62560a6b419f47fe6001f236ec4bca927d0e

Contents?: true

Size: 1.11 KB

Versions: 2

Compression:

Stored size: 1.11 KB

Contents

require 'uri'
require 'curb'

module Parsable
  class Remote
    # uses the response from a remote location

    attr_accessor :secure

    def initialize options={}
      self.secure = options.fetch(:secure, false)
    end

    def method_missing(method_sym, *arguments, &block)
      if uri = uri?(method_sym)
        get_response(uri)
      end
    end

    private

    def perform url, headers={}
      begin
        Curl::Easy.perform(url) do |http|
          headers.each { |header, value| http.headers[header] = value }
          http.connect_timeout = 2
          http.on_success { |easy| @body = easy.body_str }
        end
      rescue Curl::Err::CurlError
      end
    end

    def get_response uri
      transformer = Parsable::UriHelper.new(uri)
      url = transformer.to_s
      headers = transformer.secrets

      0.upto(2) do |i|
        perform(url, headers)

        break if @body
      end
      @body
    end

    def uri? string
      uri = URI.parse(string)
      if uri && uri.kind_of?(URI::HTTP)
        uri
      else
        false
      end
    rescue URI::InvalidURIError
      false
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
parsable-0.2.2 lib/parsable/remote.rb
parsable-0.2.1 lib/parsable/remote.rb