Sha256: ea0e8b0a491042af56d37780fb6fea664b7597a4c09b80936c00f109e3d98bc5

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 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.to_s
      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.7 lib/eat.rb