Sha256: 5a31ec029568efd7b3d4598ecbd723d5ede76b6ff7fc207b782f5c519f5393cf

Contents?: true

Size: 1.66 KB

Versions: 24

Compression:

Stored size: 1.66 KB

Contents

require 'net/protocol'

require 'envjs/net'

class Envjs::Net::CGI

  def save_and_set k, v
    @saved[k] = ENV[k]
    ENV[k] = v
  end

  def restore
    @saved.keys.each do |k|
      ENV[k] = @saved[k]
    end
    @saved = {}
  end

  def initialize xhr, data
    if (match = %r((.*\.php)(\?(.*))?).match xhr.url).nil?
      raise "Not CGI"
    end

    @saved = {}

    begin

      # p match[0]

      path = match[1]
      path.sub! %r(^file://), ""

      save_and_set( "GATEWAY_INTERFACE", "CGI/1.1" )

      save_and_set( "REQUEST_METHOD", xhr["method"] )
      if ( match[3] )
        save_and_set( "QUERY_STRING", match[3] )
      end

      if ct = xhr["headers"]["Content-Type"]
        save_and_set( "CONTENT_TYPE", ct )
      end

      if data
        save_and_set( "CONTENT_LENGTH", data.length.to_s )
      end

      xhr["headers"].each do |k,v|
        k.gsub!("-","_")
        k = "HTTP_"  + k
        save_and_set( k, v )
      end

      result = nil

      save_and_set( "PATH_INFO",  path )
      save_and_set( "PATH_TRANSLATED",  path )
      save_and_set( "REDIRECT_STATUS", "200" )

      open("|php-cgi", "r+") do |php|
        if data
          php.write data
          php.flush
        end
        result = php.read
      end

      result && result = result.split("\r\n")
      @headers = {}
      while line = result.shift
        break if line == ""
        match = /([^:]*):\s*(.*)/.match line
        @headers[match[1]]=match[2]
      end
      # p "q", result.join("\r\n")
      @body = result.join("\r\n")
    ensure
      restore
    end

  end

  def each 
    @headers.each do |k,v|
      yield k, v
    end
  end

  def finish
  end

  attr_reader :body

end

Version data entries

24 entries across 24 versions & 4 rubygems

Version Path
envjs19-0.3.8.20101029121421 lib/envjs/net/cgi.rb
envjs-0.3.8 lib/envjs/net/cgi.rb
envjs-0.3.7 lib/envjs/net/cgi.rb
envjs-0.3.6 lib/envjs/net/cgi.rb
envjs-0.3.5 lib/envjs/net/cgi.rb
envjs-0.3.4 lib/envjs/net/cgi.rb
envjs-0.3.3 lib/envjs/net/cgi.rb
envjs-0.3.2 lib/envjs/net/cgi.rb
envjs-0.3.1 lib/envjs/net/cgi.rb
envjs-0.3.0 lib/envjs/net/cgi.rb
envjs-0.2.0 lib/envjs/net/cgi.rb
envjs-0.1.7 lib/envjs/net/cgi.rb
envjs-0.1.6 lib/envjs/net/cgi.rb
envjs-0.1.5 lib/envjs/net/cgi.rb
envjs-0.1.4 lib/envjs/net/cgi.rb
envjs-0.1.3 lib/envjs/net/cgi.rb
harmony-0.5.1 vendor/envjs/lib/envjs/net/cgi.rb
harmony-0.5 vendor/envjs/lib/envjs/net/cgi.rb
envjs-0.1.2 lib/envjs/net/cgi.rb
envjs-0.1.1 lib/envjs/net/cgi.rb