Sha256: 5572d76339d045fc6848d889eca8a45cffa076e4a543ca7b0e793aabf8248756

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

require 'uri'
require 'singleton'

module Eat
  def self.config
    ::Eat::Config.instance
  end
  
  class Config
    include ::Singleton
    attr_writer :remote_timeout
    def remote_timeout
      @remote_timeout || 2 #seconds
    end
  end
  
  module ObjectExtensions
    def eat(filesystem_path_or_uri)
      uri = ::URI.parse filesystem_path_or_uri
      case uri.scheme
      when 'file', nil
        if ::File.readable? uri.path
          ::File.read uri.path
        else
          `sudo /bin/cat #{uri.path}`
        end
      when 'http', 'https'
        require 'net/http'
        require 'net/https' if uri.scheme == 'https'
        (defined?(::SystemTimer) ? ::SystemTimer : ::Timeout).timeout(::Eat.config.remote_timeout) do
          http = ::Net::HTTP.new uri.host, uri.port
          if uri.scheme == 'https'
            http.use_ssl = true
            # if you were trying to be real safe, you wouldn't use this library
            http.verify_mode = ::OpenSSL::SSL::VERIFY_NONE
          end
          http.start { |session| session.get uri.request_uri }
        end.body
      end
    end
  end
end

::Object.send(:include, ::Eat::ObjectExtensions) unless ::Object.method_defined?(:eat)

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
eat-0.0.6 lib/eat.rb