local_pac 0.4.0 → 0.5.0

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/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- local_pac (0.3.0)
4
+ local_pac (0.4.0)
5
5
  activesupport
6
6
  addressable
7
7
  bootstrap-sass
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+ module LocalPac
3
+ module Actions
4
+ class ShowAvailableProxyPacFiles
5
+ private
6
+
7
+ attr_reader :repo, :options, :vcs_engine, :storage_path, :validator
8
+
9
+ public
10
+
11
+ def initialize(storage_path, options = {}, vcs_engine = GitStorage, validator = PacFileValidator.new)
12
+ @options = options
13
+ @vcs_engine = vcs_engine
14
+ @storage_path = storage_path
15
+ @validator = validator
16
+ end
17
+
18
+ def run
19
+ begin
20
+ @repo = vcs_engine.new(storage_path)
21
+ rescue Rugged::OSError
22
+ raise Exceptions::RepositoryDoesNotExist, "Sorry, but the repository at #{storage_path} does not exist" unless ::Dir.exists? storage_path
23
+ end
24
+
25
+ printf "%20s | %-20s | %-10s\n", 'Name', 'Path', 'Valid?'
26
+ printf "%20s-+-%-20s-+-%-10s\n", '-' * 20, '-' * 20, '-' * 10
27
+
28
+ repo.each_pac_file do |f|
29
+ printf "%20s | %-20s | %-10s\n", f.name, f.path, validator.valid?(f)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -23,6 +23,9 @@ module LocalPac
23
23
  @actions << Actions::PrintNewline.new(2)
24
24
  @actions << Actions::PrintTitle.new('Process Information')
25
25
  @actions << Actions::ShowProcessInformation.new(config.pid_file)
26
+ @actions << Actions::PrintNewline.new(2)
27
+ @actions << Actions::PrintTitle.new('Available Proxy.Pac-Files')
28
+ @actions << Actions::ShowAvailableProxyPacFiles.new(config.local_storage)
26
29
  end
27
30
 
28
31
  def show
@@ -75,11 +75,11 @@ module LocalPac
75
75
  end
76
76
 
77
77
  def all_files
78
- files
78
+ files.collect { |_,f| f }
79
79
  end
80
80
 
81
81
  def each_file(&block)
82
- files.each(&block)
82
+ all_files.each(&block)
83
83
  end
84
84
 
85
85
  private
@@ -3,20 +3,19 @@ module LocalPac
3
3
  class GitStorage
4
4
  private
5
5
 
6
- attr_reader :storage_path, :data, :repository, :file_creator, :null_file
6
+ attr_reader :storage_path, :data, :repository, :file_creator, :null_file, :vcs_engine
7
7
 
8
8
  public
9
9
 
10
- def initialize(storage_path, compressor_engine = JavaScriptCompressor, file_creator = LocalPac::File, null_file = LocalPac::NullFile.new)
10
+ def initialize(storage_path, compressor_engine = JavaScriptCompressor, vcs_engine = GitRepository, null_file = LocalPac::NullFile.new)
11
11
  @storage_path = ::File.expand_path(storage_path)
12
- @file_creator = file_creator
13
12
  @null_file = null_file
13
+ @vcs_engine = vcs_engine
14
14
 
15
15
  begin
16
- @repository = Rugged::Repository.new(storage_path)
17
- rescue Rugged::RepositoryError
18
- GitRepository.create(storage_path)
19
- @repository = Rugged::Repository.new(storage_path)
16
+ @repository = vcs_engine.new(storage_path)
17
+ rescue Exceptions::RepositoryDoesNotExist
18
+ @repository = vcs_engine.create(storage_path)
20
19
  end
21
20
 
22
21
  mutex = Mutex.new
@@ -34,27 +33,18 @@ module LocalPac
34
33
  data.fetch(key, null_file)
35
34
  end
36
35
 
36
+ def each_pac_file(&block)
37
+ pac_files.each(&block)
38
+ end
39
+
37
40
  private
38
41
 
39
42
  def pac_files
40
43
  LocalPac.ui_logger.debug "I'm using the following storage path: \"#{storage_path}\"."
41
- files = files_in_repository.keep_if { |f| f.extension? '.pac' }
44
+ files = repository.all_files.keep_if { |f| f.extension? '.pac' }
42
45
  LocalPac.ui_logger.debug "Found the following files: #{files.collect { |f| "\"#{f.path}\"" }.join(", ")}."
43
46
 
44
47
  files
45
48
  end
46
-
47
- def files_in_repository
48
- head_commit = repository.lookup(repository.head.target)
49
-
50
- files = []
51
- head_commit.tree.walk_blobs(:postorder) do |root, entry|
52
- files << file_creator.new("#{root}#{entry[:name]}", repository.lookup(entry[:oid]).content )
53
- end
54
-
55
- files
56
- rescue Rugged::ReferenceError
57
- []
58
- end
59
49
  end
60
50
  end
@@ -13,41 +13,55 @@ module LocalPac
13
13
  end
14
14
 
15
15
  def run
16
- if options[:create_pid_directory]
17
- LocalPac.ui_logger.info "Creating pid directory: #{::File.dirname(config.pid_file)}"
18
- Actions::CreateDirectory.new(::File.dirname(config.pid_file), force: options[:force]).run
19
- end
20
-
21
- if options[:create_log_directory]
22
- LocalPac.ui_logger.info "Creating log directory: #{::File.dirname(config.access_log)}"
23
- Actions::CreateDirectory.new(::File.dirname(config.access_log), force: options[:force]).run
24
- end
25
-
26
- if options[:create_sass_cache]
27
- LocalPac.ui_logger.info "Creating sass cache #{config.sass_cache}"
28
- Actions::CreateDirectory.new(config.sass_cache, force: options[:force]).run
29
- end
30
-
31
- if options[:create_local_storage]
32
- LocalPac.ui_logger.info "Creating local storage: #{config.local_storage}"
33
- Actions::CreateRepository.new(config.local_storage, bare: true, force: options[:force]).run
34
- end
35
-
36
- if options[:create_pre_receive_hook]
37
- LocalPac.ui_logger.info "Creating pre-receive hook in local storage \"#{config.local_storage}\"."
38
- Actions::CreateFile.new(:'git-hook.rb', ::File.join(config.local_storage, 'hooks', 'pre-receive'), Data.new(config), force: options[:force], executable: true).run
39
- end
40
-
41
- if options[:create_config_file]
42
- LocalPac.ui_logger.info "Creating config file at \"#{config.config_file}\"."
43
- Actions::CreateFile.new(:'example-config', config.config_file, Data.new(config), force: options[:force], create_directories: true).run
44
- end
45
-
46
- if options[:pre_seed]
47
- LocalPac.ui_logger.info "Adding examples to repository at #{config.local_storage}/examples"
48
- Actions::AddExamplesToLocalStorage.new(config.local_storage).run
49
- end
16
+ create_pid_directory if options[:create_pid_directory]
17
+ create_log_directory if options[:create_log_directory]
18
+ create_sass_cache if options[:create_sass_cache]
19
+ create_local_storage if options[:create_local_storage]
20
+ create_pre_receive_hook if options[:create_pre_receive_hook]
21
+ create_config_file if options[:create_config_file]
22
+ pre_seed if options[:pre_seed]
50
23
 
24
+ show_example_config
25
+ end
26
+
27
+ private
28
+
29
+ def create_pid_directory
30
+ LocalPac.ui_logger.info "Creating pid directory: #{::File.dirname(config.pid_file)}"
31
+ Actions::CreateDirectory.new(::File.dirname(config.pid_file), force: options[:force]).run
32
+ end
33
+
34
+ def create_log_directory
35
+ LocalPac.ui_logger.info "Creating log directory: #{::File.dirname(config.access_log)}"
36
+ Actions::CreateDirectory.new(::File.dirname(config.access_log), force: options[:force]).run
37
+ end
38
+
39
+ def create_sass_cache
40
+ LocalPac.ui_logger.info "Creating sass cache #{config.sass_cache}"
41
+ Actions::CreateDirectory.new(config.sass_cache, force: options[:force]).run
42
+ end
43
+
44
+ def create_local_storage
45
+ LocalPac.ui_logger.info "Creating local storage: #{config.local_storage}"
46
+ Actions::CreateRepository.new(config.local_storage, bare: true, force: options[:force]).run
47
+ end
48
+
49
+ def create_pre_receive_hook
50
+ LocalPac.ui_logger.info "Creating pre-receive hook in local storage \"#{config.local_storage}\"."
51
+ Actions::CreateFile.new(:'git-hook.rb', ::File.join(config.local_storage, 'hooks', 'pre-receive'), Data.new(config), force: options[:force], executable: true).run
52
+ end
53
+
54
+ def create_config_file
55
+ LocalPac.ui_logger.info "Creating config file at \"#{config.config_file}\"."
56
+ Actions::CreateFile.new(:'example-config', config.config_file, Data.new(config), force: options[:force], create_directories: true).run
57
+ end
58
+
59
+ def pre_seed
60
+ LocalPac.ui_logger.info "Adding examples to repository at #{config.local_storage}/examples"
61
+ Actions::AddExamplesToLocalStorage.new(config.local_storage).run
62
+ end
63
+
64
+ def show_example_config
51
65
  LocalPac.ui_logger.info "Showing the configuration of local_pac on your system."
52
66
  Actions::CreateOutput.new(:'example-config', $stdout, Data.new(config)).run
53
67
  end
@@ -1,4 +1,4 @@
1
1
  #main LocalPac
2
2
  module LocalPac
3
- VERSION = '0.4.0'
3
+ VERSION = '0.5.0'
4
4
  end
data/lib/local_pac.rb CHANGED
@@ -53,6 +53,7 @@ require 'local_pac/java_script_compressor'
53
53
  require 'local_pac/template_repository'
54
54
  require 'local_pac/template_file'
55
55
  require 'local_pac/pac_file_validator'
56
+ require 'local_pac/actions/show_available_proxy_pac_files'
56
57
  require 'local_pac/actions/get_system_information'
57
58
  require 'local_pac/actions/send_signal'
58
59
  require 'local_pac/actions/create_repository'
@@ -0,0 +1,69 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Actions::ShowAvailableProxyPacFiles do
5
+ let(:valid_pac_file) do <<-EOS.strip_heredoc.chomp
6
+ function FindProxyForURL(url, host) {
7
+ return "DIRECT";
8
+ }
9
+ EOS
10
+ end
11
+
12
+ context '#initialize' do
13
+ it 'requires a git repository' do
14
+ expect {
15
+ Actions::ShowAvailableProxyPacFiles.new(working_directory)
16
+ }.not_to raise_error
17
+ end
18
+ end
19
+
20
+ context '#run' do
21
+ it 'shows proxy.pac files in repo' do
22
+ repo = GitRepository.create(working_directory)
23
+ repo.add_content('proxy.pac', 'asdf()')
24
+ repo.add_content('proxy1.pac', 'asd1f()')
25
+
26
+ action = Actions::ShowAvailableProxyPacFiles.new(working_directory)
27
+
28
+ result = capture(:stdout) do
29
+ LocalPac.ui_logger.level = :info
30
+ action.run
31
+ end
32
+
33
+ expect(result).to include('proxy.pac')
34
+ end
35
+
36
+ it 'checks if pac file is valid' do
37
+ repo = GitRepository.create(working_directory)
38
+ repo.add_content('proxy.pac', valid_pac_file)
39
+ repo.add_content('proxy1.pac', 'asd1f()')
40
+
41
+ action = Actions::ShowAvailableProxyPacFiles.new(working_directory)
42
+
43
+ result = capture(:stdout) do
44
+ LocalPac.ui_logger.level = :info
45
+ action.run
46
+ end
47
+
48
+ expect(result).to include('true')
49
+ expect(result).to include('false')
50
+ end
51
+
52
+ it 'ignores non-pac-files' do
53
+ repo = GitRepository.create(working_directory)
54
+ repo.add_content('proxy.pac', valid_pac_file)
55
+ repo.add_content('proxy1.txt', 'asd1f()')
56
+
57
+ action = Actions::ShowAvailableProxyPacFiles.new(working_directory)
58
+
59
+ result = capture(:stdout) do
60
+ LocalPac.ui_logger.level = :info
61
+ action.run
62
+ end
63
+
64
+ expect(result).not_to include('proxy1.txt')
65
+ end
66
+
67
+ end
68
+
69
+ end
@@ -2,6 +2,13 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe ApplicationStatus do
5
+ let(:valid_pac_file) do <<-EOS.strip_heredoc.chomp
6
+ function FindProxyForURL(url, host) {
7
+ return "DIRECT";
8
+ }
9
+ EOS
10
+ end
11
+
5
12
  context '#initialize' do
6
13
  it 'has no special requirements' do
7
14
  expect {
@@ -18,8 +25,14 @@ describe ApplicationStatus do
18
25
 
19
26
  context '#show' do
20
27
  it 'show application status' do
28
+ git_repo = ::File.join(working_directory, 'data', 'storage.git')
29
+
30
+ repo = GitRepository.create(git_repo)
31
+ repo.add_content('proxy.pac', valid_pac_file)
32
+
21
33
  config_string = <<-EOS.strip_heredoc
22
34
  :pid_file: #{::File.join(working_directory, 'run', 'pid')}
35
+ :local_storage: #{git_repo}
23
36
  EOS
24
37
 
25
38
  config_file = create_file('config.yaml', config_string)
@@ -35,6 +48,7 @@ describe ApplicationStatus do
35
48
  expect(result).to include('pid_file')
36
49
  expect(result).to include('pid_file')
37
50
  expect(result).to include('cmdline')
51
+ expect(result).to include('proxy.pac')
38
52
  end
39
53
  end
40
54
  end
@@ -125,4 +125,24 @@ describe GitRepository do
125
125
  expect(result.first.path).to eq('file1.txt')
126
126
  end
127
127
  end
128
+
129
+ context '#each_file' do
130
+ it 'iterates over all found files' do
131
+ repo_path = File.join(working_directory, 'git_repo')
132
+ Rugged::Repository.init_at(repo_path)
133
+
134
+ file = double('file')
135
+ allow(file).to receive(:name).and_return(:file1)
136
+
137
+ file_creator = double('file_creator')
138
+ allow(file_creator).to receive(:new).with('file1.pac', 'asdf1').and_return(file)
139
+
140
+ null_file = double('null_file')
141
+
142
+ repo = GitRepository.new(repo_path, file_creator, null_file)
143
+ repo.add_content('file1.pac', 'asdf1')
144
+
145
+ repo.each_file { |file| file.name }
146
+ end
147
+ end
128
148
  end
@@ -26,13 +26,13 @@ describe GitStorage do
26
26
  end
27
27
  end
28
28
 
29
- context '#files' do
30
- it 'returns a list of files matching pattern' do
29
+ context '#[]' do
30
+ it 'finds by name' do
31
31
  repo = GitRepository.create(git_repo)
32
32
  repo.add_content('file1.txt', 'asdf')
33
33
  repo.add_content('file2.pac', 'data file2.pac')
34
34
 
35
- storage = GitStorage.new(repo.storage_path, compressor, creator)
35
+ storage = GitStorage.new(repo.storage_path, compressor)
36
36
  expect(storage[:file2].content).to eq('data file2.pac')
37
37
  end
38
38
 
@@ -41,7 +41,7 @@ describe GitStorage do
41
41
  repo.add_content('file1.txt', 'asdf')
42
42
  repo.add_content('dir/file2.pac', 'data file2.pac')
43
43
 
44
- storage = GitStorage.new(repo.storage_path, compressor, creator)
44
+ storage = GitStorage.new(repo.storage_path, compressor)
45
45
  expect(storage['dir::file2'.to_sym].content).to eq('data file2.pac')
46
46
  end
47
47
 
@@ -50,15 +50,33 @@ describe GitStorage do
50
50
  repo.add_content('file1.txt', 'asdf')
51
51
  repo.add_content('dir/dir1/file3.pac', 'data asdf.pac')
52
52
 
53
- storage = GitStorage.new(repo.storage_path, compressor, creator)
53
+ storage = GitStorage.new(repo.storage_path, compressor)
54
54
  expect(storage['dir::dir1::file3'.to_sym].content).to eq('data asdf.pac')
55
55
  end
56
+ end
56
57
 
57
- it 'handles a repo without a root commit' do
58
- repo = GitRepository.create(git_repo)
58
+ context '#each_pac_file' do
59
+ it 'iterates over all found pac files' do
60
+ arbitrary_file = double('arbitrary file')
61
+ expect(arbitrary_file).to receive(:extension?).with('.pac').and_return(false)
62
+
63
+ pac_file = double('pac_file')
64
+ allow(pac_file).to receive(:extension?).with('.pac').and_return(true)
65
+ allow(pac_file).to receive(:path).and_return('proxy.pac')
66
+ allow(pac_file).to receive(:name).and_return(:proxy)
67
+
68
+ vcs = double('vcs')
69
+ allow(vcs).to receive(:all_files).and_return([pac_file, arbitrary_file])
70
+
71
+ vcs_engine = double('vcs_engine')
72
+ allow(vcs_engine).to receive(:new).and_return(vcs)
73
+
74
+ storage = GitStorage.new(git_repo, compressor, vcs_engine)
75
+
76
+ result = []
77
+ storage.each_pac_file { |file| result << file}
59
78
 
60
- storage = GitStorage.new(repo.storage_path, compressor, creator)
61
- expect(storage['dir::file2'.to_sym].content).to be_nil
79
+ expect(result).to eq([pac_file])
62
80
  end
63
81
  end
64
82
  end
data/spec/spec_helper.rb CHANGED
@@ -6,6 +6,7 @@ $LOAD_PATH << ::File.expand_path('../../lib', __FILE__)
6
6
  ENV["RACK_ENV"] = "test"
7
7
 
8
8
  require 'simplecov'
9
+ SimpleCov.command_name 'rspec'
9
10
  SimpleCov.start
10
11
 
11
12
  # Pull in all of the gems including those in the `test` group
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: local_pac
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -487,6 +487,7 @@ files:
487
487
  - lib/local_pac/actions/reload_configuration.rb
488
488
  - lib/local_pac/actions/reload_local_storage.rb
489
489
  - lib/local_pac/actions/send_signal.rb
490
+ - lib/local_pac/actions/show_available_proxy_pac_files.rb
490
491
  - lib/local_pac/actions/show_config.rb
491
492
  - lib/local_pac/actions/show_process_information.rb
492
493
  - lib/local_pac/application_status.rb
@@ -548,6 +549,7 @@ files:
548
549
  - spec/actions/reload_configuration_spec.rb
549
550
  - spec/actions/reload_repository_spec.rb
550
551
  - spec/actions/send_signal_spec.rb
552
+ - spec/actions/show_available_proxy_pac_files_spec.rb
551
553
  - spec/actions/show_config_spec.rb
552
554
  - spec/actions/show_process_information_spec.rb
553
555
  - spec/application_status_spec.rb
@@ -631,6 +633,7 @@ test_files:
631
633
  - spec/actions/reload_configuration_spec.rb
632
634
  - spec/actions/reload_repository_spec.rb
633
635
  - spec/actions/send_signal_spec.rb
636
+ - spec/actions/show_available_proxy_pac_files_spec.rb
634
637
  - spec/actions/show_config_spec.rb
635
638
  - spec/actions/show_process_information_spec.rb
636
639
  - spec/application_status_spec.rb