Using the pdf_toolkit gem on Windows

Donnerstag, 07. April 2011, 14:10 Uhr | roberto@vasquez-angel.de |

When trying to user the pdf_toolkit gem on windows, I got following error:

     Errno::ENOENT:
       No such file or directory - /dev/null

When you look at the gems source (lib/pdf/toolkit.rb) at line 175, you’ll see this:

STDERR.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')

This does not work on my machine. So I created my first monkey patch in new file at Rails.root/lib/pdf_toolkit_patch.rb:

module PDF
  class Toolkit
    class <<self
      private
        def call_program(*args,&block)

          old_stream = nil
          options = args.last.is_a?(Hash) ? args.pop : {}
          options[:mode] ||= 'r' if block_given?
          unless options[:silence_stderr] == false
            old_stream = STDERR.dup
            #STDERR.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')
            STDERR.reopen(RUBY_PLATFORM =~ /i386-mingw32/ ? 'NUL:' : '/dev/null')
            STDERR.sync = true
          end
          if options[:mode]
            command = (args.map {|arg| %{"#{arg.gsub('"','\\"')}"}}).join(" ")
            retval = IO.popen(command,options[:mode],&block)
            retval
            # block_given? ? $?.success? : retval
          else
            system(*args)
          end
        ensure
          STDERR.reopen(old_stream) if old_stream
        end
    end
  end
end

Then I added following line to the file, where I use the pdf-toolkit:

require 'pdf_toolkit_patch'

That’s it! My first ruby monkeypatch!