Sha256: ea58dafe3e01d71ace797d350c7a96cecf9d345d79023fae6ef20fa64980255c
Contents?: true
Size: 1.05 KB
Versions: 4
Compression:
Stored size: 1.05 KB
Contents
require 'perl' require 'perl/interpreter' module Perl class Rack def initialize(filename) @interpreter = Perl::Interpreter.new @app = @interpreter.load(filename) end def call(env) @interpreter.call(@app, {:ref => clean_env(env)}, :scalar) do |ret| value = ret.deref.value # Array status = value[0].value v1 = value[1].deref.value headers = Hash[*v1.map { |v| v.value }] body = value[2].deref.value.map { |v| v.value } [status, headers, body] end rescue => e puts "e: #{e.inspect}\n#{e.backtrace.join("\n")}" end def clean_env(hash) ret = hash.dup if defined?(PhusionPassenger) ret = ret.reject do |k,v| v.is_a?(PhusionPassenger::Utils::RewindableInput) end end ret.tap do |h| ["async.close"].each do |k| if h.has_key?(k) puts "Cannot handle env['#{k}'] (#{k} => #{h[k].inspect}), skipping" h.delete("async.close") end end end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
ruby-perl-04.01.2011.2 | lib/perl/rack.rb |
ruby-perl-04.01.2011.1 | lib/perl/rack.rb |
ruby-perl-04.01.2011 | lib/perl/rack.rb |
ruby-perl-0.99.15j | lib/perl/rack.rb |