Project

pac

0.0
No commit activity in last 3 years
No release in over 3 years
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.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.3.1
~> 0.9.2
 Project Readme

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