Sha256: 28e4b8bb3fe499aac18cde95f43756f07a90002281fddf67ae9bc31cae39ef95

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

class Mechanize
  ###
  # Fake response for dealing with file:/// requests
  class FileResponse
    def initialize(file_path)
      @file_path = file_path
    end

    def read_body
      if ::File.exists?(@file_path)
        if directory?
          yield dir_body
        else
          yield ::File.read(@file_path)
        end
      else
        yield ''
      end
    end

    def code
      ::File.exists?(@file_path) ? '200' : '400'
    end

    def content_length
      return dir_body.length if directory?
      ::File.exists?(@file_path) ? ::File.stat(@file_path).size : 0
    end

    def each_header; end

    def [](key)
      return nil unless key.downcase == 'content-type'
      return 'text/html' if directory?
      return 'text/html' if ['.html', '.xhtml'].any? { |extn|
        @file_path =~ /#{extn}$/
      }
      nil
    end

    def each
    end

    def get_fields(key)
      []
    end

    private
    def dir_body
      '<html><body>' +
        Dir[::File.join(@file_path, '*')].map { |f|
        "<a href=\"file://#{f}\">#{::File.basename(f)}</a>"
      }.join("\n") + '</body></html>'
    end

    def directory?
      ::File.directory?(@file_path)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kitamomonga-mechanize-0.9.3.20090724215219 lib/mechanize/file_response.rb