local_pac 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,20 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in local_pac.gemspec
4
+ gemspec
5
+
6
+ group :test do
7
+ gem 'rack-test', require: 'rack/test'
8
+ gem 'rspec', require: false
9
+ gem 'fuubar', require: false
10
+ # gem 'cucumber', require: false
11
+ # gem 'aruba', require: 'aruba/cucumber'
12
+ end
13
+
14
+ group :development do
15
+ gem 'fedux_org-stdlib', require: false
16
+ gem 'foreman', require: false
17
+ gem 'pry-debugger', require: false
18
+ gem 'pry'
19
+ gem 'debugger'
20
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 TODO: Write your name
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Procfile ADDED
@@ -0,0 +1,2 @@
1
+ web: rackup -p 5000
2
+ #web: bundle exec local_pac serve --no-daemonize
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # LocalPac
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'local_pac'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install local_pac
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it ( http://github.com/<my-github-username>/local_pac/fork )
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/local_pac ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ require 'thor'
4
+
5
+ $LOAD_PATH << File.expand_path('../../lib', __FILE__)
6
+ require 'local_pac'
7
+
8
+ class Default < Thor
9
+ desc 'serve', 'Serve pacfiles'
10
+ option :logfile, type: :string, default: File.expand_path(File.join(ENV['HOME'], '.local', 'share', 'local_pac', 'access.log')), desc: 'File to write access log to'
11
+ option :port, type: :numeric, default: 8000, desc: 'The port the server listens on'
12
+ def serve
13
+ LocalPac::FileServer.use Rack::CommonLogger, LocalPac::Logger.new(options[:logfile])
14
+ LocalPac::FileServer.set :port, options[:port]
15
+ LocalPac::FileServer.run!
16
+ end
17
+ end
18
+
19
+ Default.start
data/config.ru ADDED
@@ -0,0 +1,6 @@
1
+ $LOAD_PATH << File.expand_path('../lib/', __FILE__)
2
+ require 'local_pac'
3
+
4
+ logger = LocalPac::Logger.new ENV['LOGFILE'] || File.expand_path(File.join(ENV['HOME'], '.local', 'share', 'local_pac', 'access.log'))
5
+ use Rack::CommonLogger, logger
6
+ run LocalPac::FileServer.new
@@ -0,0 +1,14 @@
1
+ Feature: Fetch proxy pac
2
+
3
+ As a proxy user
4
+ I want to have a local proxy pac
5
+ In order to reach different proxy servers
6
+
7
+ Scenario: Default
8
+ Given an empty environment
9
+ When I sucessfully fetch the proxy pac
10
+ Then I got
11
+ """
12
+ function FindProxyForURL(url, host) {
13
+ }
14
+ """
@@ -0,0 +1 @@
1
+ require 'local_pac'
data/files/proxy.pac ADDED
@@ -0,0 +1,3 @@
1
+ function FindProxyForURL(url, host) {
2
+ return "DIRECT";
3
+ }
@@ -0,0 +1,22 @@
1
+ module LocalPac
2
+ class FileServer < Sinatra::Base
3
+ not_found do
4
+ "Sorry, but I cant' find proxy-pac-file \"#{env['sinatra.error'].message}\"."
5
+ end
6
+
7
+ get '/' do
8
+ redirect to('/v1/pac/proxy.pac')
9
+ end
10
+
11
+ get '/v1/pac/:name' do
12
+ manager = PacManager.new
13
+ file = manager.find(params[:name])
14
+
15
+ if file.nil?
16
+ fail Sinatra::NotFound, params[:name]
17
+ else
18
+ file.content
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ module LocalPac
2
+ class Logger
3
+ def initialize(path)
4
+ FileUtils.mkdir_p File.dirname(path)
5
+ @logger = ::Logger.new(path)
6
+ end
7
+
8
+ def write(*args, &block)
9
+ @logger.<<(*args, &block)
10
+ end
11
+
12
+ private
13
+
14
+ def default_path
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+ module LocalPac
3
+ class NullPacFile
4
+ def path
5
+ nil
6
+ end
7
+
8
+ def name
9
+ nil
10
+ end
11
+
12
+ def content
13
+ nil
14
+ end
15
+
16
+ def nil?
17
+ true
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ module LocalPac
3
+ class PacFile
4
+ attr_reader :path
5
+
6
+ def initialize(path)
7
+ @path = path
8
+ end
9
+
10
+ def name
11
+ File.basename(@path, '.pac').to_sym
12
+ end
13
+
14
+ def content
15
+ File.read(path)
16
+ end
17
+
18
+ def nil?
19
+ false
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,29 @@
1
+ module LocalPac
2
+ class PacManager
3
+ def initialize(paths = default_paths, creator = PacFile)
4
+ @paths = Array(paths)
5
+ @creator = creator
6
+ end
7
+
8
+ def find(name)
9
+ default = proc { NullPacFile.new }
10
+ pac_files.find(default) { |f| f.name == File.basename(name, '.pac').to_sym }
11
+ end
12
+
13
+ private
14
+
15
+ def pac_files
16
+ @paths.reduce([]) do |memo, path|
17
+ memo.concat Dir.glob(File.join(path, '*.pac')).collect { |f| @creator.new(f) }
18
+ end
19
+ end
20
+
21
+ def default_paths
22
+ [
23
+ File.expand_path(File.join(ENV['HOME'], '.config', 'pacfiles')),
24
+ File.expand_path(File.join(ENV['HOME'], '.pacfiles')),
25
+ File.expand_path('../../../files', __FILE__),
26
+ ]
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+ module LocalPac
3
+ module SpecHelper
4
+ def app
5
+ LocalPac::FileServer.new
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module LocalPac
2
+ VERSION = "0.0.1"
3
+ end
data/lib/local_pac.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'sinatra'
2
+ require 'fileutils'
3
+ require 'logger'
4
+
5
+ require 'local_pac/logger'
6
+ require 'local_pac/version'
7
+ require 'local_pac/file_server'
8
+ require 'local_pac/pac_manager'
9
+ require 'local_pac/pac_file'
10
+ require 'local_pac/null_pac_file'
11
+
12
+ module LocalPac; end
data/local_pac.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'local_pac/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "local_pac"
8
+ spec.version = LocalPac::VERSION
9
+ spec.authors = ["Dennis Günnewig"]
10
+ spec.email = ["dg1@vrnetze.de"]
11
+ spec.summary = %q{Serve local proxy pac}
12
+ spec.description = <<-EOS
13
+ This gem helps you to serve proxy.pacs locallly
14
+ EOS
15
+ spec.homepage = "https://github.com/dg-vrnetze/local_pac"
16
+ spec.license = "MIT"
17
+
18
+ spec.files = `git ls-files -z`.split("\x0")
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_runtime_dependency 'sinatra'
24
+ spec.add_development_dependency 'bundler', '~> 1.5'
25
+ spec.add_development_dependency 'rake'
26
+ end
@@ -0,0 +1,35 @@
1
+ # Maintainer: Max Meyer <dev@fedux.org>
2
+ pkgname=local_pac
3
+ pkgver=0.0.1
4
+ pkgrel=1
5
+ pkgdesc="local pacfile serving server"
6
+ arch=(i686 x86_64)
7
+ url="https://github.com/dg-vrnetze/${pkgname}"
8
+ license=('MIT')
9
+ depends=(ruby)
10
+ makedepends=(rubygems filegen)
11
+ source=(http://gems.rubyforge.org/gems/$pkgname-$pkgver.gem)
12
+ noextract=($pkgname-$pkgver.gem)
13
+ md5sums=()
14
+
15
+ package() {
16
+ cd "$srcdir"
17
+
18
+ _library_dir=/usr/lib/${pkgname}
19
+ _share_dir="${_library_dir}/gems/${pkgname}-${pkgver}/share"
20
+ _systemd_dir=/usr/lib/systemd/system
21
+ _bin_dir=/usr/bin
22
+
23
+ install -d ${srcdir}/$_library_dir
24
+ gem install --env-shebang --wrappers --no-ri --no-rdoc --install-dir ${srcdir}/${_library_dir} $pkgname
25
+
26
+ SOFTWARE_BINARY=$_library_dir/gems/${pkgname}-${pkgver}/bin/${pkgname} SOFTWARE_LIB=/usr/lib/local_pac filegen ${_share_dir}/archlinux/startup.erb > ${srcdir}/${_bin_dir}/${pkgname}
27
+
28
+ chmod a+x ${srcdir}/${_bin_dir}/${pkgname}
29
+ rm -r ${srcdir}/${_library_dir}/cache
30
+
31
+ install ${srcdir}/$_share_dir/systemd/${pkgname}.service ${srcdir}/$_systemd_dir
32
+ install ${srcdir}/$_share_dir/systemd/${pkgname}.socket ${srcdir}/$_systemd_dir
33
+ }
34
+
35
+ # vim:set ts=2 sw=2 et:
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+
3
+ export GEM_ROOT='<%= lookup('SOFTWARE_LIB') %>'
4
+ export GEM_PATH='<%= lookup('SOFTWARE_LIB') %>'
5
+ export GEM_HOME='<%= lookup('SOFTWARE_LIB') %>'
6
+
7
+ exec <%= lookup('SOFTWARE_BINARY') %> $*
@@ -0,0 +1,9 @@
1
+ [Unit]
2
+ Description=Local proxy pac-file server
3
+ Requires=local_pac.socket
4
+
5
+ [Service]
6
+ ExecStart=/usr/bin/local_pac serve
7
+
8
+ [Install]
9
+ WantedBy=multi-user.target
@@ -0,0 +1,10 @@
1
+ [Unit]
2
+ Description=Socket for Local proxy pac-file server
3
+
4
+ [Socket]
5
+ ListenStream=127.0.0.1:8000
6
+ After=network.target
7
+ Requires=network.target
8
+
9
+ [Install]
10
+ WantedBy=sockets.target
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Fetch proxy pac' do
4
+ context '/v1/pac' do
5
+ it 'finds an existing proxy pac' do
6
+ create_file '.config/pacfiles/file1.pac', 'asdf'
7
+
8
+ env = {
9
+ 'HOME' => working_directory,
10
+ }
11
+
12
+ with_environment env, clear: true do
13
+ response = get('/v1/pac/file1.pac')
14
+ expect(response.body).to eq('asdf')
15
+ end
16
+ end
17
+
18
+ it 'exits with 404 if file does not exist' do
19
+ response = get('/v1/pac/does_not_exist.pac')
20
+ expect(response.body).to include('does_not_exist.pac')
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe NullPacFile do
5
+ context '#path' do
6
+ it 'always returns nil' do
7
+ file = NullPacFile.new
8
+ expect(file.path).to be_nil
9
+ end
10
+ end
11
+
12
+ context '#name' do
13
+ it 'always returns nil' do
14
+ file = NullPacFile.new
15
+ expect(file.name).to be_nil
16
+ end
17
+ end
18
+
19
+ context '#content' do
20
+ it 'returns the content of file' do
21
+ file = NullPacFile.new
22
+ expect(file.content).to be_nil
23
+ end
24
+ end
25
+
26
+ context '#nil?' do
27
+ it 'is always true' do
28
+ file = NullPacFile.new
29
+ expect(file.nil?).to be_true
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe PacFile do
5
+ context '#path' do
6
+ it 'has a path' do
7
+ file = PacFile.new('/usr/share/file1.pac')
8
+ expect(file.path).to eq('/usr/share/file1.pac')
9
+ end
10
+ end
11
+
12
+ context '#name' do
13
+ it 'has a name' do
14
+ file = PacFile.new('/usr/share/file1.pac')
15
+ expect(file.name).to eq(:file1)
16
+ end
17
+ end
18
+
19
+ context '#content' do
20
+ it 'returns the content of file' do
21
+ file = create_file('file1.pac', 'content')
22
+ file = PacFile.new(file)
23
+ expect(file.content).to eq('content')
24
+ end
25
+ end
26
+
27
+ context '#nil?' do
28
+ it 'is always false' do
29
+ file = PacFile.new('/usr/share/file1.pac')
30
+ expect(file.nil?).to be_false
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe PacManager do
5
+ context '#find' do
6
+ it 'finds the file in given path' do
7
+ directory = create_directory 'pac_files'
8
+ file_path = create_file 'pac_files/file1.pac'
9
+ create_file 'pac_files/file2.pac'
10
+
11
+ manager = PacManager.new(directory)
12
+ file = manager.find('file1')
13
+ expect(file.path).to eq(file_path)
14
+ end
15
+
16
+ it 'returs a null object if cannot be found' do
17
+ manager = PacManager.new('/tmp')
18
+ file = manager.find('file1')
19
+ expect(file.nil?).to be_true
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+
3
+ $LOAD_PATH << File.expand_path('../../lib', __FILE__)
4
+
5
+ # Set the rack environment to `test`
6
+ ENV["RACK_ENV"] = "test"
7
+
8
+ # Pull in all of the gems including those in the `test` group
9
+ require 'bundler'
10
+ Bundler.require :default, :test, :development
11
+
12
+ require 'local_pac/spec_helper'
13
+
14
+ Dir.glob(File.expand_path('../support/*.rb', __FILE__)).each { |f| require_relative f }
15
+
16
+ include LocalPac
@@ -0,0 +1,16 @@
1
+ require 'fedux_org/stdlib/environment'
2
+
3
+ module LocalPac
4
+ module SpecHelper
5
+ module Environment
6
+ include FeduxOrg::Stdlib::Environment
7
+ alias_method :with_environment, :isolated_environment
8
+ end
9
+ end
10
+ end
11
+
12
+ # encoding: utf-8
13
+ RSpec.configure do |c|
14
+ c.include LocalPac::SpecHelper::Environment
15
+ end
16
+
@@ -0,0 +1,19 @@
1
+ require 'fedux_org/stdlib/filesystem'
2
+
3
+ module LocalPac
4
+ module SpecHelper
5
+ module Filesystem
6
+ include FeduxOrg::Stdlib::Filesystem
7
+
8
+ def root_directory
9
+ File.expand_path('../../../', __FILE__)
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ # encoding: utf-8
16
+ RSpec.configure do |c|
17
+ c.include LocalPac::SpecHelper::Filesystem
18
+ c.before(:each) { cleanup_working_directory }
19
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+ RSpec.configure do |c|
3
+ c.include LocalPac::SpecHelper
4
+ c.include Rack::Test::Methods
5
+ end
@@ -0,0 +1,5 @@
1
+ RSpec.configure do |c|
2
+ c.filter_run_including :focus => true
3
+ c.run_all_when_everything_filtered = true
4
+ c.treat_symbols_as_metadata_keys_with_true_values = true
5
+ end
metadata ADDED
@@ -0,0 +1,141 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: local_pac
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dennis Günnewig
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-02-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sinatra
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: bundler
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '1.5'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '1.5'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: ! 'This gem helps you to serve proxy.pacs locallly
63
+
64
+ '
65
+ email:
66
+ - dg1@vrnetze.de
67
+ executables:
68
+ - local_pac
69
+ extensions: []
70
+ extra_rdoc_files: []
71
+ files:
72
+ - .gitignore
73
+ - Gemfile
74
+ - LICENSE.txt
75
+ - Procfile
76
+ - README.md
77
+ - Rakefile
78
+ - bin/local_pac
79
+ - config.ru
80
+ - features/fetch_proxy_pac.feature
81
+ - features/support/env.rb
82
+ - files/proxy.pac
83
+ - lib/local_pac.rb
84
+ - lib/local_pac/file_server.rb
85
+ - lib/local_pac/logger.rb
86
+ - lib/local_pac/null_pac_file.rb
87
+ - lib/local_pac/pac_file.rb
88
+ - lib/local_pac/pac_manager.rb
89
+ - lib/local_pac/spec_helper.rb
90
+ - lib/local_pac/version.rb
91
+ - local_pac.gemspec
92
+ - share/archlinux/PKGBUILD
93
+ - share/archlinux/startup.erb
94
+ - share/systemd/local_pac.service
95
+ - share/systemd/local_pac.socket
96
+ - spec/features/fetch_proxy_pac_spec.rb
97
+ - spec/null_pac_file_spec.rb
98
+ - spec/pac_file_spec.rb
99
+ - spec/pac_manager_spec.rb
100
+ - spec/spec_helper.rb
101
+ - spec/support/environment.rb
102
+ - spec/support/filesystem.rb
103
+ - spec/support/rack_test.rb
104
+ - spec/support/rspec.rb
105
+ homepage: https://github.com/dg-vrnetze/local_pac
106
+ licenses:
107
+ - MIT
108
+ post_install_message:
109
+ rdoc_options: []
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ requirements: []
125
+ rubyforge_project:
126
+ rubygems_version: 1.8.23
127
+ signing_key:
128
+ specification_version: 3
129
+ summary: Serve local proxy pac
130
+ test_files:
131
+ - features/fetch_proxy_pac.feature
132
+ - features/support/env.rb
133
+ - spec/features/fetch_proxy_pac_spec.rb
134
+ - spec/null_pac_file_spec.rb
135
+ - spec/pac_file_spec.rb
136
+ - spec/pac_manager_spec.rb
137
+ - spec/spec_helper.rb
138
+ - spec/support/environment.rb
139
+ - spec/support/filesystem.rb
140
+ - spec/support/rack_test.rb
141
+ - spec/support/rspec.rb