Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

pac is a gem to parse proxy auto-config files.

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 bin
Octocat-spinner-32 lib
Octocat-spinner-32 test Initial commit September 09, 2011
Octocat-spinner-32 .gitignore
Octocat-spinner-32 Gemfile Initial commit September 09, 2011
Octocat-spinner-32 LICENSE
Octocat-spinner-32 README.md One more url to fix. September 11, 2011
Octocat-spinner-32 Rakefile Initial commit September 09, 2011
Octocat-spinner-32 pac.gemspec
README.md

pac

pac is a gem to parse proxy auto-config files. pac uses a JavaScript runtime to evaulate a proxy auto-config file the same way a browser does to determine what proxy (if any at all) should a program use to connect to a server. You must install on of the supported JavaScript runtimes: therubyracer, therubyrhino, johnson or mustang.

Big thanks to sstephenson's execjs for the runtime wrapper code.

Installing

Recommended

gem install pac

Edge

git clone https://github.com/samuelkadolph/ruby-pac
cd ruby-pac && rake install

Requirements

After installing the pac gem you must install a JavaScript runtime. Compatible runtimes include:

Usage

Command Line

parsepac http://cloud.github.com/downloads/samuelkadolph/ruby-pac/sample.pac https://github.com
parsepac http://cloud.github.com/downloads/samuelkadolph/ruby-pac/sample.pac http://ruby-lang.com
parsepac http://cloud.github.com/downloads/samuelkadolph/ruby-pac/sample.pac http://samuel.kadolph.com

Ruby

require "rubygems"
require "pac"

pac = PAC.load("http://cloud.github.com/downloads/samuelkadolph/ruby-pac/sample.pac")
pac.find("https://github.com") # => "PROXY proxy:8080"
pac.find("http://ruby-lang.com") # => "PROXY proxy:8080; DIRECT"
pac.find("http://samuel.kadolph.com") # => "DIRECT"

pac = PAC.read("sample.pac")

pac = PAC.source <<-JS
  function FindProxyForURL(url, host) {
    return "DIRECT";
  }
JS
pac.find("http://localhost") # => "DIRECT"

Available JavaScript Functions

  • isPlainHostName(host)
  • dnsDomainIs(host, domain)
  • localHostOrDomainIs(host, hostdom)
  • isResolvable(host)
  • isInNet(host, pattern, mask)
  • dnsResolve(host)
  • myIpAddress()
  • dnsDomainLevels(host)
  • shExpMatch(str, shexp)
  • weekdayRange(wd1, wd2, gmt)
  • dateRange(*args)
  • timeRange(*args)

Developers

Contributing

If you want to contribute: fork, branch & pull request.

Running Tests

bundle install
rake test
rake test:rubyracer
Something went wrong with that request. Please try again.