aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--lib/pronto/eslint_npm.rb29
-rw-r--r--spec/pronto/eslint_spec.rb39
-rw-r--r--spec/spec_helper.rb9
3 files changed, 60 insertions, 17 deletions
diff --git a/lib/pronto/eslint_npm.rb b/lib/pronto/eslint_npm.rb
index e861ffe..63a215b 100644
--- a/lib/pronto/eslint_npm.rb
+++ b/lib/pronto/eslint_npm.rb
@@ -22,14 +22,18 @@ module Pronto
22 @files_to_lint = regexp.is_a?(Regexp) && regexp || Regexp.new(regexp) 22 @files_to_lint = regexp.is_a?(Regexp) && regexp || Regexp.new(regexp)
23 end 23 end
24 24
25 def read_config 25 def config_options
26 config_file = File.join(repo_path, CONFIG_FILE) 26 @config_options ||=
27 return unless File.exist?(config_file) 27 begin
28 config = YAML.load_file(config_file) 28 config_file = File.join(repo_path, CONFIG_FILE)
29 File.exist?(config_file) && YAML.load_file(config_file) || {}
30 end
31 end
29 32
30 CONFIG_KEYS.each do |config_key| 33 def read_config
31 next unless config[config_key] 34 config_options.each do |key, val|
32 send("#{config_key}=", config[config_key]) 35 next unless CONFIG_KEYS.include?(key.to_s)
36 send("#{key}=", val)
33 end 37 end
34 end 38 end
35 39
@@ -48,7 +52,7 @@ module Pronto
48 private 52 private
49 53
50 def repo_path 54 def repo_path
51 @_repo_path ||= @patches.first.repo.path 55 @repo_path ||= @patches.first.repo.path
52 end 56 end
53 57
54 def inspect(patch) 58 def inspect(patch)
@@ -75,13 +79,14 @@ module Pronto
75 79
76 def run_eslint(patch) 80 def run_eslint(patch)
77 Dir.chdir(repo_path) do 81 Dir.chdir(repo_path) do
78 escaped_file_path = Shellwords.escape(patch.new_file_full_path.to_s) 82 JSON.parse `#{eslint_command_line(patch.new_file_full_path.to_s)}`
79 JSON.parse(
80 `#{eslint_executable} #{escaped_file_path} -f json`
81 )
82 end 83 end
83 end 84 end
84 85
86 def eslint_command_line(path)
87 "#{eslint_executable} #{Shellwords.escape(path)} -f json"
88 end
89
85 def clean_up_eslint_output(output) 90 def clean_up_eslint_output(output)
86 # 1. Filter out offences without a warning or error 91 # 1. Filter out offences without a warning or error
87 # 2. Get the messages for that file 92 # 2. Get the messages for that file
diff --git a/spec/pronto/eslint_spec.rb b/spec/pronto/eslint_spec.rb
index 52e52f2..a00a05b 100644
--- a/spec/pronto/eslint_spec.rb
+++ b/spec/pronto/eslint_spec.rb
@@ -100,6 +100,45 @@ module Pronto
100 it 'is `eslint` by default' do 100 it 'is `eslint` by default' do
101 expect(eslint_executable).to eql('eslint') 101 expect(eslint_executable).to eql('eslint')
102 end 102 end
103
104 context(
105 'with different eslint executable config',
106 config: { 'eslint_executable' => 'custom_eslint' }
107 ) do
108 it 'is correct' do
109 eslint.read_config
110 expect(eslint_executable).to eql('custom_eslint')
111 end
112 end
113 end
114
115 describe '#eslint_command_line' do
116 subject(:eslint_command_line) { eslint.send(:eslint_command_line, path) }
117 let(:path) { '/some/path.rb' }
118
119 it 'adds json output flag' do
120 expect(eslint_command_line).to include('-f json')
121 end
122
123 it 'adds path' do
124 expect(eslint_command_line).to include(path)
125 end
126
127 it 'starts with eslint executable' do
128 expect(eslint_command_line).to start_with(eslint.eslint_executable)
129 end
130
131 context 'with path that should be escaped' do
132 let(:path) { '/must be/$escaped' }
133
134 it 'escapes the path correctly' do
135 expect(eslint_command_line).to include('/must\\ be/\\$escaped')
136 end
137
138 it 'does not include unescaped path' do
139 expect(eslint_command_line).not_to include(path)
140 end
141 end
103 end 142 end
104 end 143 end
105end 144end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index b3d8596..c05f072 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -17,10 +17,9 @@ require 'pronto/eslint_npm'
17end 17end
18 18
19RSpec.shared_context 'with config', config: true do 19RSpec.shared_context 'with config', config: true do
20 requested_config = metadata[:config].to_yaml 20 requested_config = metadata[:config]
21 21
22 let(:config_path) { File.join(repo.path.to_s, Pronto::ESLintNpm::CONFIG_FILE) } 22 before(:each) do
23 23 allow_any_instance_of(Pronto::ESLintNpm).to receive(:config_options).and_return(requested_config)
24 before(:each) { File.write(config_path, requested_config) } 24 end
25 after(:each) { FileUtils.rm(config_path) }
26end 25end